MySQL 中,慢查詢日志(Slow Log)是我們優化數據庫性能時非常重要的一個工具。它記錄了執行時間超過指定閾值的 SQL 查詢,幫助我們找出性能瓶頸,進而對查詢進行優化。特別是在高負載環境中,慢查詢日志能夠讓我們迅速定位到執行時間較長的查詢,采取適當的優化措施,比如調整查詢語句、添加索引等。
啟用 Slow Log
開啟慢查詢日志并不復雜,首先需要在 MySQL 的配置文件中進行如下設置:
1. slow_query_log:設置為 ON 來啟用慢查詢日志。
2. slow_query_log_file:指定慢查詢日志的存儲路徑。
3. long_query_time:定義查詢執行時間的閾值,只有當查詢執行時間超過此值時才會被記錄。
例如,在 MySQL 配置文件中添加如下內容:
[mysqld]slow_query_log = 1slow_query_log_file = /path/to/slow-query.loglong_query_time = 1
這樣設置之后,執行時間超過 1 秒的查詢就會被記錄到指定的日志文件中。請確保根據實際情況選擇適合的時間閾值。
特殊設置
除了基本的設置外,MySQL 還提供了一些額外的設置,用于更精細化地記錄慢查詢日志:
· log_slow_admin_statements:啟用后,可以記錄管理語句(如 ALTER TABLE、CREATE INDEX 等)。
· log_queries_not_using_indexes:開啟后,所有不使用索引的查詢都會被記錄,無論其執行時間是否超過 long_query_time。
· min_examined_row_limit:設置記錄的最小行數。低于該行數的查詢不會被記錄。一般情況下,建議將該值設置為 0。
解析 Slow Log 內容
慢查詢日志的每條記錄中包含了執行時間、鎖定時間、發送行數、檢查行數等信息。以下是慢查詢日志中常見的字段:
· Query_time:查詢的執行時間,單位為秒。
· Lock_time:獲取鎖的時間,單位為秒。
· Rows_sent:發送給客戶端的行數。
· Rows_examined:MySQL 在執行查詢時檢查的行數。
從 MySQL 8.0.14 開始,慢查詢日志輸出增加了一些額外的字段,能夠提供更多的細節信息,如下所示:
· errno:執行查詢時的錯誤號。
· Killed:如果查詢被終止,則會顯示錯誤號指示的原因,正常終止則為 0。
· Start:查詢開始執行的時間。
· End:查詢執行完成的時間。
通過這些信息,我們可以更加精確地分析慢查詢,找到執行時間長的原因,并進行針對性的優化。