在MySQL伺服器出現短暫(5~30秒)的效能波動的時候,一般的效能監控工具都很難抓住故障現場,也就很難收集對應較細粒度的診斷資訊。另外,如果這種波動出現的頻率很低,例如幾天才一次,我們也很難人為的抓住現場,收集資料。這正是pt-stalk所解決的問題。
pt-stalk是的一部分(其前身是的一部分)。安裝Percona-Toolkit後,可以透過man pt-stalk瞭解如何使用該工具,本文的介紹是man pt-stalk的一個子集,強烈建議直接閱讀man pt-stalk。額外的,本文將提供pt-stalk示例命令可供參考。
--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等。
在上面的命令中引數,"-- --user=root --password=YOURPASSWORD"表示,將使用"--"後面的所有引數用於mysql和mysqladmin命令,所以這裡確保你給出正確的使用者名稱和密碼。下面是man pt-stalk中給出的語法:
Usage: pt-stalk [OPTIONS] [-- MYSQL OPTIONS]
看到前面的[OPTIONS]是pt-stalk使用的引數,[-- MYSQL OPTIONS]是mysql和mysqladmin使用的引數。
pt-stalk是一個後臺程式,預設我們可以透過檔案/var/log/pt-stalk.log,檢視pt-stalk的執行狀態:
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目錄和檔案。
預設pt-stalk將收集的資料放在目錄/var/lib/pt-stalk下,你可以使用引數--dest指定你希望的目錄。下面是一個pt-stalk觸發收集後的資料檔案:
這些資料都是原始資料,我們可以根據這些來分析當時MySQL或者主機是否有異常。
在上面的示例中觸發引數是:"--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則觸發收集。
--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