1. 程式人生 > >mysql 開發進階篇系列 41 mysql日誌之慢查詢日誌

mysql 開發進階篇系列 41 mysql日誌之慢查詢日誌

一.概述

         慢查詢日誌記錄了所有的超過sql語句( 超時引數long_query_time單位 秒),獲得表鎖定的時間不算作執行時間。慢日誌預設寫入到引數datadir(資料目錄)指定的路徑下。預設檔名是[hostname]_slow.log,預設超時是10秒,預設不開啟慢查詢日誌。下面檢視慢日誌的幾個引數:

-- 是否開啟慢日誌
SHOW  VARIABLES  LIKE 'slow_query_log';

  

-- 慢日誌檔案記錄位置
SHOW VARIABLES LIKE 'slow_query_log_file';

  

-- 慢日誌設定超時sql閥值(時間秒) 預設10秒
SHOW VARIABLES LIKE 'long_query_time';

  

-- 慢日誌儲存方式
SHOW VARIABLES  LIKE '%log_output%';

  

  log_output引數是指日誌儲存方式。log_output='FILE'表示將日誌存入檔案,預設值是'FILE'。log_output='TABLE'表示將日誌存入資料庫,這樣日誌資訊就會被寫入到mysql.slow_log表中。支援同時兩種日誌儲存方式如:log_output='FILE,TABLE'。另外:log_queries_not_using_indexes:未使用索引的查詢也被記錄到慢查詢日誌中(可選項)。

二. 設定慢日誌引數

  下面設定my.cnf配置檔案,將slow_query_log=1為開啟慢查詢記錄,將long_query_time=1為記錄超時1秒鐘的sql語句。    

  重啟mysqld服務後,在次查詢慢日誌引數,如下所示:        

三.演示超時sql以及檢視慢日誌

  -- 查詢超大結果集
  SELECT  * FROM b LIMIT 1000000

  執行資訊如下圖所示:

   

  下面搜尋日誌中含有select 關鍵詞的慢查詢語句:      下面搜尋日誌中含有CALL關鍵詞的儲存過程的慢查詢語句:    

  -- 查詢有多少條慢查詢記錄,可以使用系統變數。下面統計了慢查詢共10次。
  SHOW GLOBAL STATUS LIKE '%slow_queries%';

    

四. 日誌分析工具mysqldumpslow

  當慢日誌檔案內容超大時,需要對慢查詢進行分類彙總,可以使用mysqldumpslow工具。對於sql文字一致的,會視為同一個語句自動統計,如下面統計CALL呼叫9次。對於sql文字一致使用引數的,引數變更值使用N來代替。如下圖所示:    

五. 線上清除慢日誌內容

FLUSH LOGS;
-- 線上關閉慢日誌
SET GLOBAL slow_query_log=0;
-- 刪除日誌 rm

    

--  線上開啟慢日誌
SET GLOBAL slow_query_log=1;

    刪除日誌和開啟慢日誌後,會自動重新重成新的慢日誌,新的內容如下圖所示 :    

六. 日誌篇總結

  在日誌篇系列裡講到了最常用的4種日誌型別:錯誤日誌,二進位制日誌,查詢日誌,慢查詢日誌。 4種日誌各有不同用途:     (1) 系統故障時,建議首先檢視錯誤日誌。     (2) 如果要記錄資料的變更,資料備份,資料複製等操作時,二進位制日誌必須開啟 (預設不開啟)。     (3) 如果希望記錄資料庫發生的任何操作,包括select,需要開啟。一般情況不建議開啟,影響系統性能(預設不開啟)。     (4) 如果要排查系統性能問題,想找到有效能的sql語句,慢日誌則需要開啟(預設不開啟)。