在MySQL服務器出現短暫(5~30秒)的性能波動的時候,一般的性能監控工具都很難抓住故障現場,也就很難收集對應較細粒度的診斷信息。另外,如果這種波動出現的頻率很低,例如幾天才一次,我們也很難人為的抓住現場,收集數據。這正是pt-stalk所解決的問題。
pt-stalk是Percona-Toolkit的一部分(其前身是Aspersa的一部分)。安裝Percona-Toolkit後,可以通過man pt-stalk了解如何使用該工具,本文的介紹是man pt-stalk的一個子集,強烈建議直接閱讀man pt-stalk。額外的,本文將提供pt-stalk示例命令可供參考。
1. 使用pt-stalk pt-stalk –collect-tcpdump –function status \ –variable Threads_connected –threshold 2500 \ –daemonize — –user=root –password=YOURPASSWORD上面的命令表示,讓pt-stalk後台運行(–daemonize),並監視SHOW GLOBAL STATUS中的Threads_connected狀態值,如果該值超過2500,則觸發收集主機和MySQL的性能、狀態信息。pt-stalk會每隔一秒檢查一次狀態值,如果連續5次滿足觸發條件,則開始收集。
–collect-tcpdump表示除了收集基本信息外,還將額外使用tcpdump收集當時的網絡包,類似的還可以使用–collect-gdb等。
2. pt-stalk如何連接MySQL在上面的命令中參數,”– –user=root –password=YOURPASSWORD”表示,將使用”–”後面的所有參數用於mysql和mysqladmin命令,所以這裡確保你給出正確的用戶名和密碼。下面是man pt-stalk中給出的語法:
SYNOPSIS Usage: pt-stalk [OPTIONS] [-- MYSQL OPTIONS]看到前面的[OPTIONS]是pt-stalk使用的參數,[-- MYSQL OPTIONS]是mysql和mysqladmin使用的參數。
3. pt-stalk的工作狀態pt-stalk是一個後台程序,默認我們可以通過文件/var/log/pt-stalk.log,查看pt-stalk的運行狀態:
tail -f /var/log/pt-stalk.log 2012_06_05_00_00_35 Check results: Threads_connected=1641, matched=no 2012_06_05_00_00_36 Check results: Threads_connected=1641, matched=no 2012_06_05_00_00_37 Check results: Threads_connected=1641, matched=no 2012_06_05_00_00_38 Check results: Threads_connected=1641, matched=no 2012_06_05_00_00_39 Check results: Threads_connected=1641, matched=no 2012_06_05_00_00_40 Check results: Threads_connected=1641, matched=no 2012_06_05_00_00_41 Check results: Threads_connected=1641, matched=no你還可以通過參數–log指定一個你希望的log目錄和文件。
4. pt-stalk收集的性能和狀態數據默認pt-stalk將收集的數據放在目錄/var/lib/pt-stalk下,你可以使用參數–dest指定你希望的目錄。下面是一個pt-stalk觸發收集後的數據文件:
這些數據都是原始數據,我們可以根據這些來分析當時MySQL或者主機是否有異常。
5. pt-stalk的觸發條件在上面的示例中觸發參數是:”–function status –variable Threads_connected –threshold 2500″,表示MySQL狀態值Threads_connected超過2500時觸發數據收集。常用的觸發條件還可以使用Threads_running等。
另外還可以使用SHOW PROCESSLIST的中的結果觸發,例如”–function processlist –variable State –match statistics –threshold 10″表示,show processlist中State列的值為statistics的線程數超過10則觸發收集。
6. 一些其他有用的參數–iterations:該參數指定pt-stalk在收集幾次故障現場後就退出。默認pt-stalk會一直運行
–run-time:觸發收集後,該參數指定收集多長時間的數據。默認是30秒
–sleep:為防止一直觸發收集數據,該參數指定在某次觸發後,必須sleep一段時候才繼續觀察並觸發收集。默認是300秒
–interval:默認情況pt-stalk會每隔一秒檢查一次狀態數據,判斷是否需要觸發收集。該參數指定間隔時間,默認是1秒。
–cycles:默認情況pt-stalk只有連續觀察到五次狀態值滿足觸發條件時,才觸發收集。該參數控制,需要連續幾次滿足條件,收集被觸發,默認是5次。
參考文獻:man pt-stalk;man percona-toolkit