MySQL慢查詢日誌
MySQL本身支援慢查詢日誌,可以配置SQL查詢超過特定時間的查詢記錄到日誌中。這在最佳化SQL查詢中是非常有效工具,能夠協助我們快速定位發生問題的SQL。
慢查詢日誌常用的變數
long_query_time : 最小值為0,預設為10毫秒,僅記錄超過查詢時間的SQL,最小粒度為毫秒。
min_examined_row_limit : 執行查詢時掃描過的行數。
slow_query_log_file : 慢查詢記錄檔名稱
log-output : 慢查詢日誌存放路徑
log_queries_not_using_indexes : 不使用索引的查詢記錄到慢查詢日誌
log_slow_slave_statements : 將叢集中的慢查詢日誌記錄到主節點主機慢查詢日誌中。
詳解慢查詢日誌的使用
將日誌記錄到檔案時,最小時間粒紋可以為毫秒。但是將日誌記錄到資料庫中的表時,只能記錄到整型的秒。所以,慢查詢日誌多數記錄在檔案中。
mysql並不將初始鎖定SQL時間當作執行時間,mysqld只有在sql執行完畢,並且釋放了所有的鎖後,才會將日誌寫進檔案。因此,日誌中記錄的順序可能與應用程式實際執行的時間不同。
預設情況下,慢查詢日誌是不啟用的,所以很多人從來不知道這個玩意。若啟用慢查詢日誌,需要在啟動mysql時指定 --slow_query_log[={0|1}]. 如果沒有參數或者參數為1,就啟用了慢查詢日誌。當然參數為0的話,就會禁用慢查詢日誌。指定記錄檔名稱的話,使用 --slow_query_log_file=file_name。指定記錄檔路徑的話,使用 --log-output=output_file_name。
如果沒有為慢查詢日誌指定檔案名稱的話,預設名字是 host_name-slow.log。如果不為日誌指定目錄的話,這個日誌會存放在資料目錄下。
有一點需要的是,如果不為慢查詢記錄檔找不到目錄或者目錄不存在的話,即便啟用了慢查詢日誌,也不會記錄到慢查詢記錄檔中。所以,切記指定的慢查詢日誌目錄是一個已經存在的目錄。
如果想要慢查詢日誌少記點內容的話,可以使用 --log-short-format選項。
如果想要將管理行為也記錄到慢查詢日誌中,可以使用log_slow_admin_statements變數。它會記錄下修改資料表,分析資料表,檢查資料表,建立索引,刪除索引以及修複資料表等行為。
如果要在慢查詢日誌中記錄下沒有使用索引的查詢,可以使用log_queries_not_using_indexes變數。當然這麼做,會導致系統的日誌增加的特別快。我們可以使用log_throttle_queries_not_using_indexes變數限制記錄查詢的頻率。這個變數的預設值是0,即無限制記錄。我們最好設定一個整數如60,只需記錄每分鐘不使用索引查詢的次數即可。
最後,從資料庫緩衝中查詢的記錄不會記錄到慢查詢日誌中。如果一個表沒有資料的話,也不會記錄到慢查詢日誌中。叢集中的主節點不會將重複的內容記錄到慢查詢日誌中,除非啟用 log_slow_slave_statements。
本文永久更新連結地址: