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
#!/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【转】的更多相关文章
- Linux下top命令监控性能状态
1.性能分析因素:CPU.内存.网络.磁盘读写 2.系统对应的应用类型主要分为以下两种: IO Bound:一般都是高负荷的内存使用以及存储系统,IO范畴的应用就是一个大数据处理的过程:通常数据库软件 ...
- MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控
第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...
- 第 18 章 高可用设计之 MySQL 监控
前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出 ...
- MySql(十八):MySql架构设计——高可用设计之 MySQL 监控
前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出 ...
- zabbix监控Mysql中的QPS/TPS
今天我们来了解一下如何通过zabbix监控来监控我们msyql数据库中的TPS和QPS,提到这两个概念,我们先来了解究竟什么是QPS,TPS呢?它们是如何计算得到的呢?我们来看一下 QPS(Quest ...
- mysql状态查看 QPS/TPS/缓存命中率查看
运行中的mysql状态查看 对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态. (1)QPS(每秒Query量) QPS = Questions(or Queries ...
- mysql状态查看 QPS/TPS/缓存命中率查看【转】
运行中的mysql状态查看 对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态. (1)QPS(每秒Query量) QPS = Questions(or Queries ...
- 【MySQL】为什么不要问我DB极限QPS/TPS
为什么不要问我DB极限QPS/TPS 背景 相信很多开发都会有这个疑问,DB到底可以支撑多大的业务量,如何去评估?对于这个很专业的问题,DBA也没有办法直接告诉你,更多的都是靠经验提供一个看似靠谱的结 ...
- MySQL数据库性能优化与监控实战(阶段四)
MySQL数据库性能优化与监控实战(阶段四) 作者 刘畅 时间 2020-10-20 目录 1 sys数据库 1 2 系统变量 1 3 性能优化 1 3.1 硬件层 1 3.2 系统层 1 3.3 软 ...
随机推荐
- BZOJ5321 JXOI2017加法(二分答案+贪心+堆+树状数组)
二分答案后得到每个位置需要被加的次数.考虑贪心.从左到右考虑每个位置,将以该位置为左端点的区间按右端点从大到小加进堆.看该位置还需要被加多少次,如果不需要加了就不管,否则取堆顶区间将其选择,BIT实现 ...
- Vector源码解析
概要 学完ArrayList和LinkedList之后,我们接着学习Vector.学习方式还是和之前一样,先对Vector有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它.第1部分 Vec ...
- java中的变量各占得字节数
boolen,8位1个字节int,32位,4个字节float,32位 4个字节double,64位8个字节char 16位,2个字节byte 8位1个字节short 16位 2个字节long 64位 ...
- mysql用mysqldump数据库备份和恢复
备份: 用mysqldump命令把数据库被分成sql文件:(注意是在cmd里,不用进入数据库,输入之后会提示输入密码) mysqldump -hlocalhost -uroot -p testdb & ...
- STL 容器的概念
STL 容器的概念 在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要. 经典的数据结构数量有限,但是我们 ...
- 【刷题】BZOJ 1977 [BeiJing2010组队]次小生成树 Tree
Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了.小 P 说,让小 C 求出一 ...
- Codeforces Round #302 (Div. 2) C 简单dp
C. Writing Code time limit per test 3 seconds memory limit per test 256 megabytes input standard inp ...
- django中django.conf.urls.url函数
在urls.py文件中,我们经常会看到类似于这样的代码: urlpatterns = [ url(r'^blog/(?P<year>[0-9]{4})/$', views.year_arc ...
- Docker login报错一例
在一台ubuntu 18.04上执行docker login 登录镜像仓库的时候,抛出如下异常: error getting credentials - err: exit status 1, out ...
- 无法将网络更改为桥接状态 没有VMent0
本文主要分享 VMware 10.0.2 报错信息:无法将网络更改为桥接状态的解决经验 工具/原料 VMware 10.0.2 方法/步骤 1 故障现象,导致虚拟机无法正常上网 设备管理器 ...