一.概述
???????? 慢查詢日志記錄了所有的超過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語句,慢日志則需要開啟(默認不開啟)。
?