用pt-stalk定位MySQL短暂的性能问题
背景】
MySQL出现短暂的3-30秒的性能问题,一般的监控工具较难抓到现场,很难准确定位问题原因。
对于这类需求,我们日常的MySQL分析工具都有些不足的地方:
1、 性能监控工具,目前粒度是分钟级,无法反应秒级的性能波动;
2、 MySQL Performance_schema工具采集是3秒落地10000行记录,对于QPS大于3000以上的服务器采集会丢失数据;
Performance_schema数据通常用来分析语句级的性能问题,比如CPU高消耗,扫描行数等语句问题,对于系统内部mutex,lock,thread等资源竞争的问题无法定位。
3、 Table DML工具(5分钟粒度)
4、 Slow Log记录大于1秒的慢查询,反应的可能是果,而不是因
5、 MySQL Guard工具实现是依赖报警系统触发,一般对于持续在1分钟以上的问题可以抓取到现场
前面扩展过一个功能,对高CPU的监控,粒度可以到10秒左右
pt-stalk工具可以解决更细粒度的故障现场采集,守护进程的方式试用了一下,可以帮助我们解决一些问题。
【pt-stalk工具的使用】
尝试用pt-stalk工具做故障现场的快照采集
1、自定义脚本,定义CPU作为触发条件
function trg_plugin(){
a=$(sar 1 1 | grep -i "Average:"| awk '{print $8}');echo 100 - $a |bc
}
2、用pt-stalk开启守护进程,下面命令实现了用自定义的pt_cpu.sh脚本做为判断条件,当CPU的值(100-%idle)大于50,判断的间隔时间为1秒,连续3次满足条件时触发快照采集,触发后会sleep 60秒
pt-stalk --daemonize --dest=/tmp/log/pt-stalk --user= --password= --port= --function=/tmp/pt_cpu.sh --variable highcpu --cycles=3 --interval=1 --threshold 50 --sleep=60 --log=/var/log/pt-stalk.log
具体的参数可参考man pt-stalk。
【案例分析】
有台服务器出现短暂的线程和CPU告警的问题,现在每天在9点多都有CPU的告警,但持续时间较短,MySQL Guard工具很难采集到现场。
按照之前性能计数器反应的指标,猜测是由于binlog备份导致的IO上升,又导致了线程积压,但实际不是这个原因,binlog备份时间重合只是巧合。
在这台服务器开启pt-stalk守护进程后,今天早上CPU告警时触发了采集
抓取的快照信息如下:
依据故障快照信息,再结合slow log和performance_schema语句明细,有足够的信息可以定位出问题原因。
1、在9:01分CPU出现上升
2、pt-stalk采集的CPU信息记录了更细粒度,连续30秒的信息,其中连续30秒CPU sys占比都在80%以上,通常是并发线程较高,context switch过高导致的sys消耗
3、连续30秒的Threads_running确实比较高
4、进一步分析,容易找到问题原因是由于每天9:00定时job运行,有一句高并发的慢查询SQL导致了线程积压
6、 慢查询SQL是由于缺失索引导致,补建索引后观察,CPU的问题解决了
【pt-stalk的性能】
正常情况下守护进程的性能开销并不大,建议可以在有需要排障时再定制开启。下面是它的处理逻辑
用pt-stalk定位MySQL短暂的性能问题的更多相关文章
- MySQL 的实时性能监控利器【转】
操作系统及MySQL数据库的实时性能状态数据尤为重要,特别是在有性能抖动的时候,这些实时的性能数据可以快速帮助你定位系统或MySQL数据库的性能瓶颈,就像你在Linux系统上使用「top,sar,io ...
- MySQL 的实时性能监控利器
操作系统及MySQL数据库的实时性能状态数据尤为重要,特别是在有性能抖动的时候,这些实时的性能数据可以快速帮助你定位系统或MySQL数据库的性能瓶颈,就像你在Linux系统上使用「top,sar,io ...
- 2020重新出发,MySql基础,性能优化
@ 目录 MySQL性能优化 MySQL性能优化简述 使用 SHOW STATUS 命令 使用慢查询日志 MySQL 查询分析器 EXPLAIN DESCRIBE 索引对查询速度的影响 MySQL优化 ...
- MySQL数据库的性能分析 ---图书《软件性能测试分析与调优实践之路》-手稿节选
1 .MySQL数据库的性能监控 1.1.如何查看MySQL数据库的连接数 连接数是指用户已经创建多少个连接,也就是MySQL中通过执行 SHOW PROCESSLIST命令输出结果中运行着的线程 ...
- numa对MySQL多实例性能影响
numa对MySQL多实例性能影响,通过对numa将MySQL绑定在不同的CPU节点上,并且采用绑定的内存分配策略,强制在本节点内分配内存.具体测试如下:1.关闭numa(numa= interle ...
- mysql的limit性能,数据库索引问题,dblog问题
mysql的limit性能,数据库索引问题,dblog问题,redis学习 继续学习. dblog实际上是把日志记录在另一个数据库里面. 问题1: 一张表定义了5个索引,但是sql语句中用到了3个有索 ...
- mysql监控、性能调优及三范式理解
原文:mysql监控.性能调优及三范式理解 1监控 工具:sp on mysql sp系列可监控各种数据库 2调优 2.1 DB层操作与调优 2.1.1.开启慢查询 在My.cnf文件中添加如 ...
- 一:MySQL数据库的性能的影响分析及其优化
MySQL数据库的性能的影响分析及其优化 MySQL数据库的性能的影响 一. 服务器的硬件的限制 二. 服务器所使用的操作系统 三. 服务器的所配置的参数设置不同 四. 数据库存储引擎的选择 五. 数 ...
- 使用动态跟踪技术SystemTap监控MySQL、Oracle性能
[IT168 技术]本文根据吕海波2018年5月11日在[第九届中国数据库技术大会]上的演讲内容整理而成. 讲师介绍: 吕海波,美创科技研究员,ITPUB管理版版主.出版技术书籍<Oracle内 ...
随机推荐
- Build CRUD Application with jQuery EasyUI
http://www.jeasyui.com/tutorial/app/crud.php It has become a common necessily for web application to ...
- 遭遇:“传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确” 错误
http://www.cnblogs.com/delphinet/archive/2010/03/09/1681777.html 正在写一个类似文章的发表系统.其中记录文章内容的字段Contents设 ...
- Kafka+Zookeeper+Filebeat+ELK 搭建日志收集系统
ELK ELK目前主流的一种日志系统,过多的就不多介绍了 Filebeat收集日志,将收集的日志输出到kafka,避免网络问题丢失信息 kafka接收到日志消息后直接消费到Logstash Logst ...
- libvirt工具实现虚拟机管理
libvirt工具实现虚拟机管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.介绍virt-install命令的常用参数 virt-install是一个命令行工具,它能够为K ...
- VMware vSphere克隆虚拟机
参考资料:http://blog.csdn.net/shen_jz2012/article/details/48416771 1. 首先将你所要克隆的虚拟机关掉 2. 选择你的ESXI服务器 ...
- html5 canvas 奇怪的形状水平渐变(因为大多数的之前的文章把基础都打过了,所以开始写的快了,如果有不明白的,可以回顾下之前的)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- gdb初步窥探
本文是通过学习左耳朵皓帝的文章,详见:http://blog.csdn.net/haoel 1.使用gdb gdb主要是用来调试c和c++程序,首先在编译前我们先把调试信息加到可执行程序当中,使用参数 ...
- angularJs入门篇-hello world 开头
AngularJS 采用了完全不同的解决方案,它创建实时视图模板代替视图,而不是将数据合并进模板之后更新DOM. 任何一个独立视图组件中的值都是 动态替换的.这个功能可以说是AngularJS中最重要 ...
- 20155339 2016-2017-2 《Java程序设计》第8周学习总结
20155339 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十四章NIO与NIO2 NIO使用频道来衔接数据节点,在处理数据时,NIO可以让你设定缓冲 ...
- c++刷题(33/100)笔试题1
笔试总共2小时,三道题,时间挺充裕的,但是最后只做了一道,原因在于自己很浮躁,不审题,不仔细思考.没过的两道都是稍微改一下代码就能过,但是没过就是没过,要引以为戒 题目1: 小W有一个电子时钟用于显示 ...