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

#!/bin/bash
mysqladmin -uroot -p'瀵嗙爜' extended-status -i1|awk \
'BEGIN{flag=0;
print "";
print "QPS TPS Threads_con Threads_run ";
print "------------------------------------- "}
$ ~ /Queries$/ {q=$-lq;lq=$;}
$ ~ /Com_commit$/ {c=$-lc;lc=$;}
$ ~ /Com_rollback$/ {r=$-lr;lr=$;}
$ ~ /Threads_connected$/ {tc=$;}
$ ~ /Threads_running$/ {tr=$; if(flag==){
flag=; count=
}else {
printf "%-6d %-8d %-10d %d \n", q,c+r,tc,tr;
} }'

Mysql 监控性能状态 QPS/TPS【转】的更多相关文章

  1. Linux下top命令监控性能状态

    1.性能分析因素:CPU.内存.网络.磁盘读写 2.系统对应的应用类型主要分为以下两种: IO Bound:一般都是高负荷的内存使用以及存储系统,IO范畴的应用就是一个大数据处理的过程:通常数据库软件 ...

  2. MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

    第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...

  3. 第 18 章 高可用设计之 MySQL 监控

    前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出 ...

  4. MySql(十八):MySql架构设计——高可用设计之 MySQL 监控

    前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出 ...

  5. zabbix监控Mysql中的QPS/TPS

    今天我们来了解一下如何通过zabbix监控来监控我们msyql数据库中的TPS和QPS,提到这两个概念,我们先来了解究竟什么是QPS,TPS呢?它们是如何计算得到的呢?我们来看一下 QPS(Quest ...

  6. mysql状态查看 QPS/TPS/缓存命中率查看

    运行中的mysql状态查看   对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态.    (1)QPS(每秒Query量)  QPS = Questions(or Queries ...

  7. mysql状态查看 QPS/TPS/缓存命中率查看【转】

    运行中的mysql状态查看   对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态.    (1)QPS(每秒Query量)  QPS = Questions(or Queries ...

  8. 【MySQL】为什么不要问我DB极限QPS/TPS

    为什么不要问我DB极限QPS/TPS 背景 相信很多开发都会有这个疑问,DB到底可以支撑多大的业务量,如何去评估?对于这个很专业的问题,DBA也没有办法直接告诉你,更多的都是靠经验提供一个看似靠谱的结 ...

  9. MySQL数据库性能优化与监控实战(阶段四)

    MySQL数据库性能优化与监控实战(阶段四) 作者 刘畅 时间 2020-10-20 目录 1 sys数据库 1 2 系统变量 1 3 性能优化 1 3.1 硬件层 1 3.2 系统层 1 3.3 软 ...

随机推荐

  1. IBatisNet 缓存使用

    参考:http://www.cnblogs.com/xiaogangqq123/archive/2011/06/30/2094905.html <?xml version="1.0&q ...

  2. 关于dismissViewControllerAnimated值得注意的一点(deinit)

    在使用dismissViewControllerAnimated退出当前视图的时候,理论上,该视图对象就会被清除了, 也就是说会进去当前类的析构函数deinit里面.但是有时候会发现,dismiss之 ...

  3. Alpha 冲刺 —— 十分之九

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 多次测试软件运行 学习OPENMP ...

  4. C++接口继承与实现继承的区别和选择

    1.接口继承与实现继承的区别 <Effective C++>条款三十四:区分接口继承和实现继承中介绍的比较啰嗦,概括地说需要理解三点: (1)纯虚函数只提供接口继承,但可以被实现: (2) ...

  5. 前端学习 -- Css -- 伪元素

    :first-letter 表示第一个字符 :first-line 表示文字的第一行 :before 选中元素的最前边,一般该伪类都会结合content一起使用,通过content可以向指定位置添加内 ...

  6. 书架 bookshelf

    书架 bookshelf 题目描述 当Farmer John闲下来的时候,他喜欢坐下来读一本好书. 多年来,他已经收集了N本书 (1 <= N <= 100,000). 他想要建立一个多层 ...

  7. 【整体二分】【P3834】 【模板】可持久化线段树 1(主席树)

    Description 给定一个长度为 \(n\) 的序列, \(m\) 次操作静态查询区间第 \(k\) 大 Input 第一行是 \(n,m\) 下一行描述这个序列 下面 \(m\) 行描述操作 ...

  8. Struts2的配置文件中, <package>的作用,<action><result>重名?

    问:Struts2的配置文件中, <package>的作用是什么? 答:防止action重名啊,例如前台和后台,总会有很多地方起名重复的! 问:可是访问的时候,不也是访问action吗,能 ...

  9. php 中 envoy 的使用方法

    相关文档:中文文档.英文文档 envoy 是什么? envoy 是一个支持 blade 语法的 ssh 远程命令执行的工具.具体来说就是,通过配置 ssh 的账号.密码.key 这些,然后可以使用 e ...

  10. Hystrix之Dashboard的常见问题

    Hystrix Dashboard (断路器:Hystrix 仪表盘)只监控一个实例,而Turbine监控多个实例,要使用Turbine必须使用Hystrix,因为Turbine是为了监控断路器的状态 ...