作者:xuty

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

一、概述

之前在社区发了一篇【有效解决 MySQL 行锁等待超时问题】文档,主要介绍了下行锁超时的监控方法,下方评论中有人提到了 pt-stalk 工具也可以监控行锁超时,因为个人没怎么用过这个工具,所以下意识的就去 google 了一下。因为没找到有介绍具体监控输出的文档,就以为这个工具没法监控行锁等待,最后果断被打脸了~~~

以上是个小插曲,个人在本地测试了下 pt-stalk 的监控输出后,发现其监控项远远比我预测的多,用起来也比较方便,所以在这里分享下这个工具。

二、介绍

首先介绍下 pt-stalk,它是 Percona-Toolkit 工具包中的一个工具,说起 PT 工具包大家都不陌生,平时常用的 pt-query-digest、 pt-online-schema-change 等工具都是出自于这个工具包,这里就不多介绍了。

pt-stalk 的主要功能是在出现问题时收集 OS 及 MySQL 的诊断信息,这其中包括:

1. OS 层面的 CPU、IO、内存、磁盘、网络等信息;

2. MySQL 层面的行锁等待、会话连接、主从复制,状态参数等信息。

而且 pt-stalk 是一个 Shell脚本,对于我这种看不懂 perl 的人来说比较友好,脚本里面的监控逻辑与监控命令也可以拿来参考,用于构建自己的监控体系。

三、使用

接着我们来看下如何使用这个工具。

pt-stalk 通常以 后台服务 形式监控 MySQL 并等待触发条件,当触发条件时收集相关诊断数据。

触发条件相关的参数有以下几个:function:

∘ 默认为 status,代表监控 SHOW GLOBAL STATUS 的输出;

∘ 也可以设置为 processlist,代表监控 show processlist 的输出;

variable:

∘ 默认为 Threads_running,代表 监控参数,根据上述监控输出指定具体的监控项;

threshold:

∘ 默认为 25,代表 监控阈值,监控参数超过阈值,则满足触发条件;

∘ 监控参数的值非数字时,需要配合 match 参数一起使用,如 processlist 的 state 列;

cycles:

∘ 默认为 5,表示连续观察到五次满足触发条件时,才触发收集;

连接参数:host、password、port、socket。

其他一些重要参数:iterations:该参数指定 pt-stalk 在触发收集几次后退出,默认会一直运行。

run-time:触发收集后,该参数指定收集多长时间的数据,默认 30 秒。

sleep:该参数指定在触发收集后,sleep 多久后继续监控,默认 300 秒。

interval:指定状态参数的检查频率,判断是否需要触发收集,默认 1 秒。

dest:监控数据存放路径,默认为 /var/lib/pt-stalk。

retention-time :监控数据保留时长,默认 30 天。

daemonize:以后台服务运行,默认不开启。

log:后台运行日志,默认为 /var/log/pt-stalk.log。

collect:触发发生时收集诊断数据,默认开启。

∘ collect-gdb:收集 GDB 堆栈跟踪,需要 gdb 工具。

∘ collect-strace:收集跟踪数据,需要 strace 工具。

∘ collect-tcpdump:收集 tcpdump 数据,需要 tcpdump 工具。

下面是一段 Percona 官方贴的伪代码,逻辑也比较清晰,大家可以看下:

while true; do

if --variable from --function > --threshold; then

cycles_true++

if cycles_true >= --cycles; then

--notify-by-email

if --collect; then

if --disk-bytes-free and --disk-pct-free ok; then

(--collect for --run-time seconds) &

fi

rm files in --dest older than --retention-time

fi

iter++

cycles_true=0

fi

if iter < --iterations; then

sleep --sleep seconds

else

break

fi

else

if iter < --iterations; then

sleep --interval seconds

else

break

fi

fi

done

rm old --dest files older than --retention-time

if --collect process are still running; then

wait up to --run-time * 3 seconds

kill any remaining --collect processes

fi

四、使用场景

下面是几个我个人可以想到的关于 pt-stalk 的使用场景:

4.1 场景一

后台运行 pt-stalk 监视 SHOW GLOBAL STATUS 中的 Threads_connected 状态值,即如果 客户端连接数 连续 5 次超过 1000,则触发收集主机和 MySQL 的性能与状态信息。

pt-stalk --function status --variable Threads_connected --threshold 2500 --daemonize --user=root --password=######

4.2 场景二后台运行 pt-stalk 监视SHOW GLOBAL STATUS中的Threads_running状态值,即如果活跃线程数连续 5 次超过500,则触发收集主机和 MySQL 的性能与状态信息。

pt-stalk --function status --variable Threads_running --threshold 500 --daemonize --user=root --password=######

4.3 场景三非后台模式下 立即收集主机和 MySQL 的性能与状态信息 60s,等待 180s 自动退出,无需任何触发条件,主要用于临时保留问题场景信息,便于事后分析。

pt-stalk --no-stalk --run-time=60 --iterations=1 --user=root --password=Gepoint

五、监控输出

接着来看下 pt-stalk 可以监控些什么信息,如下图所示:

从上图可见输出文件有很多,基本从文件名字就可以知道内容是什么,且大多数文件都是以命令来命名的,这里就不一一介绍了。

有些比较重要的监控项我用红标指示了,对于排查问题帮助比较多。

对于本文最开始所说的 pt-stalk 也可以监控行锁等待信息,其实就是依赖于lock-waits与transactions2 个监控文件。

我们来看下其内容:

首先是 lock-waits 日志,其实与我之前的后台监控脚本输出有点类似,不过这里信息更加丰富。

