MySQL的性能從檢視日志開始。硬體配置低常常導緻這樣的問題,但事實上大多數情況并不在這裡。某些“慢"SQL阻塞了其他語句的執行,優化查詢是第一步需要做的。
“工欲善其事必先利其器”,MySQL自身的一款mysqldumpslow 查詢日志分析器,該工具不但陳舊,驗證規範不準确。今天要說的是Percona 的工具pt-query-digest,它能夠分析慢查詢日志内容,生成查詢報告,過濾,重放或傳送一些查詢語句至MySQL,PostgreSQL,memcached或者其他。
基本文法:pt-query-digest [OPTION...] [FILE]
pt-query-digest [OPTION...] [FILE]
缺點: 對系統資源開銷較大(可以将慢查詢日志拷貝至其他地方分析)
舉例1(在測試庫中進行)、
部分解釋如下:
第一行表示分析該日志所使用的時間。該檔案中一共擁有515.52k慢查詢(測試的情況稍稍多了點。。),其中有240個完全不同類型的查詢,在該時間段内每秒處理的查詢數量:0.12(關于差別完全不同的查詢稍後讨論)
接下來是:
比較嚴重SQL的分析部分:
其中挑出最為嚴重的 4個SQL語句,(可以通過參數 --limit 進行設定)它所有語句響應時間總和,調用比例,查詢類型等
接下來是單個語句的分析:
可以看到在 在資料庫YYY中使用者XX 利用該語句查詢的響應時間分布圖,10S+ 還是很多的。
最後是分析情況:
# 号部分是分析步驟,最後語句可以再前面 加上 explain 進行複制,進一步分析。
舉例二:
--review 參數
該參數可以講分析結果儲存在某個資料表中,這樣我們可以為查詢做出标記,并且當第二次加上 --review 時,如果存在相同的語句分析,就不會記錄到資料表中,
表結構如下:
CREATE TABLE query_review (
checksum 一個64位校驗碼對應于finigerprint
舉例:
舉例三:
隻收集:select 語句,并将其應用于其他的MySQLserver,并分析出耗時最長的SQL:
(這個可以講線上的 日志分析出來,并應用于測試的伺服器上,模仿線上的真是環境)
舉例四:
将processlist 收集出來 并輸出到其他檔案:
(這個預設是每秒進行一次連接配接并記錄,可設定,如果連接配接失敗會等待1秒在繼續連接配接)
所有參數 可以通過--help看到。
本文轉自 位鵬飛 51CTO部落格,原文連結http://blog.51cto.com/weipengfei/953075,如需轉載請自行聯系原作者