社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间
作者简介
杨奇龙,网名“北在南方”,7年DBA老兵,目前任职于杭州有赞科技DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。
从公司到萧山机场 40min
机场安检,候机,登机 40min
飞机飞行 耗时 100min
飞机落地,打的到望京 耗时40min
RT= 40 + 40 + 100 + 40 =220min
RT = 等待时间 + 执行时间
app <---->(网络建立连接,data 传输)<----> proxy <---->(网络建立连接,data 传输)<----> mysql(执行)
重点:不要把 trace 系统中的监控 rt 直接当做 db 的执行时间
前面说了 RT 的定义以及它所代表意义。接下来我们看看如何监控数据库的 RT ,现有的方式主要有两种。
2.1 tcprstat
tcprstat 是 Percona 基于 libpcap 研发的工具,是通过测量 TCP 的 request 和 response 所需的时间间隔,适用于一问一答式协议类型的处理。通常用来监测 MySQL 响应时间,或者说是请求在服务器端的处理时间,其输出结果包括了响应时间相关的统计值,用来诊断服务器端性能状况。
举个例子:
count:此间隔内处理完成的请求数量。
avg:此间隔内所有完成的请求,响应的平均时间。
95_avg
:此间隔内,95% 的请求量的平均响应时间,单位微妙,该值较能体现 MySQL Server 的查询平均响应时间。如果我们只需要输出 count, 平均时间,
95_avg
,99_avg
则可以用如下命令。tcprstat -p 3312 -t 1 -n 0 -l ip_address -f '%T\t%n\t%a\t%95a\t%99a\n'
如果执行 tcprstat 遇到如下问题:
# tcprstat -p 3312 -t 1 -n 5
pcap: SIOCGIFFLAGS: bonding_masters: No such device
INSTALL PLUGIN QUERY_RESPONSE_TIME_AUDIT SONAME 'query_response_time.so';
INSTALL PLUGIN QUERY_RESPONSE_TIME SONAME 'query_response_time.so';
INSTALL PLUGIN QUERY_RESPONSE_TIME_READ SONAME 'query_response_time.so';
INSTALL PLUGIN QUERY_RESPONSE_TIME_WRITE SONAME 'query_response_time.so';
> SHOW PLUGINS;
......
| QUERY_RESPONSE_TIME | ACTIVE | INFORMATION SCHEMA | query_response_time.so | GPL |
| QUERY_RESPONSE_TIME_AUDIT | ACTIVE | AUDIT | query_response_time.so | GPL |
| QUERY_RESPONSE_TIME_READ | ACTIVE | INFORMATION SCHEMA | query_response_time.so | GPL |
| QUERY_RESPONSE_TIME_WRITE | ACTIVE | INFORMATION SCHEMA | query_response_time.so | GPL |
+-----------------------------+----------+--------------------+------------------------+---------
INFORMATION_SCHEMA
生成三张表QUERY_RESPONSE_TIME_WRITE 记录所有写请求的响应时间分布
QUERY_RESPONSE_TIME_READ 记录所有读请求的响应时间分布
QUERY_RESPONSE_TIME 可以认为是所有请求的响应时间分布。
SET GLOBAL query_response_time_stats = 1 ;
query_response_time_stats = 1
SET GLOBAL query_response_time_flush='ON';
常用的 sql
INFORMATION_SCHEMA [RW][TEST:qa_single_0:3312] 11:50:44
>SELECT c.count, c.time, (SELECT SUM(a.count) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as a WHERE a.count != 0) as query_count, (SELECT COUNT(*) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as b WHERE b.count != 0) as not_zero_region_count, (SELECT COUNT(*) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME) as region_count FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as c WHERE c.count > 0;
+-------+----------------+-------------+-----------------------+--------------+
| count | time | query_count | not_zero_region_count | region_count |
+-------+----------------+-------------+-----------------------+--------------+
| 1 | 0.000001 | 71370 | 7 | 14 |
| 86 | 0.000010 | 71370 | 7 | 14 |
| 47375 | 0.000100 | 71370 | 7 | 14 |
| 23404 | 0.001000 | 71370 | 7 | 14 |
| 423 | 0.010000 | 71370 | 7 | 14 |
| 79 | 0.100000 | 71370 | 7 | 14 |
| 2 | 1.000000 | 71370 | 7 | 14 |
+-------+----------------+-------------+-----------------------+--------------+
7 rows in set (0.00 sec)
本文总结介绍 RT 在技术体系中的含义,以及介绍两种监控 MySQL 响应时间的方法。如果有其他更好的方式方法,欢迎读者朋友一起讨论。
参考文章
1. https://www.percona.com/doc/percona-server/5.7/diagnostics/responsetimedistribution.html2. https://jin-yang.github.io/post/linux-tcprstat.html3. https://www.percona.com/doc/percona-monitoring-and-management/dashboard.mysql-query-response-time.html4. https://www.aikaiyuan.com/5469.html
社区近期动态
No.1
Mycat 问题免费诊断
诊断范围支持:
Mycat 的故障诊断、源码分析、性能优化
服务支持渠道:
技术交流群,进群后可提问
QQ群(669663113)
社区通道,邮件&电话
osc@actionsky.com
现场拜访,线下实地,1天免费拜访
关注“爱可生开源社区”公众号,回复关键字“Mycat”,获取活动详情。
No.2
社区技术内容征稿
征稿内容:
格式:.md/.doc/.txt
主题:MySQL、分布式中间件DBLE、数据传输组件DTLE相关技术内容
要求:原创且未发布过
奖励:作者署名;200元京东E卡+社区周边
投稿方式:
邮箱:osc@actionsky.com
格式:[投稿]姓名+文章标题
以附件形式发送,正文需注明姓名、手机号、微信号,以便小编及时联系