顧名思義,慢查詢日誌中記錄的是執行時間較長的 query
可以設一個閥值、將已耗用時間超過該值的所有SQL語句都記錄到慢查詢記錄檔中
該閥值可以通過參數long_query_time來設定、預設是10秒
這裡需要一點、對於已耗用時間正好等於long_query_time的情況、並不會被記錄
因為、在原始碼裡是判斷大於long_query_time、而非大於等於
mysql> show variables like 'log_slow_queries';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| log_slow_queries | ON |
+------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
另一個和慢查詢日誌相關的參數是log_queries_not_using_indexes
如果啟動並執行SQL沒有使用索引、則MySQL同樣會將這條語句記錄到慢查詢記錄檔
mysql> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
1 row in set (0.00 sec)
在這裡、我沒有開啟、但有點需要提醒、如果線上修改該參數、雖然沒有報錯、但是不會生效
MySQL 還提供了專門用來分析滿查詢日誌的工具程式 mysqldumpslow、用來協助MySQL DBA解決可能存在的效能問題
例子、獲得 TOP-5 SQL語句:
[mysql@localhost bin]$ ./mysqldumpslow -s al -n 5 /home/mysql/mysql/log/slow.log
Reading mysql slow query log from /home/mysql/mysql/log/slow.log
Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows=0.0 (0), 0users@0hosts