關於MySQL慢查詢日誌分析

2021-08-20 06:23:38 字數 2338 閱讀 8182

慢查詢日誌

mysql的慢查詢日誌是mysql提供的一種日誌記錄,用來記錄在mysql中響應時間超過閾值的語句,具體指執行時間超過long_query_time值的sql,則會被記錄到慢查詢日誌中(日誌可以寫入檔案或者資料庫表,如果對效能要求高的話,建議寫檔案)。預設情況下,mysql資料庫是不開啟慢查詢日誌的,long_query_time的預設值為10(即10秒,通常設定為1秒),即執行10秒以上的語句是慢查詢語句。

一般來說,慢查詢發生在大表(比如:乙個表的資料量有幾百萬),且查詢條件的字段沒有建立索引,此時,要匹配查詢條件的字段會進行全表掃瞄,耗時查過long_query_time,

則為慢查詢語句。

慢查詢日誌的開啟設定

1)修改配置檔案my.cnf,在[mysqld]下的下方加入

[

mysqld

]slow_query_log =on

slow_query_log_file

=/usr/local/mysql/data/slow.log

long_query_time =1

2)重啟mysql服務

service mysqld restart
問題:如何檢視當前慢查詢日誌的開啟情況?在mysql中輸入命令:

主要掌握以下的幾個引數:

(1)slow_query_log的值為on為開啟慢查詢日誌,off則為關閉慢查詢日誌。

(2)slow_query_log_file的值是記錄的慢查詢日誌到檔案中(注意:預設名為主機名.log,慢查詢日誌是否寫入指定檔案中,需要指定慢查詢的輸出日誌格式為檔案,相關命令為:show variables like 『%log_output%』;去檢視輸出的格式)。

(3)long_query_time指定了慢查詢的閾值,即如果執行語句的時間超過該閾值則為慢查詢語句,預設值為10秒。

(4)log_queries_not_using_indexes如果值設定為on,則會記錄所有沒有利用索引的查詢(注意:如果只是將log_queries_not_using_indexes設定為on,而將slow_query_log設定為off,此時該設定也不會生效,即該設定生效的前提是slow_query_log的值設定為on),一般在效能調優的時候會暫時開啟。

通過log_output的值可以檢視到輸出的格式,上面的值為table。當然,我們也可以設定輸出的格式為文字,或者同時記錄文字和資料庫表中,設定的命令如下:

#慢查詢日誌輸出到表中(即mysql.slow_log)

set globallog_output=』table』;

#慢查詢日誌僅輸出到文字中(即:slow_query_log_file指定的檔案)

setglobal log_output=』file』;

#慢查詢日誌同時輸出到文字和表中

setglobal log_output=』file,table』;  

關於慢查詢日誌的表中的資料個文字中的資料格式分析:

慢查詢的日誌記錄myql.slow_log表中,格式如下:

慢查詢的日誌記錄到hostname.log檔案中,格式如下:

可以看到,不管是表還是檔案,都具體記錄了:是那條語句導致慢查詢(sql_text),該慢查詢語句的查詢時間(query_time),鎖表時間(lock_time),以及掃瞄過的行數(rows_examined)等資訊。

問題:如何查詢當前慢查詢的語句的個數?

在mysql中有乙個變數專門記錄當前慢查詢語句的個數:

輸入命令:show global status like 『%slow%』;

注意:上述所有命令,如果都是通過mysql的shell將引數設定進去,如果重啟mysql,所有設定好的引數將失效,如果想要永久的生效,需要將配置引數寫入my.cnf檔案中)。

關於MySQL慢查詢日誌分析

方法 設定慢查詢日誌存放的位置 set global slow query log file var lib mysql test 10 226 slow.log 報錯 error 1231 42000 variable slow query log file can t be set to the...

mysql慢查詢日誌分析

mysql 有乙個功能就是可以log下來執行的比較慢的sql語句,預設是沒有這個log的,為了開啟這個功能,要修改my.cnf或者在mysql啟動的時候加入一些引數。如果在my.cnf裡面修改,需增加如下幾行 long query time 10 log slow queries long quer...

mysql慢查詢日誌分析

我喜歡做一些系統效能優化事情,覺得這樣有種成就感,實現了自己的價值。所以經常到系統上去top netstat uptime看看系統執行的狀況。今天我對mysql資料庫進行索引建立。mysql的慢查詢日誌是我部署環境時就開啟了的。mysqldumpslow是對慢查詢日誌進行統計的工具,講一下有用的引數...