如何精确监控DB响应延时

简介: 如何精确监控DB响应延时

1、背景

日常工作中遇到被问的最多的就是“现在应用有点慢,帮忙看看db是不是有问题”,第一反应是要去看一下监控告警。

问题是线上的监控指标很多,OS的包括cpu内存IO网络,DB主要有TPS/QPS活跃连接数锁等待(细分的更多),就算把所有监控信息都放到grafana单个页面展示,挨个查看也要耗费一点时间。

更关键的是,即便上述指标都正常,也不等同于DB无恙,即这些指标只能算是DB健康的必要条件,而不是充分条件。在某些场景下,即便这些指标都很平稳,开发可能依然会不断的质疑你,这时要如何快速自证清白?

首先来梳理一下DB响应流程:
从应用程序的角度观察,DB响应速度 = 网络延时 + 处理延时,其中处理延时的时间从请求抵达DB服务器开始,到服务器将响应结果发出结束。

DB服务器任何一个环节出现问题,都会增大处理延时,进而触发上述场景。

为此,我们只需要监控每个db请求【进入db服务器,db响应结束】这段时间的耗时,便可计算出每个db请求的处理延时,进而判定db服务器是否健康。 tcprstat是专门为统计处理延时而生的工具。

2、原理

官档原文:原文。



Here “response time” means, for a given TCP connection, the time elapsed from the last inbound packet until the first outbound packet.

通过(src_ip, src_port, dst_ip, dst_port)四元组可以唯一标识1个tcp连接,对于每个连接,计算其最后1个入包和第1个出包的时间差,以此得出1个请求的处理延时,然后将所有连接的请求处理延时聚集统计并输出。

这里有个前提,服务端IO模型必须是同步阻塞模式,即当前request的响应完成后,才能接受下一个request,好在目前的主流DB都符合这个要求。

tcprstat在启动时会创建一个hash表,默认2053个bucket,每个bucket挂载一条单向链表,当出现hash冲突时,遍历该bucket下的链表直至找到匹配的item。

借助libpcap捕获数据包,首先将其还原成ip包(struct ip),根据(ip->ip_p == IPPROTO_TCP)过滤掉非tcp包, 并且去除只包含控制信息的tcp包。tcprstat会记录每个符合条件数据包的时间戳tv,以及对应的四元组(src_ip, src_port, dst_ip, dst_port),对四元组取模,以此在hash表中定位查找。

对应的数据结构很简单:

  • 如果该包是入包,将其插入到hash表,若对应的item已经存在,覆盖其已有tv值。
  • 如果该包是出包,根据其四元组从hash表取出对应item并将其从hash表移除,将两个包的tv相减便得出该请求的处理延时。

tcprstat将每个请求的处理延时保存到1个长整型数组中,每次输出都要对这个指针数组进行遍历,比如计算avg。

struct session {

uint32_t laddr, raddr;
uint16_t lport, rport;
struct timeval tv;
struct session *next;
}

而计算99_avg时,则先对指针数组调用qsort()进行升序排列,并只计算前99%的元素,排除最高的1%

计算min和max同理。

3、安装

安装很简单,直接将二进制文件下载就会执行

该工具默认直接查询机器的网络接口,在bonding模式的网卡下会报错,可改用ip列表。

以图形化的方式展现,当应用出现性能问题时可快速排查是否由DB引发,只有avg/99_avg出现剧烈波动时,才能证明db服务器响应有问题。

4、总结

可以做如下结论:tcprstat.avg/99_avg平稳是db健康的充分必要条件。虽然作者原本是为了监控mysql开发的此工具,但是对于mongoredis同样适用,只需要修改监控端口即可。

全文完。

Enjoy MySQL :)

            </div>
相关文章
|
SQL 分布式计算 数据可视化
Tableau与大数据:可视化工具在大数据分析中的应用
【4月更文挑战第8天】Tableau是一款领先的数据可视化工具,擅长于大数据分析,提供广泛的数据连接器,支持多源整合。它与Hadoop、Spark等深度集成,实现高效大数据处理。Tableau的拖拽式界面和交互式分析功能使得非技术人员也能轻松探索数据。在实战中,Tableau用于业务监控、数据storytelling和自助式分析,推动数据民主化,提升决策效率。未来,Tableau将持续创新,扩展生态系统,并保障数据安全与合规性,助力企业最大化数据价值。
958 0
|
机器学习/深度学习 存储 监控
Elasticsearch 在日志分析中的应用
【9月更文第2天】随着数字化转型的推进,日志数据的重要性日益凸显。日志不仅记录了系统的运行状态,还提供了宝贵的洞察,帮助企业改进产品质量、优化用户体验以及加强安全防护。Elasticsearch 作为一个分布式搜索和分析引擎,因其出色的性能和灵活性,成为了日志分析领域的首选工具之一。本文将探讨如何使用 Elasticsearch 作为日志分析平台的核心组件,并详细介绍 ELK(Elasticsearch, Logstash, Kibana)栈的搭建和配置流程。
898 4
|
网络协议 Unix Linux
Socket通信详细介绍1
Socket通信详细介绍
277 0
|
缓存 物联网 5G
写给Android开发者的芯片知识
接触过计算机的朋友们都知道CPU的含义,就是中央处理器,是负责计算机主要运算任务的组件。一般我们把CPU比喻为人的大脑。而了解略深的用户会听说CPU有x86、ARM等分类,前者主要用于PC而后者主要用于手机平板等设备。
372 0
|
Ubuntu Linux 开发工具
Linux的各种复制粘贴 - VIM、tmux、和终端之间的复制粘贴
Linux的各种复制粘贴 - VIM、tmux、和终端之间的复制粘贴
3307 0
|
Web App开发
kali机中firefox浏览器装hackbar插件
kali机中firefox浏览器装hackbar插件
1461 0
kali机中firefox浏览器装hackbar插件
|
存储 安全 大数据
华大基因:云计算“撬动”大基因
中美两国均已启动“精准医疗计划”,在这个千亿美元的“蓝海市场”中,基因技术持续推动精准诊断、精准治疗产业链的蓬勃发展。两国上至政府,下至企业都在利用云计算、大数据等普惠技术加速基因医疗服务。美国谷歌云正在与遗传数据机构合作研发“谷歌基因组”项目,打造遗传分析云服务,Broad Institute遗传研究中心、哈佛、MIT都参与其中。
3974 1
|
7天前
|
数据采集 人工智能 安全