MySQL 慢查詢日誌

     慢查詢日誌概念mysql

     MySQL 的慢查詢日誌是 MySQL 提供的一種日誌記錄,它用來記錄在 MySQL 中查詢響應時間超過閾值的語句,具體指響應時間超過sql

long_query_time 值的 SQL,會被記錄到慢查詢日誌。long_query_time 的默認值是 10s,意思是查詢響應時間超過 10s 的 SQL語句。默數據庫

認狀況下,MySQL 是不開啓慢查詢日誌的,須要咱們手動設置這個參數值,固然,若是不是調優須要的話,通常不建議開啓慢查詢日誌,服務器

由於開啓慢查詢日誌或多或少會帶來必定性能的影響。慢查詢日誌支持將日誌記錄寫入日誌文件,也支持將日誌記錄寫入數據表。性能

    慢查詢日誌參數測試

   slow_query_log:表示是否開啓慢查詢日誌,OFF表示禁用,ON表示開啓3d

   slow_query_log_file:MySQL 慢查詢日誌存儲路徑。能夠不設置該參數,系統會默認給一個缺省值的文件host_name-slow.log日誌

   long_query_time:慢查詢時間閾值,默認狀況下值爲 10sblog

   log_queries_not_using_indexes:表示不使用索引的查詢超出 long_time_query 的值也會被記錄到日誌中,默認值是 OFF表示禁用索引

   log_output:表示存儲慢查詢日誌方式,log_output='FILE' 表示將日誌存入文件,log_output=‘TABLE’ 表示將日誌存入數據表 mysql.slow_log

                        。MySQL 同時支持兩種日誌存儲方式,配置的時候以逗號分隔開,如:log_output='FILE,TABLE'。通常狀況下建議將日誌記錄到

                       文件中,若是將日誌記錄到數據表中須要耗費更多系統資源

   慢查詢日誌配置

   默認狀況下,slow_query_log 是禁用的,能夠經過設置 slow_query_log 的值開啓,以下所示:

  

   開啓慢查詢日誌:

  

   使用 set global slow_query_log=1 開啓慢查詢日誌只對當前數據庫生效,若是 MySQL 重啓後則會失效。若是要永久生效,就須要修改配置文件

my.cnf(Linux 下的叫法),若是是 win 系統通常叫 my.ini,如以下所示:

   修改 my.ini 文件,增長或修改參數 slow_query_log 和 slow_query_log_file 後,而後重啓 MySQL 服務器,以下所示:

   

   

    

  如今已經開啓了慢查詢日誌,那麼什麼樣的 SQL 纔會被記錄到日誌中呢?這個就由 long_query_time 控制,默認狀況下 long_query_time 的值爲 10s,可

以使用命令修改,也能夠經過修改配置文件修改,對於運行時間恰好等於 long_query_time 的狀況是不會被記錄下來的,以下:

   

   修改 long_query_time 值

   

   執行修改操做以後,須要從新鏈接或打開一個會話才能看到修改的值 或者 使用 show global variable like '%long_query_time%' 查看

   咱們來測試一下,在 MySQL 中執行下面 SQL 語句,而後咱們去檢查對應的慢日誌:

   

   log_output 是用來指定存儲日誌的方式,操做以下:

   

    設置慢日誌存儲方式:

    

    執行 select sleep(10); 以下所示:

    

    

    系統變量 log_queries_not_using_indexes 未使用索引的查詢也會被記錄到慢日誌中,若是調優的話,建議開啓這個選項,開啓這個選項後 index full scan 的sql 也會被記錄到日誌中

    

    

     

     這個開啓以後慢查詢日誌可能會增加的很快,能夠設定 log_throttle_queries_not_using_indexes 變量來限制,默認值是 0,也就是不限制,若是該變量

值大於 0 如:log_throttle_queries_not_using_indexes = 100 表示每秒記錄100條不使用索引的 SQL 語句到慢查詢日誌中

    默認狀況下,管理類的 SQL 語句也不會被記錄到慢查詢日誌中,log_slow_admin_statements 變量表示是否將管理類的 SQL 語句記錄到慢查詢日中,管理

類的 SQL 語句包含:ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE

    MySQL 的從庫默認不記錄慢查詢,若是要開啓從庫的慢查詢須要設定 log_slow_slave_statements

    若是要查詢有多少條慢查詢記錄,可使用系統變量,以下:

   

相關文章
相關標籤/搜索