简介
在MySQL服务器出现短暂(5~30秒)的性能波动的时候,一般的性能监控工具都很难抓住故障现场,也就很难收集对应较细粒度的诊断信息。另外,如果这种波动出现的频率很低,例如几天才一次,我们也很难人为的抓住现场,收集数据。这正是pt-stalk所解决的问题。
参数
–function:设置触发条件,包括status、processlist、自定义脚本,详细见触发条件部分。
–dest:设置collect信息的存储目录,默认/var/lib/pt-stalk/。
另外设置–dest /u01/mysql选项到mysql目录之后,pt-stalk在清理超过期限的日志时,会暴力的将该目录下所有修改时间超过一定日期的文件全部删掉,

因此在设置dest目录时必须慎重(如果设置最好是一个独立的目录,而不是跟mysql或者其他设置在同一个目录)。–dest默认值是

查看pt-stalk的源码:

            # Delete collect files which more than --retention-time days old.
find "$dir" -warn -type f -mtime +$retention_time -exec rm -f '{}' \;

–iterations:该参数指定pt-stalk在收集几次故障现场后就退出。默认pt-stalk会一直运行。
–run-time:触发收集后,该参数指定收集多长时间的数据。默认是30秒,比如show processlist会连续收集30次。
–sleep:为防止一直触发收集数据,该参数指定在某次触发后,必须sleep一段时候才继续观察并触发收集。默认是300秒
–interval:默认情况pt-stalk会每隔一秒检查一次状态数据,判断是否需要触发收集。该参数指定间隔时间,默认是1秒。
–cycles:默认情况pt-stalk只有连续观察到五次状态值满足触发条件时,才触发收集。该参数控制,需要连续几次满足条件,收集被触发,默认是5次。

–verbose:设置log的输出级别,默认是2;第一次运行可以设置为3,方便观察情况。
LEVEL PRINTS
===== =====================================
0     Errors
1     Warnings
2     Matching triggers and collection info
3     Non-matching triggers

–plugin:和–function参数类似,可以指定一个包含before_collect、after_collect等函数的shell脚本。
pt-stalk的触发条件
三种触发条件,通过参数function设置:
  1. status

    –function status –variable Threads_connected –threshold
    2500,表示MySQL状态值Threads_connected超过2500时触发数据收集。常用的触发条件还可以使用Threads_running等。
  2. processlist
    –function processlist –variable State –match statistics –threshold 10,表示,show processlist中State列的值为statistics的线程数超过10则触发收集。
  3. 自定义脚本
    包含 trg_plugin函数的shell脚本, trg_plugin 函数必须返回一个int值,比如下面的脚本,因为slow log的status是一个累加值,不能分析差值,因此写小脚本来获取差值,对slow突然出现的尖刺进行分析。
function trg_plugin(){
current_slow=`mysql -uroot -pxxx -P5002
-S/opt/tmp/mysql5002.sock -e"show global status like 'Slow_queries'" -B
-N|awk '{print $2}'`
current_timestamp=`date '+%s'`
#when first execute,the last_timestamp is empty
if [ ! -e Slow_queries ];then
echo "$current_timestamp $current_slow">Slow_queries
echo "0"
exit 0
fi
last_timestamp=`cat Slow_queries|awk '{print $1}'`
last_slow=`cat Slow_queries|awk '{print $2}'`
echo "$current_timestamp $current_slow">Slow_queries
let diff_timestamp=$current_timestamp-$last_timestamp
let diff_slow=$current_slow-$last_slow
#echo "$diff_timestamp $diff_slow"
if [ $diff_timestamp -gt 11 ];then
echo "0"
else
echo $diff_slow
fi
}
实际例子
pt-stalk --daemonize
--function=slow_log_status.sh --variable=my_custemed_condition --cycles=1
--threshold=2 --interval=10 --socket=/opt/tmp/mysql5002.sock
--verbose=3
收集结果
可以看到收集的信息非常的全面,包括大量的系统状态(IO、CPU、网卡)等以及大量MySQL信息(processlist、innodb status、variables等)

