社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间

社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间作者:杨奇龙 网名“北在南方”,7年DBA老兵,目前任职于杭州有赞科技DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。 一、前言 响应时间(response time…

作者:杨奇龙 网名“北在南方”,7年DBA老兵,目前任职于杭州有赞科技DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。

一、前言

响应时间(response time 简称 RT)是从系统接收请求开始到返回响应之间的时间跨度,是一项极其重要的性能指标。它可以从侧面反映系统的整体吞吐量,也是业务请求(比如 sql 请求)的性能好坏的判断依据。

举个例子 A 要从杭州坐飞机到北京机场,经历如下:

从公司到萧山机场 40min
机场安检,候机,登机 40min
飞机飞行  耗时 100min
飞机落地,打的到望京  耗时40min
RT= 40 + 40 + 100 + 40 =220min

代码100分

其中真正的”执行”时间就飞机飞行的时间(100min+40+40),其他安检、候机、堵车的都是等待时间。

RT = 等待时间 + 执行时间

假如到机场的过程中发生堵车,或者空中管制导致候机时间延长,整体的 RT 也会变长,但是飞机飞行时间是相对一定的。从技术的角度来看 SQL 的请求路径

app <—->(网络建立连接,data 传输)<—-> proxy <—->(网络建立连接,data 传输)<—-> mysql(执行)

因为网络问题丢包,重传等导致数据传输时间增加,进而导致总体的 RT 时间增加 ,还有常见的案例 app 服务器 cpu 飙高导致程序执行的速度变慢,JAVA 程序 GC 等因素也会导致 RT 升高。所以说 SQL 慢,其实 RT 就会高。但是反过来 RT 高,不一定是 SQL 慢的原因。如果是开发同学遇到监控尤其是 trace 系统发现某个接口慢了,并不一定是 SQL 慢。

重点:不要把 trace 系统中的监控 rt 直接当做 db 的执行时间

参考案例 strace 案例

二、如何监控

前面说了 RT 的定义以及它所代表意义。接下来我们看看如何监控数据库的 RT ,现有的方式主要有两种。

2.1 tcprstat

tcprstat 是 Percona 基于 libpcap 研发的工具,是通过测量 TCP 的 request 和 response 所需的时间间隔,适用于一问一答式协议类型的处理。通常用来监测 MySQL 响应时间,或者说是请求在服务器端的处理时间,其输出结果包括了响应时间相关的统计值,用来诊断服务器端性能状况。 举个例子: 社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间

其输出结果包括了时间戳,以及响应时间的最大值、均值、方差等信息,输出信息可以通过 -f 参数进行定制,其中响应时间的单位为微妙。其中对我们比较重要的是:

count:此间隔内处理完成的请求数量。 avg:此间隔内所有完成的请求,响应的平均时间。 95_avg:此间隔内,95% 的请求量的平均响应时间,单位微妙,该值较能体现 MySQL Server 的查询平均响应时间。 如果我们只需要输出 count, 平均时间,95_avg,99_avg 则可以用如下命令。 tcprstat -p 3312 -t 1 -n 0 -l ip_address -f “%T %n %a %95a %99a “

社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间

关于 -f 的参数解释如下,读者朋友可以根据需要来调整输出

社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间

如果执行tcprstat遇到如下问题

代码100分# tcprstat -p 3312 -t 1 -n 5
pcap: SIOCGIFFLAGS: bonding_masters: No such device

可以通过指定本地 ip -l local_ip 来解决。

2.2 MySQL 插件

Percona Server 提供一个叫做响应时间区间的功能,将 sql 耗时在指定区间的请求次数和总共的执行时间记录到表里面。其中时间区间跨度由 query_response_time_range_base 控制。

常用的区间范围为:(0, 0.000001], (0.000001, 0.000010],(0.000010,0.000100],(0.000100,0.001000],(0.001000, 0.010000], (0.010000,0.100000],(0.100000,1.000000],(1,10] 。

从 MySQL 5.6 开始以插件形式安装:

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 命令检查插件是否安装成功。

代码100分> 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 可以认为是所有请求的响应时间分布。

查看 QUERY_RESPONSE_TIME 的内容

社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间

查询结果中 717 个 sql 请求耗时在 (0, 0.000001] 之间。47898 个 sql 请求的耗时在 (0.000001, 0.000010],总耗时 0.29 秒,其他以此类推。需要注意的是 count 和total是累计值,监控的时候需要取后值减前值除以采样的时间间隔如何开启响应时间统计 在命令行中执行

SET GLOBAL query_response_time_stats = 1 ;

在 my.cnf 中

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)

