这几天在调优mysql性能,想看一下运行中的mysql的性能指标,核心关注的其实就是QPS和TPS,但是对于mysql来说这两个指标默认是没有的,而我又不想为了这几个指标去装一个prometheus,用mysql_exporter去导出。

所以就想写个简单的脚本去完成这个工作,mysql本身的show status 已经有了足够的信息,对于计算指标来说:

QPS = Queries / Seconds

Queries 是系统状态值–总查询次数,Seconds 是监控的时间区间,单位为秒,例如采样10秒内的查询次数,那么先查询一次Queries值(Q1),等待10秒,再查询一次Queries值(Q2)

QPS = (Q2 - Q1) / 10

对于TPS来说mysql中没有直接的事务计数器,需要通过事务提交数和事务回滚数来计算:

TPS = (Com_commit + Com_rollback) / Seconds

Com_commit、Com_rollback 的值也可以通过 show status 查询得出,除了TPS和QPS外,Threads_connected 当前连接的线程的个数 ,Threads_running 运行状态的线程的个数。

整个脚本内容如下:

#!/bin/bash
mysqladmin -h 127.0.0.1 -uroot -p'baifachuan' extended-status -i1|awk \
'BEGIN{flag=0;
print "";
print "QPS TPS Threads_con Threads_run ";
print "------------------------------------- "}
$2 ~ /Queries$/ {q=$4-lq;lq=$4;}
$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; count=0
}else {
printf "%-6d %-8d %-10d %d \n", q,c+r,tc,tr;
}
}'

awk是代码中的重点,mysqladmin 的执行结果通过管道传给 awk 进行分析,使用mysqladmin的extended-status效果和show status是一样的。


扫码手机观看或分享: