使用pt-stalk分析MySQL的效能波動
轉發:
其他: https://www.percona.com/blog/2013/01/03/percona-toolkit-by-example-pt-stalk/
其他: https://www.percona.com/blog/2013/01/03/percona-toolkit-by-example-pt-stalk/
簡介
在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等)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-2059636/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用pt-stalk診斷MySQL的間歇性問題MySql
- 服務啟動過程效能波動的分析與解決方案
- MySQL-09.效能分析工具的使用MySql
- MySQL下Limit使用及效能分析MySqlMIT
- MySQL使用profile分析語句效能消耗MySql
- 【MySQL】如何使用SQL Profiler 效能分析器MySql
- MySQL SQL效能分析MySql
- MySQL索引效能分析MySql索引
- MySQL 非同步驅動淺析 (一):效能分析MySql非同步
- mysql效能分析之explain的用法MySqlAI
- mysql三種批次增加的效能分析MySql
- In和exists使用及效能分析(三):in和exists的效能分析
- MySQL效能分析工具之PROFILEMySql
- MySQL 索引 效能分析 show profilesMySql索引
- 使用 sysbench 測試 MySQL 的效能MySql
- In和exists使用及效能分析(一):in的使用
- MySQL 查詢效能分析之 ExplainMySqlAI
- MySQL高階(3)-效能分析ExplainMySqlAI
- 使用 sysbench 測試 MySQL 的效能(二)MySql
- In和exists使用及效能分析(二):exists的使用
- perf及火焰圖的使用,效能分析
- MySQL SQL Profiler效能分析器(轉)MySql
- 《MySQL 進階篇》十四:效能分析工具MySql
- 使用sysbench測試Mysql效能MySql
- 使用pprof進行效能分析
- perf效能分析工具使用分享
- 7 個使用 bcc/BPF 的效能分析神器
- Unity效能分析(一)流程與工具的使用Unity
- 如何快速解決叢集異常和機器效能波動
- MySQL5.7/8.0效能分析shell指令碼MySql指令碼
- MySQL效能分析和優化-part1MySql優化
- mysql 資料庫效能分析工具簡介MySql資料庫
- MySQL資料庫的效能的影響分析及其優化MySql資料庫優化
- 使用 ProxySQL 改進 MySQL SSL 的連線效能MySql
- MySQL效能優化的21個最佳實踐 和 mysql使用索引MySql優化索引
- MySQL 效能優化之硬體瓶頸分析MySql優化
- C#中使用反射的使用實現和效能分析(轉)C#反射
- MySQL: 使用explain 優化查詢效能MySqlAI優化