QPS
:Queries Per Second
查询量/秒,是一台服务器每秒可以相应的查询次数,是对一个特定的查询服务器在规定时间内所处理查询量多少的衡量标准。mysql
TPS
: Transactions Per Second 事务数/秒,是一台数据库服务器在单位时间内处理的事务的个数。面试
先来认识一下如下几个有关查询的指标:sql
由上可见,在数据库中执行show命令会使questions值加1,而com_select则不记录,并且对于数据库的监控,常常会用到show命令,因此在用questions方式计算时,数据实际上是被污染的。 并且questions的值在设置环境变量的时候,也是一直在增加的,而com_select的值在此过程当中,并不增加。 因此在使用question方式进行计算时,人为拉高了qps的结果,相对来讲,使用com_select此种方式来计算qps,相对比较帖近真实状况一些,也就是说,在同等条件下,拉高了qps的值。数据库
如下将介绍经过Questions
方式以及Com_select
方式计算QPSbash
1.Questions方式计算QPS公式服务器
questions = show global status where variable_name='Questions';
uptime = show global status like 'Uptime';
qps=questions/uptime
复制代码
如上,拿当前Questions值除去Uptime=QPS,这个QPS的意义为从MySQL上一次启动到当前而且包含show命令平均每秒的QPS值,假如某个时间段的查询数量特别高,可是经过除Uptime时间,也会被拉下来。而且此questions值包含了show命令及环境变量所形成的数据污染。markdown
2.Questions方式计算QPS指标SQL 注:如下SQL在MySQL8.0中进行测试,5.6或5.7中的稍有差别。架构
select round(sum(if(variable_name='Questions',variable_value,0))/sum(if(variable_name='Uptime',variable_value,0)),1) as 'QPS' from performance_schema.global_status where variable_name in ('Questions','Uptime');
复制代码
经过Com_select来计算QPS,能够连续获取两次Com_select指标,拿新指标减去老指标后再除于间隔时长的出间隔时间内的每秒平均值。这种方式更贴近真实一些。 1.Com_Select方式计算QPS脚本运维
Com_Select = show global status where Variable_name='Com_select';
#!/usr/bin/env bash
OLD_QPS=`echo "show global status where Variable_name='Com_select';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
sleep $1
NEW_QPS=`echo "show global status where Variable_name='Com_select';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
echo "($NEW_QPS-$OLD_QPS) / $1" | bc
复制代码
获取TPS指标的方式也有两种:分布式
com_commit
、com_rollback
计算tpscom_insert
、com_delete
、com_update
的status
,变量计算tps相关指标介绍:
Com_commit
:MySQL从上一次启动到当前所执行的提交语句总数量Com_rollback
:MySQL从上一次启动到当前所执行的回退语句总数量1.基于com_commit和com_rollback方式计算TPS公式 这样计算出来的TPS也是MySQL从上次启动到当前平均每秒的TPS指标
com_commit = show global status where variable_name='com_commit';
com_rollback = show global status where variable_name='com_rollback';
uptime = show global status where Variable_name='Uptime';
tps=(com_commit + com_rollback)/uptime
复制代码
2.计算脚本
#!/usr/bin/env bash
COM_COMMIT=`echo "show global status where Variable_name='Com_commit';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
COM_ROLLBACK=`echo "show global status where Variable_name='Com_rollback';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
UPTIME=`echo "show global status where Variable_name='Uptime';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
echo "($COM_COMMIT + $COM_ROLLBACK) / $UPTIME" | bc
复制代码
相关指标介绍:
Com_update
: MySQL从上一次启动到当前所执行的更新语句总数量Com_delete
:MySQL从上一次启动到当前所执行的删除语句总数量Com_insert
:MySQL从上一次启动到当前所执行的插入语句总数量1.计算脚本 指定间隔时间内取值两次,而后新指标减去老指标后三个指标相加再除以间隔时间得出间隔时间内每秒平均TPS
#/usr/bin/env bash
OLD_COM_INSERT=`echo "show global status where Variable_name='Com_insert';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
OLD_COM_UPDATE=`echo "show global status where Variable_name='Com_update';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
OLD_COM_DELETE=`echo "show global status where Variable_name='Com_delete';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
sleep $1
NEW_COM_INSERT=`echo "show global status where Variable_name='Com_insert';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
NEW_COM_UPDATE=`echo "show global status where Variable_name='Com_update';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
NEW_COM_DELETE=`echo "show global status where Variable_name='Com_delete';"|mysql --defaults-file=./.my.cnf -N|awk '{print $2}'`
echo "(($NEW_COM_INSERT - $OLD_COM_INSERT) + ($NEW_COM_UPDATE - $OLD_COM_UPDATE) + ($NEW_COM_DELETE - $OLD_COM_DELETE)) / $1" | bc
复制代码
如上内容如存在错误或意见不一致,欢迎指出并在评论区讨论更好的方法 ※更多文章和资料|点击后方文字直达 ↓↓↓ 100GPython自学资料包 阿里云K8s实战手册 [阿里云CDN排坑指南]CDN ECS运维指南 DevOps实践手册 Hadoop大数据实战手册 Knative云原生应用开发指南 OSS 运维实战手册 云原生架构白皮书 Zabbix企业级分布式监控系统源码文档 云原生基础入门手册 10G大厂面试题戳领