使用pt-stalk分析MySQL的性能波动 (转)的更多相关文章

  1. 使用systemtap调试工具分析MySQL的性能

    [工具] SystemTap是Linux下的动态跟踪工具,可以方便的监控.跟踪运行中的程序或Linux内核操作,我们通过写SystemTap脚本(与C语言类似),编译为内核模块,然后加载到内核中运行, ...

  2. MySQL索引,MySQL性能分析及explain的使用,分析SQL查询性能

    可以使用explain来分析MySQL查询性能,举例如下: 1.使用explain语句去查看分析结果 如 explain select * from test1 where id=1; 会出现: id ...

  3. MySQL 的性能(上篇)—— SQL 执行时间分析

    简介 文中内容均为阅读前辈的文章所整理而来,参考文章已在最后全指明 本文分为上下两篇: 上篇:MySQL 的 SQL 执行时间分析 下篇:MySQL 性能优化 后端开发必然会接触到数据库,数据层的优劣 ...

  4. MySQL 的性能(上篇)—— SQL 执行分析

    简介 文中内容均为阅读前辈的文章所整理而来,参考文章已在最后全指明 本文分为上下两篇: 上篇:MySQL 的 SQL 执行分析 下篇:MySQL 性能优化 后端开发必然会接触到数据库,数据层的优劣会影 ...

  5. MySQL 索引性能分析概要

    上一篇文章 MySQL 索引设计概要 介绍了影响索引设计的几大因素,包括过滤因子.索引片的宽窄与大小以及匹配列和过滤列.在文章的后半部分介绍了 数据库索引设计与优化 一书中,理想的三星索引的设计流程和 ...

  6. MySQL优化 - 性能分析与查询优化(转)

    出处:  MySQL优化 - 性能分析与查询优化 优化应贯穿整个产品开发周期中,比如编写复杂SQL时查看执行计划,安装MySQL服务器时尽量合理配置(见过太多完全使用默认配置安装的情况),根据应用负载 ...

  7. MySQL性能分析, mysql explain执行计划详解

    MySQL性能分析 MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析 ...

  8. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  9. 浅谈MySQL 数据库性能优化

    MySQL数据库是 IO 密集型的程序,和其他数据库一样,主要功能就是数据的持久化以及数据的管理工作.本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,日志缓存,索引缓存,innodb缓存 ...

随机推荐

  1. linux 真·随笔

    复制操作 命令行模式下输入 6,9 co 12 复制第6行到第9行之间的内容到第12行后面. vim如何删除文件中所有东西 ggdG :%d 移动光标到指定行的行尾 $:移动光标到行尾 n$:移动到第 ...

  2. jquery实现百度类似搜索提示功能(AJAX应用)

    有时候觉得百度那个输入内容就有提示的工具很神奇,它究竟是怎么做到的呢?以前在一个进销存系统中也做过这么个功能,但是远远不及百度的功能强大,百度可以输入首字母,关键字拼音,或关键字都可以匹配,有时在想, ...

  3. JSON认识

    阅读目录 JSON的两种结构 认识JSON字符串 在JS中如何使用JSON 在.NET中如何使用JSON 总结 JSON的全称是”JavaScript Object Notation”,意思是Java ...

  4. cocos2d-x 中的坐标系

    cocos2d-x 中的坐标系是笛卡尔坐标系,向右为 x 轴正方向,向上为 y 轴正方向,以像素为单位 原点在屏幕左下角的坐标系叫世界坐标系,是整个游戏中的根基,直接添加到场景中的节点,设置的位置都是 ...

  5. JavaScript 语句

    JavaScript 语句 JavaScript 语句向浏览器发出的命令.语句的作用是告诉浏览器该做什么. JavaScript 语句 JavaScript 语句是发给浏览器的命令. 这些命令的作用是 ...

  6. 通过WebViewJavascriptBridge实现OC与JS交互

      在.m方法当中,申明一个WebViewJavascriptBridge属性: @interface ExampleAppViewController () @property WebViewJav ...

  7. vs2013 遇到的web性能记录器无法使用问题

    诊断和修复Web测试记录栏的问题.自2005年以来VSTS运也出现了各种由客户多年来提出不同的问题.记录Web测试时,这在一定程度经常提到的一个话题是一个残疾或不存在的Web测试记录吧.因为它可以令人 ...

  8. Nginx反向代理关于端口的问题

      Nginx反向代理关于端口的问题   http://www.cnblogs.com/likehua/p/4056625.html Nginx默认反向后的端口为80,因此存在被代理后的端口为80的问 ...

  9. 64位 ubuntu android studio gradle 权限不够 缺少文件和权限导致

    安装 32位  库文件 sudo apt-get install lib32z1 给文件夹加权限 chmod 777 -R SDK chmod 777 -R android-studio -R表示所有 ...

  10. Swift语言—有趣的字符串连接、数组、字典

    字符串链接:Swift语言中的字符串连接方式本人觉得非常的有趣,变量连接需要用右斜杠,并且变量名要括起来 “\(变量名)”,后面的字符串连接分别用逗号 ‘ , ’ 隔开 数组: Var arr = [ ...