分析查詢日志
強烈建議大家從現在起就利用慢查詢日志捕獲服務器上的所有查詢並且進行分析可以在一些典型的時間窗口如業務高峰期的一個小時內記錄查詢如果業務趨勢比較均衡那麼一分鐘甚至更短的時間內捕獲需要優化的低效查詢也是可行的
不要直接打開整個慢查詢日志進行分析這樣做只會浪費時間和金錢首先應該生成一個剖析報告如果需要則可以再查看日志中需要特別關注的部分自頂向下是比較好的方式否則有可能像前面提到的反而導致業務的逆優化
從慢查詢日志中生成剖析報告需要有一款好工具這裡我們建議使用ptquerydigest這毫無疑問是分析MySQL 查詢日志最有力的工具該工具功能強大包括可以將查詢報告保存到數據庫中以及追蹤工作負載隨時間的變化
一般情況下只需要將慢查詢日志文件作為參數傳遞給ptquerydigest就可以正確地工作了它會將查詢的剖析報告打印出來並且能夠選擇將重要的查詢逐條打印出更詳細的信息輸出的報告細節詳盡絕對可以讓生活更美好該工具還在持續的開發中因此要了解最新的功能請閱讀最新版本的文檔
這裡給出一份ptquerydigest輸出的報告的例子作為進行性能剖析的開始這是前面提到過的一個味修改過的剖析報告
# Profile
# Rank Query ID Response time Calls R/Call V/M Item
# ==== ================== ================ ===== ====== ===== =======
# xBFCFEFF % SELECT InvitesNew?
# xBCABBCEC % SELECT StatusUpdate?
# xBCCCC % SHOW STATUS
# xCBDBBBCF % SHOW STATUS
# MISC xMISC % < ITEMS>
可以看到這個比之前的版本多了一些細節首先每個查詢都有一個ID這是對查詢語句計算出的哈希值指紋計算時去掉了查詢條件中的文本值和所有空格並且全部轉化為小寫字母(請注意第三條和第四條語句的摘要看起來一樣但哈希指紋是不一樣的)該工具對表名也有類似的規范做法表名InvitesNew 後面的問號意味著這是一個分片(shard)的表表名後面的分片標識被問號替代這樣就可以將同一組分片表作為一個整體做匯總統計這個例子實際上是來自一個壓力很大的分片過的Facebook 應用
報告中的V/M 列提供了方差均值比(variancetomean ratio)的詳細數據方差均值比也就是常說的離差指數(index of dispersion)離差指數高的查詢對應的執行時間的變化較大而這類查詢通常都值得去優化如果ptquerydigest 指定了explain 選項輸出結果中會增加一列簡要描述查詢的執行計劃執行計劃是查詢背後的極客代碼通過聯合觀察執行計劃列和V/M 列可以更容易識別出性能低下需要優化的查詢
最後在尾部也增加了一行輸出顯示了其他 個占比較低而不值得單獨顯示的查詢的統計數據可以通過limit 和outliers 選項指定工具顯示更多查詢的詳細信息而不是將一些不重要的查詢匯總在最後一行默認只會打印時間消耗前 位的查詢或者執行時間超過 秒阈值很多倍的查詢這兩個限制都是可配置的
返回目錄高性能MySQL
編輯推薦
ASP NET開發培訓視頻教程
數據倉庫與數據挖掘培訓視頻教程
Oracle索引技術
[] []
From:http://tw.wingwit.com/Article/program/MySQL/201311/29715.html