然后是 transactions ,记录了所有活动事务的详细信息,更加利于分析行锁等待情况。

虽然 lock-waits 与 transactions 2 个监控文件详细的记录了阻塞情况,但还是存在那个问题,如果原因是 事务挂起,还是需用借用 general_log 分析整个事务。

六、pt-sift

在学习 pt-stalk 的时候,发现 PT 工具包里专门有个工具用于分析 pt-stalk 采集的数据,那就是 pt-sift。

pt-sift 可以根据之前 pt-stalk 监控采集的数据进行汇总性的展示,使用比较简单,下面是其输出示例:

七、小结

pt-stalk 工具个人感觉还不错,尤其是其丰富的监控项,与其特有的触发式监控机制。

对于没有部署监控系统,但为了临时排查解决 MySQL 问题的环境非常有效。

最后对于 pt-stalk 再总结两点:

1. pt-stalk 适合在 MySQL 本地环境运行,远程运行则无法收集到对应的主机信息。

2. 触发条件貌似是单一的,无法选择多个,也算是一个明显的弊端。

mysql pt监控_技术分享 | MySQL 监控利器之 Pt-Stalk相关推荐

  1. mysql timestamp 当前_技术分享 | MySQL 复制那点事 - Seconds_behind_Master 参数调查笔记

    作者:戴骏贤 网易游戏 技术部资深数据库系统工程师. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 文章阅读时间约 15 分钟,文中著名参考文献在 ...

  2. mysql优化说出九条_技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢?

    原标题:技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢? 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 ...

  3. pt5 mysql预处理_技术分享 | MySQL 监控利器之 Pt-Stalk

    一.概述 之前在社区发了一篇[有效解决 MySQL 行锁等待超时问题]文档,主要介绍了下行锁超时的监控方法,下方评论中有人提到了 pt-stalk 工具也可以监控行锁超时,因为个人没怎么用过这个工具, ...

  4. 发布json数据_技术分享 | MySQL 8.0.17 GA 发布!

    昨日 MySQL 官网正式发布 8.0.17 / 5.7.27 / 5.6.45 三个(维护)版本,距离上一个 GA 版本(8.0.16)发布时隔仅 88 天! MySQL 各开发团队的博客网站,同一 ...

  5. mysql 走索引 很慢_技术分享 | MySQL优化:为什么SQL走索引还那么慢?

    作者:胡呈清 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 core 分析过程 接手这个问题时现场已经不在了,信息有限 ...

  6. mysql 客户端_技术分享 | MySQL 客户端连不上(1045 错误)原因全解析

    作者:Carlos Tutte.Marcos Albe 翻译:管长龙 在我们学习 MySQL 或从事 MySQL DBA 工作期间,时常会遇到:"我尝试连接到 MySQL 并且收到1045 ...

  7. mysql内连接简写_技术分享 | MySQL 的 join_buffer_size 在内连接上的应用

    本文详细介绍了 MySQL 参数 join_buffer_size 在 INNER JOIN 场景的使用,OUTER JOIN 不包含.在讨论这个 BUFFER 之前,我们先了解下 MySQL 的 I ...

  8. mysql 带宽字段_技术分享 | 网络带宽如何影响 MySQL 性能

    作者:Vadim Tkachenko 翻译:管长龙 网络是数据库基础架构的主要部分.但是,通常性能基准测试是在本地计算机上完成的,客户端和服务器并置在一起.这样做是为了简化结构并排除一个以上的变量(网 ...

  9. mysql 行锁 超时_技术分享 | MySQL 行锁超时排查方法优化

    作者:xuty 本文来源:原创投稿 * 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.大纲 #### 20191219 10:10:10,234 | com.ali ...

最新文章

  1. tensorflow sigmoid_cross_entropy_with_logits 函数解释
  2. 使用深度V8.1 系统后打开部分文件夹缓慢
  3. VMProtect SDK完全避坑指南
  4. Oracle 的检查点队列 (checkpoint queue)
  5. openlayer 图层上下_OpenLayers实现图层切换控件
  6. HTML5标签用法及描述
  7. 2019年最好的前端进阶课,合同保障不过20w年薪全额退款!
  8. App界面交互设计规范(转)
  9. 【CF Contest-1251 E2】Voting (Hard Version)【贪心】
  10. 巨杉数据库入选2021年广州独角兽创新企业榜单
  11. 层级分类(续)-使用B-CNN(Branch CNN)实现
  12. win7下开启telnet命令
  13. 开机黑屏 只显示鼠标 电脑黑屏 有只老鼠 举 [我们已经成功地解决了]
  14. 广告违规词、敏感词在线检测
  15. 经典:智能物联网大数据系统案例
  16. 我真的不懂路由器和交换机的区别
  17. AWS助力海信集团智慧家居全球化运营
  18. 《城市大脑系列建设标准规范》立项评审会胜利召开
  19. shape制作出来的虚线
  20. 【转】浅谈程序猿的职业规划,看你如何决定自己的未来吧。

热门文章

  1. 职称计算机每次评都要高吗,计算机评中级职称都需要什么?
  2. 未能加载或程序集“XXXX,Version=0.0.0.0,Culter=neutral,PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。...
  3. MYSQL 错误1604
  4. 支付宝小程序使用扩展组件安装
  5. arduino灯带随音乐_【创客玩音乐】用灯带让音乐可视化
  6. 张首晟:区块链技术是互联网世界新的分合转折点
  7. 跳马周游c++_NOIP信息学奥赛C++视频教程
  8. ThinkCMF图片上传
  9. 菜鸟接触sora学编程点滴1
  10. [20190415]ora-02049错误.txt