mysql:慢查詢日誌
對於MySQL性能調優,通常而言有兩種情況.其一是單條查詢語句有問題,導致大幅拖慢查詢速度,契爾氏服務器出現問題,諸如內存耗盡網絡異常磁盤耗盡等情況.這時候我們就需要去定位.在<高性能mysql>一書中作者給出兩種技術來定位問題:
1 通過高頻率調用SHOW GLOBAL STATUS/SHOW PROCESSLIST這兩類命令通過參數來觀察數據發生了上面.
2 來查看慢查詢日誌數據庫吞吐量發生的變化
在這裏本文將對慢查詢日誌的使用進行一次實踐,用來學習慢查詢日誌的使用
—
慢查詢日誌的開啓和關閉
默認情況下slow_query_log的值爲OFF,表示慢查詢日誌是禁用的,可以通過設置slow_query_log的值來開啓,如下所示:
使用set global slow_query_log=1開啓了慢查詢日誌只對當前數據庫生效,MySQL重啓後則會失效.只有通過修改配置文件(通常是my.cnf),才能共永久儲存.通常情況下的調試我推薦使用命令行來修改,這樣對於查詢更爲簡單,在查看問題之後也更容易容易關閉而不需要重啓服務器.
由參數long_query_time,如果查詢比這個參數慢.則會被記錄在日誌中.默認情況下long_query_time的值爲10秒,可以使用命令修改,也可以在my.cnf參數裏面修改.從MySQL 5.1開始,long_query_time開始以微秒記錄SQL語句運行時間,之前僅用秒爲單位記錄.如果記錄到表裏面,只會記錄整數部分,不會記錄微秒部分.
同樣的這個參數可以通過查詢修改,也可以通過配置文件修改.而查詢修改在重啓後會失效.
log_output 參數是指定日誌的存儲方式。log_output=’FILE’表示將日誌存入文件,默認值是’FILE’。log_output=’TABLE’表示將日誌存入數據庫,這樣日誌信息就會被寫入到mysql.slow_log表中。MySQL數據庫支持同時兩種日誌存儲方式,配置的時候以逗號隔開即可,如:log_output=’FILE,TABLE’。日誌記錄到系統的專用日誌表中,要比記錄到文件耗費更多的系統資源,因此對於需要啓用慢查詢日誌,又需要能夠獲得更高的系統性能,那麼建議優先記錄到文件.
系統變量log-queries-not-using-indexes:未使用索引的查詢也被記錄到慢查詢日誌中(可選項)。如果調優的話,建議開啓這個選項。另外,開啓了這個參數,其實使用full index scan的sql也會被記錄到慢查詢日誌。
如果你想查詢有多少條慢查詢記錄,可以使用系統狀態slow_queries
現在我們來查看慢查詢日誌
這個日誌比較簡單,英語好的人完全可以看懂,我個人認爲不需要解釋上面.
另外MySQL準備了分析工具mysqldumpslow;可以查閱[文章]
通過慢查詢日誌我們就可以找到對已經的那些語句是慢的語句了,我們可以想辦法優化這些語句,或者乾脆通過去掉這些查詢.