需要收集什麼樣的數據
現在已經確定了診斷觸發器可以開始啟動一些進程來收集數據了但需要收集什麼樣的數據呢?就像前面說的答案是盡可能收集所有能收集的數據但只在需要的時間段內收集包括系統的狀態CPU 利用率磁盤使用率和可用空間ps 的輸出采樣內存利用率以及可以從MySQL 獲得的信息如SHOW STATUSSHOW PROCESSLIST 和SHOWINNODB STATUS這些在診斷問題時都需要用到(可能還會有更多)
執行時間包括用於工作的時間和等待的時間當一個未知問題發生時一般來說有兩種可能服務器需要做大量的工作從而導致大量消耗CPU ;或者在等待某些資源被釋放所以需要用不同的方法收集診斷數據來確認是何種原因剖析報告用於確認是否有太多工作而等待分析則用於確認是否存在大量等待如果是未知的問題怎麼知道將精力集中在哪個方面呢?沒有更好的辦法所以只能兩種數據都盡量收集
在GNU/Linux 平台可用於服務器內部診斷的一個重要工具是oprofile後面會展示一些例子也可以使用strace 剖析服務器的系統調用但在生產環境中使用它有一定的風險後面還會繼續討論它如果要剖析查詢可以使用tcpdump大多數MySQL 版本無法方便地打開和關閉慢查詢日志此時可以通過監聽TCP 流量來模擬另外網絡流量在其他一些分析中也非常有用
對於等待分析常用的方法是GDB 的堆棧跟蹤注MySQL 內的線程如果卡在一個特定的地方很長時間往往都有相同的堆棧跟蹤信息跟蹤的過程是先啟動gdb然後附加(attach)到mysqld 進程將所有線程的堆棧都轉儲出來然後可以利用一些簡短的腳本將類似的堆棧跟蹤信息做匯總再利用sort|uniq|sort 的魔法排序出總計最多的堆棧信息稍後將演示如何用ptpmp 工具來完成這個工作
也可以使用SHOW PROCESSLIST 和SHOW INNODB STATUS 的快照信息觀察線程和事務的狀態來進行等待分析這些方法都不完美但實踐證明還是非常有幫助的
收集所有的數據聽起來工作量很大或許讀者之前已經做過類似的事情但我們提供的工具可以提供一些幫助這個工具名為ptcollect也是Percona Toolkit 中的一員ptcollect 一般通過ptstalk 來調用因為涉及很多重要數據的收集所以需要用root 權限來運行默認情況下啟動後會收集 秒的數據然後退出對於大多數問題的診斷來說這已經足夠但如果有誤報(false positive)的問題出現則可能收集的信息就不夠
這個工具很容易下載到並且不需要任何配置配置都是通過ptstalk 進行的系統中最好安裝gdb 和oprofile然後在ptstalk 中配置使用另外mysqld 也需要有調試符號信息注當觸發條件滿足時ptcollect 會很好地收集完整的數據它也會在目錄中創建時間戳文件在本書寫作之際這個工具是基於GNU/Linux 的後續會遷移到其他操作系統這是一個好的開始
解釋結果數據
如果已經正確地設置好觸發條件並且長時間運行ptstalk則只需要等待足夠長的時間來捕獲幾次問題就能夠得到大量的數據來進行篩選從哪裡開始最好呢?我們建議先根據兩個目的來查看一些東西第一檢查問題是否真的發生了因為有很多的樣本數據需要檢查如果是誤報就會白白浪費大量的時間第二是否有非常明顯的跳躍性變化
在服務器正常運行時捕獲一些樣本數據也很重要而不只是在有問題時捕獲數據這樣可以幫助對比確認是否某些樣本或者樣本中的某部分數據有異常例如在查看進程列表(process list)中查詢的狀態時可以回答一些諸如大量查詢處於正在排序結果的狀態是不是正常的的問題
查看異常的查詢事務的行業以及異常的服務器內部行業通常都是最有收獲的查詢或事務的行為可以顯示是否是由於使用服務器的方式導致的問題性能低下的SQL查詢使用不當的索引設計糟糕的數據庫邏輯架構等通過抓取TCP 流量或者SHOWPROCESSLIST 輸出可以獲得查詢和事務出現的地方從而知道用戶對數據庫進行了什麼操作通過服務器的內部行為則可以清楚服務器是否有bug或者內部的性能和擴展性是否有問題這些信息在類似的地方都可以看到包括在oprofile 或者gdb 的輸出中但要理解則需要更多的經驗
如果遇到無法解釋的錯誤則最好將收集到的所有數據打包提交給技術支持人員進行分析MySQL 的技術支持專家應該能夠從數據中分析出原因詳細的數據對於支持人員來說非常重要另外也可以將Percona Toolkit 中另外兩款工具ptmysqlsummary 和ptsummary 的輸出結果打包這兩個工具會輸出MySQL 的狀態和配置信息以及操作系統和硬件的信息
Percona Toolkit 還提供了一款快速檢查收集到的樣本數據的工具ptsift這個工具會輪流導航到所有的樣本數據 得到每個樣本的匯總信息如果需要 也可以鑽取到詳細信息使用此工具至少可以少打很多字少敲很多次鍵盤
返回目錄高性能MySQL
編輯推薦
ASP NET開發培訓視頻教程
數據倉庫與數據挖掘培訓視頻教程
Oracle索引技術
[] []
From:http://tw.wingwit.com/Article/program/MySQL/201311/29701.html