1. 程式人生 > >Mysql 慢查詢日誌分析方法說明

Mysql 慢查詢日誌分析方法說明

Mysql 慢查詢日誌分析方法說明                    

一、分析sql慢查詢的意義

在運營網站的過程中,可能會遇到網站突然變慢的問題,一般情況下和 MySQL 慢有關係,可以通過開啟慢查詢來記錄超過指定時間的SQL語句(目前慢查詢時間為2秒),找到影響效率的SQL語句,然後採取相應的措施進行優化,從而提高整個系統的效能。

二、linux5種分析工具的簡要使用說明

以下命令均在centos下執行。

# mysqldumpslow slow_query_9.log    (推薦)

# mysqlsla -lt  slow slow_query_9.log  (強烈推薦)

# php parser.php -slow slow_query_9.log 

php強烈推薦)

# ./mysql_explain_slow_log --user=root --password=123456 < slow_query_9.log  (不推薦)

# python mysql_filter_slow_log.py --no-duplicates slow_query_9.log (推薦)

三、各種分析工具的詳細說明

1mysqldumpslow

mysql官方提供的慢查詢日誌分析工具,包含在mysql-server安裝包裡

輸出樣例如下:



格式說明: 統計不同慢sql

出現次數(Count), 

執行最長時間(Time), 

累計總耗費時間(Time)

, 

等待鎖的時間(Lock), 

傳送給客戶端的行總數(Rows), 

掃描的行總數(Rows), 

使用者以及sql語句本身(抽象了一下格式,比如 limit 1,20 用 limit N,N 表示)

2Mysqlsla

hackmysql.com推出的一款日誌分析工具(該網站還維護了 mysqlreport, mysqlidxchk 等比較實用的mysql工具)。整體來說,功能非常強大。資料報表,非常有利於分析慢查詢的原因,包括執行頻率,資料量,查詢消耗等。

Linux下安裝方法

需要perl-DBIper-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語句

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

3mysql-explain-slow-log

mysql-explain-slow-loghttp://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 列印到螢幕上,而且統計也只有數量而已。不推薦使用。

4mysql-log-filter

mysql-log-filterhttp://code.google.com/p/mysql-log-filter/

提供pythonphp兩種版本的指令碼,python版本要比php版本快3-5倍;還可以指定分析起止時間。

輸出樣例如下:



功能上比官方的mysqldumpslow,多了查詢時間的統計資訊(平均,最大, 累計),其他功能都與 mysqldumpslow類似。特色功能除了統計資訊外, 還針對輸出內容做了排版和格式化, 保證整體輸出的簡潔。喜歡簡潔報表的朋友,推薦使用。

5Myprofi

輸出樣例如下:



格式說明:

功能上, 列出了總的慢查詢次數和型別, 去重後的sql語句, 執行次數及其佔總的slow log數量的百分比

從整體輸出樣式來看,比mysql-log-filter還要簡潔。省去了很多不必要的內容。對於只想看sql語句及執行次數的使用者來說,強烈推薦。