在前面的文章中,我們介紹瞭如何使用EXPLAIN來獲取SELECT語句的執行計劃信息,從而實現MySQL語句查詢性能的優化。此外,我們還可以讓MySQL記錄下那些執行時間特別長的SQL語句,以便於我們找到是哪些SQL影響了MySQL的性能。在MySQL中,這種執行時間超過了指定時間的SQL語句查詢就稱之爲「慢查詢」(或「慢速查詢」)。
在MySQL中,慢查詢的界定時間是由MySQL內置參數變量long_query_time
來指定的,其默認值爲10(單位:秒),我們可以通過show
variables like 'long_query_time';
指令來查看該參數變量的信息:
不過,在程序開發過程中,我們認爲慢速查詢的界定時間並沒有10秒這麼長,依據不同項目的不同需求,我們一般將慢查詢的界定時間設定爲1~5秒之間。我們可以使用指令set
long_query_time = 秒數
來設定long_query_time變量的值。
修改了long_query_time
參數後,我們還需要讓MySQL能夠記錄下慢查詢的日誌信息。因爲,在默認情況下,MySQL並不會記錄慢查詢的日誌信息。如果要記錄慢查詢日誌,我們需要以命令行方式進入MySQL安裝目錄\bin
目錄(也可將該目錄添加到PATH環境變量中),使用如下命令重新啓動MySQL:
- #中括號[]內的部分是可選的,file_name表示日誌文件路徑
- #在5.5及以上版本的MySQL中,使用如下命令啓動:
- mysqld --show-query-log[=1] [--show-query-log-file=file_name]
- #在5.0、5.1等低版本的MySQL中,使用如下命令啓動:
- mysqld --log-slow-queries[=file_name]
在上述命令中,如果沒有指定日誌文件名,則日誌文件名稱默認爲主機名-slow.log
;如果沒有指定文件路徑或者指定的文件路徑不是絕對路徑,則日誌文件將默認存放在MySQL配置文件my.ini
中參數datadir
所指定的目錄下。
此外,你也可以將上述命令行啓動命令配置到my.ini中的[mysqld]節點下,這樣無需每次手動鍵入上述命令來啓動。
- [mysqld]
- #設置慢查詢界定時間爲1秒
- long_query_time=1
- #5.0、5.1等版本配置如下選項
- log-slow-queries="mysql_slow_query.log"
- #5.5及以上版本配置如下選項
- slow-query-log=On
- slow_query_log_file="mysql_slow_query.log"
注意:雖然慢查詢的名字中只包含了"查詢",實際上並不僅僅表示SELECT
查詢操作,諸如INSERT
、UPDATE
、DELETE
、CALL
等其他DML操作,只要是超過指定時間的,都可以稱之爲「慢查詢」,並且會記錄在慢查詢日誌中。
動態啓動:SET GLOBAL slow_query_log=1;
動態關閉:SET GLOBAL slow_query_log=0;