通过监控脚本获取响应时间的数据在 grafna 展示的结果如下:

社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间 社区投稿 | 如何正确理解 RT 并监控 MySQL 的响应时间

其他更详细的介绍可以去查阅 Percona 的官方文档。

三、小结

本文总结介绍 RT 的在技术体系中的含义,以及介绍两种监控 MySQL 响应时间的方法。如果有其他更好的方式方法,欢迎读者朋友一起讨论。

参考文章

  1. https://www.percona.com/doc/percona-server/5.7/diagnostics/response_time_distribution.html
  2. https://jin-yang.github.io/post/linux-tcprstat.html
  3. https://www.percona.com/doc/percona-monitoring-and-management/dashboard.mysql-query-response-time.html
  4. https://www.aikaiyuan.com/5469.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11178.html

(0)
上一篇 2022-12-15
下一篇 2022-12-15

相关推荐

  • 关于复制,你了解多少(附副本集常见任务教程)「终于解决」

    关于复制,你了解多少(附副本集常见任务教程)「终于解决」MongoDB Manual (Version 4.2) Replication MongoDB中的副本集是一组维护相同数据集合的 mongod进程。副本集提供了冗余和高可用性,并且这是所有生产部署的

    2023-02-26
    146
  • 分布式图数据库 Nebula Graph 中的集群快照实践「建议收藏」

    分布式图数据库 Nebula Graph 中的集群快照实践「建议收藏」1 概述 1.1 需求背景 图数据库 Nebula Graph 在生产环境中将拥有庞大的数据量和高频率的业务处理,在实际的运行中将不可避免的发生人为的、硬件或业务处理错误的问题,某些严重错误将导致集…

    2022-12-25
    141
  • redis为什么比memcache快_mongodb和redis的场景

    redis为什么比memcache快_mongodb和redis的场景对比结论 1. 性能上: 性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以

    2022-12-21
    161
  • python什么课程好_python图像处理代码

    python什么课程好_python图像处理代码PIL (Python Imaging Library)

    2023-08-25
    136
  • Pycharm 添加解释器全攻略

    Pycharm 添加解释器全攻略Pycharm 是 Python 开发人员最喜欢的 IDE 之一,它提供了许多有用的功能,如集成的调试器、版本控制、语法突出显示等。在 Pycharm 中,解释器是非常关键的,因为它是与你的项目互动并运行代码的基础。解释器是一个 Python 程序,它能够理解并运行你编写的 Python 代码。Pycharm 支持使用本地或远程解释器。它提供了多种类型的解释器,例如基础解释器、虚拟环境解释器、anaconda 等。在 Pycharm 中,你可以轻松地添加、删除或设置解释器。

    2024-09-07
    25
  • PS涂抹快捷键

    PS涂抹快捷键Photoshop作为一款专业的图像处理软件,其涂抹操作的快捷键设置非常多,用户可以根据自己的工作习惯进行自定义。在快捷键设置界面,用户可以为涂抹工具(刷子)设置不同的按键组合,包括修改现有的快捷键,添加新的快捷键,以及删除不需要的快捷键。

    2024-06-07
    51
  • 无法连接远程服务器 vps群控

    无法连接远程服务器 vps群控无法连接远程服务器 vps群控远程桌面是微软公司为了便于网络管理员管理维护服务器推出的一项服务。从windows 2000 server版本开始引入,网络管理员时候远程桌面连接器连接到网络任意一台开…

    2023-02-24
    168
  • MySQL学习 2019-12

    MySQL学习 2019-12启动mysql服务: net start mysql 关闭mysql服务: net stop mysql cmd清屏: cls mysql -V 输出版本信息并且退出 mysql -u 用户

    2022-12-29
    160

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注