关于RDS的性能
Re关于RDS的性能
ping的数据如下:
ds.aliyuncs.com (ip) 56(84) bytes of data.
64 bytes from ip: icmp_req=1 ttl=54 time=1.21 ms
64 bytes from ip: icmp_req=2 ttl=54 time=1.21 ms
64 bytes from ip: icmp_req=3 ttl=54 time=1.23 ms
64 bytes from ip: icmp_req=4 ttl=54 time=1.20 ms
看起来还好
-------------------------
回1楼小猪猪的帖子
嗯,我试试用hibernate 2nd level cache,减少数据库的直接访问
-------------------------
回2楼mayle的帖子
ping的数据还好,1.x ms
那现在的解释可能是,链接建立时间?
我是新手,配置mysql有个connection pool,这算是使用了长连接吗?
谢谢!
-------------------------
回7楼mayle的帖子
我用的java melody做的profiling
今天我打开了memcache,从而减少数据库访问,request的处理时间明显下降。
进一步说明,确实是因为访问数据库造成了性能下降。
另外,值得注意的是:数据库操作时间跟数据库sql hit的个数呈线性关系(我观察了大概10几个request,需要我也可以贴图),大概一个hit需费时4ms;这说明应该不是短长链接引起的;
我截了图,只放了一个request的数据;第一行是memcache打开之前的,第二行是memcache打开之后的数据。
-------------------------
Re关于RDS的性能
忘了说了,最后两列是数据库相关的。其中,最后一列是ms,倒数第二列是sql hit count
第四列绿色的数字,是request总耗时。
-------------------------
回11楼mayle的帖子
刚刚申请加入了,能否帮忙转贴下分析结果。我现在进去,之前的聊天记录我应该看不到的吧
-------------------------
Re关于RDS的性能
我刚刚弄了一张最小的表,然后在RDS以及本地的数据库上都通过rest api进行操作,每个操作都只是简单的一个select
数据如下
第一行是数据库在RDS的性能,可以明显看到每个sql hit的mean time为3ms
第二行是数据库在本地(本地是个性能非常一般的机器),每个sqlhit的mean time为0(说明小于1ms)
期待大牛解释
-------------------------
Re关于RDS的性能
#include #include #include #include int main(void) { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; /* Change me */ char *server = 'rdsql.rds.aliyuncs.com'; char *user = 'userXXX'; char *password = 'XXXXX'; char *database = 'XXXX'; conn = mysql_init(NULL); /* Connect to database */ if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, '%s\n', mysql_error(conn)); exit(1); } struct timeval start, end; long secs_used,micros_used; gettimeofday(&start, NULL); char *sql_cmd = 'SELECT * FROM user where id=11'; /* send SQL query */ if (mysql_query(conn, sql_cmd)) { fprintf(stderr, '%s\n', mysql_error(conn)); exit(1); } gettimeofday(&end, NULL); printf('start: %d secs, %d usecs\n',start.tv_sec,start.tv_usec); printf('end: %d secs, %d usecs\n',end.tv_sec,end.tv_usec); secs_used=(end.tv_sec - start.tv_sec); //avoid overflow by subtracting first micros_used= ((secs_used*1000000) + end.tv_usec) - (start.tv_usec); printf('Execute SQL %s micros_used: %d\n',sql_cmd, micros_used); res = mysql_use_result(conn); int num_fields = mysql_num_fields(res); /* output table name */ printf('Result of %s is :\n', sql_cmd); while ((row = mysql_fetch_row(res)) != NULL) { int i; for (i = 0; i printf('%s ', row ? row : 'NULL'); } printf('\n'); } /* close connection */ mysql_free_result(res); mysql_close(conn); return 0;}
-------------------------
Re关于RDS的性能
gcc -o select_one_row mysql_select_one_row.c -lmysqlclient-------------------------
Re关于RDS的性能
总结一下,使用RDS,肯定会比local的mysql要慢。具体是一个sql select操作,RDS大概会费时3到4ms,而local的mysql server,大概是0.4到0.5ms。原因应该就是网络延迟,ping rds大概是1.3ms;本来我不理解的是,local的0.4ms 加上网络延迟1.3ms,到了RDS最多也就是2ms,怎么会变成3到4ms;可能的解释是,ping也就是一个来回,而且是比较简单的网络协议;sql操作可能会涉及到一些握手行为,多加一个来回,就是多1ms多。-------------------------
Re关于RDS的性能
嗯,看我代码,profile相关的代码,只是包含了select 操作,没有包含建立链接以及关闭链接-------------------------
回23楼joyzheng的帖子
第一个问题见20楼第二个问题,我的理解,是的-------------------------
Re关于RDS的性能
最后回复下21楼,2000次的select,平均下来的sql操作也是3.x msstart: 1410340266 secs, 704180 usecsend: 1410340274 secs, 412382 usecsExecute SQL SELECT * FROM user where id=%d 2000 times, average micros_used: 3854
赞0
踩0