一、最好的优化-----不查询!

.

【MySQL】计算 TPS,QPS 的方式_服务器


周期性负载过大,或偶尔卡住,如何来处理?


--------

?

, 还是某单条语句的问题?

, 这条语句是在等待上花的时间,还是查询上花的时间.

-----监测并观察服务器的状态.


    

观察服务器状态, 一般用如下2个命令

Show status;  Show processlist;

: mysql> show status;

   #mysqladmin ext (功能相同)

二、那我们来做一个实验:MySQL周期性波动试验

: 模拟数据库高低峰时的压力波动,并会观察绘制波动曲线

: 反复查询数据库并缓存入memcached, 缓存定期失效,

,并作图表.

: nginx+php+memcached+awk+ab

随机访问3W条热数据,并储存在memcached中

储存查询结果)

压力测试工具

脚本


三、实验步骤: 


1300W以上,热数据3W,50个并发,每秒请求500-1000次

生命周期为60秒,

生命周期要结合请求周期来制定,比如3万条数据随机,每秒1000条,30秒能走一遍,生命周期可设为60秒)

mysql连接数,每秒请求数的周期变化.


【MySQL】计算 TPS,QPS 的方式_服务器_02




【MySQL】计算 TPS,QPS 的方式_mysql_03


【MySQL】计算 TPS,QPS 的方式_sql_04


再打开一个窗口

个并发,200000个总请求


【MySQL】计算 TPS,QPS 的方式_mysql_05


缓存热数据脚本


[php]  view plain copy


1. <?php  
2.   
3. // 30K hot news  
4. $rangeid = rand(1,30000)+13000000;  
5.   
6. $mconn = memcache_connect('localhost',11211);  
7.   
8. if( ($com = memcache_get($mconn,$rangeid)) === false) {  
9. $conn = mysql_connect('localhost','root');  
10.   
11. $sql = 'use bigdata';  
12. $sql,$conn);  
13.   
14. $sql = 'set names utf8';  
15. $sql,$conn);  
16. $sql = 'select id,name,brief from lx_com where id=' . $rangeid;  
17.   
18. $rs = mysql_query($sql,$conn);  
19. $com = mysql_fetch_assoc($rs);  
20.   
21. $mconn , $rangeid , $com , false, mt_rand(40,120));  
22. } else {  
23. echo 'from cache';  
24. }  
25. print_r($com);


统计脚本status.sh


[php]  view plain copy

让memcached后台运行

1. #!/bin/bash  
2. while true  
3. do  
4. mysqladmin -uroot ext|awk '/Queries/{q=$4}/Threads_connected/{c=$4}/Threads_running/{r=$4}END{printf("%d %d %d\n",q,c,r)}' >> status.txt  
5. sleep 1  
6. done


【MySQL】计算 TPS,QPS 的方式_mysql_06

ab压力测试


【MySQL】计算 TPS,QPS 的方式_sql_07

在Excel画出图表


【MySQL】计算 TPS,QPS 的方式_服务器_08

减少无关请求(业务逻辑层面,暂不讨论,但其实是最有效的手段)

如果请求数是一定的,不可减少的. 我们要尽量让请求数平稳,不要有剧烈波动.

,不是服务器撑不住总的查询量,而是在某个时间段撑不住高峰请求.

夜间负载低时,集中失效. 

,但夜间访问量少,因此波峰并不剧烈,当到上午10点左右人多时,缓存已经建立了一部分. 白天时,波峰也不剧烈. 

,也可以减缓波峰剧烈的情况

80秒,改为[40-120秒],其他实验条件不变.

得到如下曲线




【MySQL】计算 TPS,QPS 的方式_sql_09

,稳定运行后,请求在[1000-1500]之间波动,

,请求在[500-1700]之间波动.