MySQL Slow Query log(慢查詢日誌)
慢查詢日誌由執行時間超過long_query_time秒且至少有min_examined_row_limit行被檢查的SQL語句組成。long_query_time的最小值與預設值為0和10。它也可以指定為微秒。對於寫入檔案的日誌,時間資訊會被記錄並且包含微秒部分。對於寫入日誌表的記錄,只有整數時間被記錄,微秒部分被忽略。
預設情況下,管理語句不會被記錄,也不會記錄不使用索引進行查詢的語句。可以使用log_slow_admin_statements和log_queries_not_using_indexes來改變這種行為。
獲取初始鎖的時間不計算為執行時間。mysqld會在語句執行完成和所有鎖被釋放完成後將語句寫入慢查詢日誌,因此日誌順序可能與語句的執行順序不一致。
預設情況下,慢查詢日誌是被禁用的。為了顯式指定初始化慢查詢日誌狀態,使用--slow_query_log={0|1}。不使用引數值或引數值為1時,--slow_query_log啟用日誌。使用引數值為0時,禁用日誌。為了指定慢查詢日誌檔名,使用--slow_query_log_file=file_name。為了指定日誌目錄,使用--log-output。
mysql> show variables like 'slow_query%'; +---------------------+-------------------------------------+ | Variable_name | Value | +---------------------+-------------------------------------+ | slow_query_log | OFF | | slow_query_log_file | /mysqldata/mysql/localhost-slow.log | +---------------------+-------------------------------------+ 2 rows in set (0.01 sec) mysql> show variables like 'log_output'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | FILE | +---------------+-------+ 1 row in set (0.01 sec)
如果沒有為慢查詢日誌檔案指定檔名,預設檔名為host_name-slow.log。除非使用絕對路私名指定不同的目錄否則將在資料目錄下建立預設檔案。
為了禁用或啟用慢查詢日誌或在執行時改變日誌檔名,使用全域性的slow_query_log和slow_query_log_file系統變數。設定slow_query_log為0(或OFF)來禁用日誌,設定為1(或ON)來啟用日誌。設定slow_query_log_file來指定日誌檔名。如果一個日誌檔案已經開啟 ,它將關閉再開啟新檔案。
當慢查詢日誌被啟用時,伺服器將輸出寫入到由--log-output選項或log_output系統變數所指定的任何目錄中。如果啟用了日誌,伺服器開啟日誌檔案並將啟動資訊寫入檔案中。然而,除非FILE日誌目錄被選擇否則查詢的進一步日誌不會記錄在檔案中。如果目錄為NONE,即使慢查詢日誌被啟用也不會記錄查詢。如果日誌目錄不包含FILE,設定日誌檔名不會影響日誌功能。
如果使用--log-short-format選項,伺服器會寫少量資訊到慢查詢日誌中。
為了在寫入到慢查詢日誌中的語句中包含慢速管理語句,使用log_slow_admin_statements系統變數。管理語句包括alter table,
analyze table,check table,create index, drop index,optimizer table和repair table。
為了將不使用索引的語句寫入慢查詢日誌中,可以啟用log_queries_not_using_indexes系統變數。當這樣的查詢被寫入時,慢查詢日誌可能增長很快。透過設定log_throttle_queries_not_using_indexes系統變數來對這些查詢設定速率限制是有可能的。預設情況下,這個變數為0,這意味著沒有限制。正值對不使用索引的查詢的日誌記錄施加了每分鐘的限制。第一個這樣的查詢開啟一個60秒的視窗,在這個視窗內,伺服器將查詢記錄到給定的限制,然後抑制其他查詢。如果在視窗結束時存在被抑制的查詢,伺服器將記錄一個摘要,指出有多少查詢以及在這些查詢中花費的累計時間。當伺服器記錄下一個不使用索引的查詢時,下一個60秒視窗開始。
伺服器按照以下順序使用控制引數來決定是否向慢速查詢日誌寫入查詢:
1.查詢必須不是管理語句或者log_slow_admin_statements必須被啟用。
2.查詢必須至少花了long_query_time所設定的秒數或者啟用log_queries_not_using_indexes和沒有使用索引的查詢
3.查詢必須至少檢查了min_examined_row_limit所設定的行數。
4.根據log_throttle_queries_not_using_indexes設定必須不能被禁止。
log_timestamps系統變數控制著寫入慢查詢日誌(通用查詢日誌和錯誤日誌也一樣)中資訊所包含的時間戳中的時區資訊。它不會影響寫入通用查詢日誌和寫入日誌表中慢查詢日誌資訊中的時區資訊,但從這些日誌表中檢索資料透過使用convert_tz()或透過設定time_zone系統變數可以從本地系統時區轉換成你所期待的任何時區。
所有日誌行都包含一個時間戳。
伺服器不會將由查詢快取處理的查詢寫入慢速查詢日誌,也不會將由於表只有零行或一行而無法從索引中獲益的查詢寫入慢速查詢日誌。
預設情況下,複製從伺服器不會將複製的查詢寫入慢速查詢日誌。為了改變這種行為,可以使用log_slow_slave_statements系統變數。
寫入慢速查詢日誌的語句中的密碼由伺服器重寫,不會以明文形式出現。
慢速查詢日誌可用於查詢執行時間較長的查詢,因此可以進行最佳化。然而,檢查一個長的慢查詢日誌可能成為一項困難的任務。為了簡化這一過程,可以使用mysqldumpslow命令處理一個慢速查詢日誌檔案,以總結日誌中出現的查詢
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2871748/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql之 slow log 慢查詢日誌MySql
- MySQL:慢查詢日誌MySql
- MySQL:慢SQL(slow_log)MySql
- 關於MySQL 通用查詢日誌和慢查詢日誌分析MySql
- mysql慢查詢和錯誤日誌分析MySql
- Mysql慢查詢日誌檔案轉ExcelMySqlExcel
- MySQL慢查詢日誌相關設定MySql
- 對 MySQL 慢查詢日誌的簡單分析MySql
- 如何在MySQL中開啟慢查詢日誌?MySql
- ntpdate會導致mysql slow query log出現很大的query timeMySql
- 【趙渝強老師】MySQL的慢查詢日誌MySql
- 慢查詢日誌開啟分析
- 資料庫MySQL一般查詢日誌或者慢查詢日誌歷史資料的清理資料庫MySql
- MySQL 通用查詢日誌MySql
- Redis慢查詢日誌學習功能Redis
- MySQL 慢查詢分析工具~pt-query-digest 詳解MySql
- 筆記 mongo查詢慢日誌,建立索引筆記Go索引
- MySQL慢查詢MySql
- MySQL 慢查詢MySql
- 如何啟用Hibernate慢查詢日誌? -Vlad Mihalcea
- ELK收集mysql_slow.logMySql
- 【ElasticSearch】給ElasticSearch資料庫配置慢查詢日誌Elasticsearch資料庫
- MySQL重做日誌(redo log)MySql
- mysql開啟慢日誌MySql
- MySQL慢日誌優化MySql優化
- mysql 鎖的慢日誌MySql
- MySQL慢日誌全解析MySql
- MySQL的general_log和slow_logMySql
- coca SLOW QUERY
- 定位apache慢請求神器—mod_log_slowApache
- 【Mysql】三大日誌 redo log、bin log、undo logMySql
- Log2Net日誌查詢網站程式碼解析網站
- laravelS 記錄accesslog日誌,服務慢查詢預警Laravel
- MySQL 慢查詢優化MySql優化
- mysql5.7 慢日誌配置MySql
- Mysql 慢日誌分析工具MysqldumpslowMySql
- 如何使用 MySQL 慢查詢日誌進行效能優化 - Profiling、mysqldumpslow 例項詳解MySql優化
- MySQL 慢查詢那點事MySql