如何使用pt

108次阅读
没有评论

共计 2608 个字符,预计需要花费 7 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下如何使用 pt-stalk 分析 MySQL 的性能波动,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

简介

在 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 设置:

status

–function status –variable Threads_connected –threshold 2500,表示 MySQL 状态值 Threads_connected 超过 2500 时触发数据收集。常用的触发条件还可以使用 Threads_running 等。

processlist
–function processlist –variable State –match statistics –threshold 10,表示,show processlist 中 State 列的值为 statistics 的线程数超过 10 则触发收集。

自定义脚本
包含 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 的性能波动”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计2608字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)