Mysql 慢查詢日誌分析方法說明
Mysql 慢查詢日誌分析方法說明
一、分析sql慢查詢的意義
在運營網站的過程中,可能會遇到網站突然變慢的問題,一般情況下和 MySQL 慢有關係,可以通過開啟慢查詢來記錄超過指定時間的SQL語句(目前慢查詢時間為2秒),找到影響效率的SQL語句,然後採取相應的措施進行優化,從而提高整個系統的效能。
二、linux下5種分析工具的簡要使用說明
以下命令均在centos下執行。
# mysqldumpslow slow_query_9.log (推薦)
# mysqlsla -lt slow slow_query_9.log (強烈推薦)
# php parser.php -slow slow_query_9.log (
# ./mysql_explain_slow_log --user=root --password=123456 < slow_query_9.log (不推薦)
# python mysql_filter_slow_log.py --no-duplicates slow_query_9.log (推薦)
三、各種分析工具的詳細說明
1、mysqldumpslow
mysql官方提供的慢查詢日誌分析工具,包含在mysql-server安裝包裡。
輸出樣例如下:
格式說明: 統計不同慢sql的
出現次數(Count),
執行最長時間(Time),
累計總耗費時間(Time)
等待鎖的時間(Lock),
傳送給客戶端的行總數(Rows),
掃描的行總數(Rows),
使用者以及sql語句本身(抽象了一下格式,比如 limit 1,20 用 limit N,N 表示)。
2、Mysqlsla
hackmysql.com推出的一款日誌分析工具(該網站還維護了 mysqlreport, mysqlidxchk 等比較實用的mysql工具)。整體來說,功能非常強大。資料報表,非常有利於分析慢查詢的原因,包括執行頻率,資料量,查詢消耗等。
Linux下安裝方法
需要perl-DBI和per-DBD-Mysql兩模組的支援,centos下安裝mysql自動安裝了這2個模組。
# tar xvfz mysqlsla-2.03.tar.gz
# cd mysqlsla-2.03
# perl Makefile.PL
# make
# make install
輸出樣例如下:
格式說明:
總查詢次數 (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語句
除了以上的輸出,官方還提供了很多定製化引數,是一款不可多得的好工具。
3、mysql-explain-slow-log
mysql-explain-slow-log(http://www.willamowius.de/mysql-tools.html)
德國人寫的一個perl指令碼,需要在本機先將慢查詢日誌檔案塞入mysql然後使用收集帶有EXPLAIN index使用情況的統計(Feed a mysqld slow log back into mysql and collect statistics about index usage with EXPLAIN.)。功能上有點瑕疵,,不僅把所有的 slow log 列印到螢幕上,而且統計也只有數量而已,不推薦使用。
輸出樣例如下:
功能上有點瑕疵,不僅把所有的 slow log 列印到螢幕上,而且統計也只有數量而已。不推薦使用。
4、mysql-log-filter
mysql-log-filter(http://code.google.com/p/mysql-log-filter/)
提供python和php兩種版本的指令碼,python版本要比php版本快3-5倍;還可以指定分析起止時間。
輸出樣例如下:
功能上比官方的mysqldumpslow,多了查詢時間的統計資訊(平均,最大, 累計),其他功能都與 mysqldumpslow類似。特色功能除了統計資訊外, 還針對輸出內容做了排版和格式化, 保證整體輸出的簡潔。喜歡簡潔報表的朋友,推薦使用。
5、Myprofi
輸出樣例如下:
格式說明:
功能上, 列出了總的慢查詢次數和型別, 去重後的sql語句, 執行次數及其佔總的slow log數量的百分比。
從整體輸出樣式來看,比mysql-log-filter還要簡潔。省去了很多不必要的內容。對於只想看sql語句及執行次數的使用者來說,強烈推薦。