mysql 慢日誌分析

啓用 slow log
 

有兩種啓用方式:
1, 在my.cnf 裏 經過 log-slow-queries[=file_name]
2, 在mysqld進程啓動時,指定--log-slow-queries[=file_name]選項

比較的五款經常使用工具
 

mysqldumpslow, mysqlsla, myprofi, mysql-explain-slow-log, mysqllogfilterphp

mysqldumpslow, mysql官方提供的慢查詢日誌分析工具. 輸出圖表以下

主要功能是, 統計不一樣慢sql的
出現次數(Count), 
執行最長時間(Time), 
累計總耗費時間(Time), 
等待鎖的時間(Lock), 
發送給客戶端的行總數(Rows), 
掃描的行總數(Rows), 
用戶以及sql語句自己(抽象了一下格式, 好比 limit 1, 20 用 limit N,N 表示).

講一下有用的參數:
-s 排序選項:c 查詢次數 r 返回記錄行數 t 查詢時間
-t 只顯示top n條查詢
mysqldumpslow -s r -t 10 slow.log

 html

mysqlsla, hackmysql.com推出的一款日誌分析工具(該網站還維護了 mysqlreport, mysqlidxchk 等比較實用的mysql工具)

總體來講, 功能很是強大. 數據報表,很是有利於分析慢查詢的緣由, 包括執行頻率, 數據量, 查詢消耗等.
 

 
格式說明以下:
總查詢次數 (queries total), 去重後的sql數量 (unique)
輸出報表的內容排序(sorted by)
最重大的慢sql統計信息, 包括 平均執行時間, 等待鎖時間, 結果行的總數, 掃描的行總數.

 
Count, sql的執行次數及佔總的slow log數量的百分比.
Time, 執行時間, 包括總時間, 平均時間, 最小, 最大時間, 時間佔到總慢sql時間的百分比.
95% of Time, 去除最快和最慢的sql, 覆蓋率佔95%的sql的執行時間.
Lock Time, 等待鎖的時間.
95% of Lock , 95%的慢sql等待鎖時間.
Rows sent, 結果行統計數量, 包括平均, 最小, 最大數量.
Rows examined, 掃描的行數量.
Database, 屬於哪一個數據庫
Users, 哪一個用戶,IP, 佔到全部用戶執行的sql百分比

 
Query abstract, 抽象後的sql語句
Query sample, sql語句

 
除了以上的輸出, 官方還提供了不少定製化參數, 是一款不可多得的好工具.

 
mysql-explain-slow-log, 德國人寫的一個perl腳本.
http://www.willamowius.de/mysql-tools.html

 

功能上有點瑕疵, 不只把全部的 slow log 打印到屏幕上, 並且統計也只有數量而已. 不推薦使用.
mysql-log-filter, google code上找到的一個分析工具.提供了 python 和 php 兩種可執行的腳本.
http://code.google.com/p/mysql-log-filter/

 

 功能上比官方的mysqldumpslow, 多了查詢時間的統計信息(平均,最大, 累計), 其餘功能都與 mysqldumpslow相似.
特點功能除了統計信息外, 還針對輸出內容作了排版和格式化, 保證總體輸出的簡潔. 喜歡簡潔報表的朋友, 推薦使用一下.python

myprofi, 純php寫的一個開源分析工具.項目在 sourceforge 上.
http://myprofi.sourceforge.net/

 

 

功能上, 列出了總的慢查詢次數和類型, 去重後的sql語句, 執行次數及其佔總的slow log數量的百分比.
從總體輸出樣式來看, 比mysql-log-filter還要簡潔. 省去了不少沒必要要的內容. 對於只想看sql語句及執行次數的用戶來講, 比較推薦.

總結
 

工具/功能 通常統計信息 高級統計信息 腳本 優點
mysqldumpslow 支持 不支持 perl mysql官方自帶
mysqlsla 支持 支持 perl 功能強大,數據報表齊全,定製化能力強.
mysql-explain-slow-log 支持 不支持 perl
mysql-log-filter 支持 部分支持 python or php 不失功能的前提下,保持輸出簡潔
myprofi 支持 不支持 php 很是精簡
相關文章
相關標籤/搜索