說明
- Mysql的查詢訊日誌是Mysql提供的一種日誌記錄,它用來記錄在Mysql中響應時間超過閾值的語句
- 具體指運行時間超過long_query_time值得SQL,則會被記錄到慢查詢日誌中。long_query_time的默認為10,意識是運行10秒以上的語句。
- 由它來看那些SQL語句超出了我們的最大忍耐值,比如一條SQL執行超過了5秒,我們就算慢查詢,我們就可以結合Explain進行分析。
查看是否開啟及如何開啟
默認Mysql沒有開啟慢查詢,需要我們說動設置這個參數。當然,如果不是調優需要的話,一般不建議開啟該參數,因為開啟慢查詢日誌會或多或少帶來一定的性能影響。慢查詢日誌支持將日誌寫入文件。
進入mysql終端查看是否開啟(我這裡都是自己改過的)
mysql> show variables like %slow_query_log%;
+---------------------+----------------------------+
| Variable_name | Value |
+---------------------+----------------------------+
| slow_query_log | ON |
| slow_query_log_file | /data/mysql/mysql-slow.log |
+---------------------+----------------------------+
上面查詢結果第一行,這裡是開啟的,第二行是默認查詢路徑文件名。
mysql> set global slow_query_log = 0|1; //設置開啟或者關閉,0為關閉,1為開啟
如果使用set global slow_query_log 命令開啟慢查詢日誌,只對當前資料庫生效,如果Mysql重啟後則會失效。
補充:如果通過終端命令設定的話,再查詢是看不到修改結果的,需要新開啟一個窗口查看即可。
如果要永久生效,必須修改my.cnf配置文件(其他系統變數也是如此),
修改my.cnf文件,[mysqld]下增加和修改參數slow_query_log和slow_query_log_file後,然後重啟MySQL伺服器,也即將如下兩行配置進my.cnf文件
slow_query_log = 1
slow_query_log_file = /data/mysql/mysql-slow.log
[mysqld]
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql-slow.log
關於慢查詢的參數slow_query_log_file,它指定慢查詢日誌文件的存放路徑,系統默認會給一個預設的host_name_show.log(如果沒有指定參數slow_query_log_file的話)。
那麼開啟了慢日誌後,怎麼樣的SQL才會記錄到慢查詢當中呢?
- 這個是由參數long_query_time控制,默認情況下long_query_time的值是10秒。
- 命令SHOW VARIABLES LIKE long_query_time;
mysql> show variables like long_query_time;
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 10.00000 |
+-----------------+----------+
可以使用命令修改,也可以在my.cnf參數裡面修改,修改完記得習慣性重啟服務。還是那句話,不建議生產環境開啟。
mysql> show variables like long_query_time;
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
假如SQL運行時間剛好等於long_query_time的情況,並不會被記錄下來,也就是說,在Mysql源碼裏是判斷大於long_query_time,而非大於等於。
Case
- 查看當前多少秒算慢:SHOW VARIABLES LIKE long_query_time%;
- 設置慢的闕值時間:set global long_query_time=3;