Mysql 监控性能状态 QPS/TPS

 

原创 2016-02-05 杜亦舒 性能与架构
QPS(Query per second) 每秒查询量
 
TPS(Transaction per second)每秒事务量
 
这是Mysql的两个重要性能指标,需要经常查看,和Mysql基准测试的结果对比,如果值过高,就要尽快处理了
 
计算方法
 
01
QPS
 
QPS = Queries / Seconds
 
Queries 是系统状态值--总查询次数,可以通过 show status 查询得出
 
 
 
Seconds 是监控的时间区间,单位为秒
 
例如采样10秒内的查询次数,那么先查询一次Queries值(Q1),等待10秒,再查询一次Queries值(Q2)
 
QPS = (Q2 - Q1) / 10
 
02
TPS
 
mysql中没有直接的事务计数器,需要通过事务提交数和事务回滚数来计算
 
TPS = (Com_commit + Com_rollback) / Seconds
 
Com_commit、Com_rollback 的值通过 show status 查询得出
 
 
 
 
 
计算思路与 QPS 相似
 
 
统计脚本
 
上面是QPS/TPS的统计思路,实际操作中如果用手动方式计算很不方便,最好用程序实现
 
mysqladmin 的 extended-status 指令和 show status 差不多,可以查看mysql的状态值,如
 
# mysqladmin -uroot -p'密码' extended-status
 
 
 
其中含有我们需要的状态值,那么就可以分析extended-status的结果信息,然后计算,最后显示出来
 
统计目标
 
每隔一秒统计一次 QPS、TPS
 
mysql 还有两个信息比较重要:
 
Threads_connected 当前连接的线程的个数
Threads_running 运行状态的线程的个数
 
这两个值也在extended-status的结果中,所以可以一道显示出来
 
最后统计结果信息包括:
 
QPS、TPS、Threads_connected、Threads_running
 
先看下统计结果的展现形式
 
 
 
基本思路
 
每秒钟运行一次extended-status,使用awk分析结果值,从中筛选出我们需要的值:
 
Queries、Com_commit、Com_rollback、Threads_connected、Threads_running
 
QPS = Queries值 - 上一次的值
 
TPS = (Com_commit值 - 上一次的值) + (Com_rollback值 - 上一次的值)
 
因为是1秒钟统计一次,所以计算QPS/TPS时就不用除以秒数了
 
脚本代码
 
 
 
代码分析
 
awk是代码中的重点,mysqladmin 的执行结果通过管道传给 awk 进行分析
 
'BEGIN{flag=0;
print "";
print "QPS   TPS    Threads_con Threads_run ";
print "------------------------------------- "}
 
这部分是初始设置,打印出表头
 
flag=0 是设置一个标识位,后面用到
 
$2 ~ /Queries$/  {q=$4-lq;lq=$4;}
 
其中 $2 $4 代表某列的内容
 
awk是按行分析并按空格分割的,例如行信息为:
 
| Queries | 213263713 |
 
按空格分割后得到5列:
 
'|', 'Queries', '|', '213263713', '|'
 
$2 : Queries
 
$4 : 213263713
 
那么这句的意思就是:
 
当第2列的值匹配‘Queries’时,
变量q = 第4列的值 - 变量lq的值,
变量lq = 第4列的值
 
变量q 就是 QPS值,用这一次的 Queries值 减去 上一次的值
 
$2 ~ /Com_commit$/   {c=$4-lc;lc=$4;}
$2 ~ /Com_rollback$/   {r=$4-lr;lr=$4;}
$2 ~ /Threads_connected$/  {tc=$4;}
$2 ~ /Threads_running$/    {tr=$4;
 
这几句的意思与上一句类似
 
if(flag==0){
    flag=1;
}
 
这里用到了flag这个标识位,意思是对第一次的分析结果什么都不做,因为这句
 
{q=$4-lq;lq=$4;}
 
q=$4-lq; 中的 lq 在第一次分析中还没有值
 
else {
    printf "%-6d %-8d %-10d %d \n", q,c+r,tc,tr;
}
 
这部分就是打印统计结果信息
 
 
下面是脚本代码下载地址,有兴趣的话可以下来实验一下
 
http://devdd.oss-cn-beijing.aliyuncs.com/mysql_QPS_TPS.txt
awk详细说明:
posted @ 2018-08-15 19:29  micwin  阅读(1107)  评论(0编辑  收藏  举报