Mysql 监控性能状态 QPS/TPS

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详细说明:

快速理解linux文本分析利器awk

本文分享自微信公众号 - 性能与架构(yogoup)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-02-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ml

字符中的小知识(“123”的十进制是多少)

        在数据库,录入数据的时候,遇到一个小问题。当设置变量的类型为 Bit 时,你写进去的数据为:“123”时, 会显示一个这样的数值:3224115...

435100
来自专栏ml

mysql知识初篇(一)

mysql介绍 (1) mysql数据库是瑞典AB开发。 (2) mysql--> sun --> oracle。 (3) mysql数据库的...

37670
来自专栏ml

mysql的小知识点(关于数据库的导入导出 对于windows)

      对于,一个存在的数据,我们该如何去打包成.sql属性的文件呢?       直接进行这两条语句: 1 D:\Program Files\MySQL\...

52280
来自专栏CDA数据分析师

搭好数据架构,这7个技术是关键

? 本文转自网络,如涉侵权请及时联系我们 企业IT基础设施平台的重新构建是一项复杂的任务。重新构建平台通常由一系列变化的关键业务驱动因素引发,现在情况正是如此...

43450
来自专栏新智元

【CB Insights】美国独角兽市场及全球深度学习初创公司纵览

【新智元导读】CB Insights 日前汇集了美国市值超过 10 亿美元估值的独角兽公司地理分布情况,新智元结合该公司今年 9 月汇总的 2016 年全球值得...

43670
来自专栏云计算D1net

混合云中如何阻断I/O瓶颈?

当构建混合云时,IT团队应用认真思考他们的性能需求,从而避免I/O瓶颈。这些需求是独立于用例的。 极端情况下,数据库会存储造成伤害,且不能获得充足的IOPS,即...

37350
来自专栏ml

------------数据库的加锁操作(上)

       从事一个项目,需要考虑数据的安全性,之前对于数据库这部分的数据操作学习的比较零散,由于手头的项目,于是系统的 学习了下数据库操作加锁的知识: --...

611100
来自专栏Golang语言社区

golang实现基于redis和consul的可水平扩展的排行榜服务范例

本文的完整代码见 https://github.com/changjixiong/goNotes/tree/master/redisnote ,https://...

46160
来自专栏Golang语言社区

go语言的sql包原理与用法分析

本文实例讲述了go语言的sql包原理与用法。分享给大家供大家参考,具体如下: go的sql包是在pkg/database中,里面的两个包sql和sql/driv...

49260
来自专栏新智元

【质疑AI泡沫】当我们谈论机器学习时,我们究竟在说些什么

【新智元导读】当下“机器学习”或者说“人工智能”过热,虽然在所难免,但作者指出,媒体、投资人尤其应该具有怀疑的精神,任何声明都需要有证据支撑。如今人工智能仍处于...

53990

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励