MySQL優化:啓用慢查詢日誌記錄

在前面的文章中,我們介紹瞭如何使用EXPLAIN來獲取SELECT語句的執行計劃信息,從而實現MySQL語句查詢性能的優化。此外,我們還可以讓MySQL記錄下那些執行時間特別長的SQL語句,以便於我們找到是哪些SQL影響了MySQL的性能。在MySQL中,這種執行時間超過了指定時間的SQL語句查詢就稱之爲「慢查詢」(或「慢速查詢」)。

在MySQL中,慢查詢的界定時間是由MySQL內置參數變量long_query_time來指定的,其默認值爲10(單位:秒),我們可以通過show variables like 'long_query_time';指令來查看該參數變量的信息:

long_query_time的默認值爲10秒long_query_time的默認值爲10秒

不過,在程序開發過程中,我們認爲慢速查詢的界定時間並沒有10秒這麼長,依據不同項目的不同需求,我們一般將慢查詢的界定時間設定爲1~5秒之間。我們可以使用指令set long_query_time = 秒數來設定long_query_time變量的值。

設定long_query_time的值爲1秒設定long_query_time的值爲1秒

修改了long_query_time參數後,我們還需要讓MySQL能夠記錄下慢查詢的日誌信息。因爲,在默認情況下,MySQL並不會記錄慢查詢的日誌信息。如果要記錄慢查詢日誌,我們需要以命令行方式進入MySQL安裝目錄\bin目錄(也可將該目錄添加到PATH環境變量中),使用如下命令重新啓動MySQL:

  1. #中括號[]內的部分是可選的,file_name表示日誌文件路徑
  2. #在5.5及以上版本的MySQL中,使用如下命令啓動:
  3. mysqld --show-query-log[=1] [--show-query-log-file=file_name]
  4. #在5.0、5.1等低版本的MySQL中,使用如下命令啓動:
  5. mysqld --log-slow-queries[=file_name]

在上述命令中,如果沒有指定日誌文件名,則日誌文件名稱默認爲主機名-slow.log;如果沒有指定文件路徑或者指定的文件路徑不是絕對路徑,則日誌文件將默認存放在MySQL配置文件my.ini中參數datadir所指定的目錄下。

此外,你也可以將上述命令行啓動命令配置到my.ini中的[mysqld]節點下,這樣無需每次手動鍵入上述命令來啓動。

  1. [mysqld]
  2. #設置慢查詢界定時間爲1秒
  3. long_query_time=1
  4. #5.0、5.1等版本配置如下選項
  5. log-slow-queries="mysql_slow_query.log"
  6. #5.5及以上版本配置如下選項
  7. slow-query-log=On
  8. slow_query_log_file="mysql_slow_query.log"

注意:雖然慢查詢的名字中只包含了"查詢",實際上並不僅僅表示SELECT查詢操作,諸如INSERTUPDATEDELETECALL等其他DML操作,只要是超過指定時間的,都可以稱之爲「慢查詢」,並且會記錄在慢查詢日誌中。

動態啓動:SET GLOBAL slow_query_log=1;

動態關閉:SET GLOBAL slow_query_log=0;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章