9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

如何正确理解 RT 并监控 MySQL 的响应时间

  • 2020-06-13
  • 本文字数:2957 字

    阅读完需:约 10 分钟

如何正确理解 RT 并监控 MySQL 的响应时间

一、前言

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


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


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


其中真正的 ‘执行’ 时间就飞机飞行的时间(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 响应时间,或者说是请求在服务器端的处理时间,其输出结果包括了响应时间相关的统计值,用来诊断服务器端性能状况。


举个例子:



其输出结果包括了时间戳,以及响应时间的最大值、均值、方差等信息,输出信息可以通过 -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\t%n\t%a\t%95a\t%99a\n’



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



如果执行 tcprstat 遇到如下问题:


# tcprstat -p 3312 -t 1 -n 5pcap: 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 命令检查插件是否安装成功。


&gt; 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 的内容



查询结果中 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 展示的结果如下:




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

三、小结

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


本文转载自公众号有赞 coder(ID:youzan_coder)。


原文链接


https://mp.weixin.qq.com/s?__biz=MzAxOTY5MDMxNA==&mid=2455760851&idx=1&sn=9b3e3fc9e294864967b16ccfbf81abf4&chksm=8c6869f6bb1fe0e0551835aa299c90481e1c14fa0cf9d512044e01e358b737058cb1d075962a&scene=27#wechat_redirect


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2020-06-13 14:053186

评论

发布
暂无评论
发现更多内容

软件测试面试真题 | 面试时被问到知识盲区,该怎么办呢?

测试人

软件测试 面试题 测试开发

SOFARegistry | 大规模集群优化实践

SOFAStack

开源 SOFA SOFARegistry'

【C语言】break 关键字

謓泽

11月月更

ModelBox姿态匹配:抖抖手动动脚勤做深呼吸

华为云开发者联盟

人工智能 华为云 企业号十月 PK 榜

NGINX Sprint 年度线上会议:报名通道已开启,立即预定您的 NGINX 深潜之旅

NGINX开源社区

nginx

DevData Talks | 让效能度量产生真正的价值,要避开多少“坑”?

思码逸研发效能

研发效能 研发管理工具 企业研发管理

【重磅】Serverless Devs 进入 CNCF 沙箱,成首个入选的 Serverless 工具项目!

阿里巴巴云原生

阿里云 Serverless 云原生

分布式锁实战:基于Zookeeper的实现

小小怪下士

Java zookeeper 分布式

RocksDB 7 终于解决了 Compaction 时性能下降问题

Kvrocks

redis RocksDB kvrocks

知象光电完成过亿元C轮融资,加速发力全球市场

硬科技星球

HummerRisk V0.5:新版云合规报告、资源风险联动、拓扑展示等内容

HummerCloud

云安全 云原生安全 11月月更

EMQ《物联网平台大规模数据接入和处理性能评测方法》成功入选“可信边缘计算推进计划”

EMQ映云科技

物联网 IoT 边缘计算 边云协同 11月月更

详解 Serverless 架构的 6 大应用场景

阿里巴巴云原生

阿里云 Serverless 云原生

拥抱“大信创”浪潮,优博讯开启成长新曲线

Geek_2d6073

装了我这 10 个 IDEA 神级插件后,同事也开始情不自禁的嘚瑟了

沉默王二

IntelliJ IDEA

不借助 Fiori client,直接在手机浏览器里调用 SAP UI5 BarcodeScanner 实现条形码扫描的可能性?

Jerry Wang

JavaScript 前端开发 Fiori SAP UI5 11月月更

2022世界互联网大会 | VoneCredit为中小企业纾困解忧

旺链科技

区块链 产业区块链 世界互联网大会 企业号十月PK榜

Go语言躲坑经验总结

百度Geek说

Go 企业号十月 PK 榜

「文本检测与识别白皮书-3.2」第三节:常用的文本识别模型

合合技术团队

人工智能 机器学习 深度学习 模型 文字识别

字节跳动开源数据集成引擎BitSail的演进历程与能力解析

字节跳动数据平台

数据库 开源 数据开发 数据集成 企业号十月 PK 榜

IM消息ID技术专题(七):网易严选分布式ID的技术选型、优化、落地实践

JackJiang

网络编程 即时通讯 IM 开源im

前端面经

肥晨

前端面试题 11月月更 前端面筋 超全面试题

Serverless Developer Meetup 杭州站精彩回顾!【附赠PPT】

阿里巴巴云原生

阿里云 Serverless 云原生

3层结构+7大特点,带你认识华为云IoTEdge

华为云开发者联盟

云计算 物联网 华为云 企业号十月 PK 榜

Paddle模型性能分析工具Profiler:定位瓶颈点、优化程序、提升性能

汀丶人工智能

自然语言处理 nlp 性能分析 11月月更

河北首家城商行传统核心业务国产化,TDSQL突破三“最”为秦皇岛银行保驾护航

腾讯云数据库

数据库 分布式 tdsql 客户案例 腾讯云数据库

云数据库时代,DBA将走向何方?

华为云开发者联盟

数据库 后端 华为云 企业号十月 PK 榜

软件测试面试真题 | 说一下常用的控件定位方法

测试人

软件测试 面试题 web测试 元素定位

京东云开发者|IoT运维 - 如何部署一套高可用K8S集群

京东科技开发者

运维 k8s IoT etcd K8s 多集群管理

为什么要用CSS精灵图

源字节1号

软件开发 前端开发 后端开发 小程序开发

详解AQS中的condition源码原理

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

  • 扫码添加小助手
    领取最新资料包
如何正确理解 RT 并监控 MySQL 的响应时间_数据库_杨一_InfoQ精选文章