MySQL 慢查詢日志深入理解
什么是慢查詢日志
MySQL的慢查詢日志是 MySQL提供的一種日志記錄,它用來記錄在 MySQL 中響應時間超過閥值的語句,具體指運行時間超過long_query_time 值的 SQL,則會被記錄到慢查詢日志中
具體指運行時間超過 long_query_time 值的 SQL,則會被記錄到慢查詢日志中。long_query_time 的默認值為 10, 意思是運行 10 秒以上的語句
由它來查看哪些 SQL 超出了我們的最大忍耐時間值,比如一條SQL執(zhí)行超過 5 秒鐘,我們就算慢 SQL,希望能收集超過 5 秒的SQL,結合之前explain進行全面分析
默認情況下,MySQL 數據庫沒有開啟慢査詢日志,需要我們手動來設置這個參數。當然,如果不是調優(yōu)需要的話,一般不建議啟動該參數,因為開啟慢查詢日志會或多或少帶來一定的性能影響。慢査詢日志支持將日志記錄寫入文件!
如何開啟慢查詢
查看開啟狀態(tài)
SHOW VARIABLES LIKE '%slow_query_log%'
開啟慢查詢
set global slow_query_log = 1
使用 set global_slow_query_log = 1 開啟了慢查詢日志只對當前數據庫生,如果 MYSQL 重啟后則會失效。
如果要永久生效,就必須修改配置文件 my.cnf(其它系統(tǒng)變量也是如此)修改 my.cnf 文件,[mysqld]下增加或修改參數
slow_query_log 和 slow_query_log_file 后,然后重啟 MySQL 服務器。也即將如下兩行配置進my.cnf文件
slow_query_log =1 slow_query_log_file=/var/lib/mysql/tim-slow.log
關于慢查詢的參數 slow_query_log_fie,它指定慢查詢日志文件的存放路徑,系統(tǒng)默認會給一個缺省的文件host_name-slow.log(如果沒有指定參數 slow_query_log_file的話)
那么開啟慢查詢日志后,什么樣的SQL參會記錄到慢查詢里面?
通過 show variables like ‘long_query_time%' 來查看默認時間長度,單位是秒:
同樣的,可以使用命令修改,也可以在my.cnf里面配置。假如運行時間正好等于 long_query_time 的情況,并不會被記錄下來。也就是說,在MySQL源碼里是判斷大于 long_query_time,而非大于等于!
設置記錄的閾值:
set global long_query_time=3;
同樣的,可以使用命令修改,也可以在my.cnf里面配置。假如運行時間正好等于 long_query_time 的情況,并不會被記錄下來。也就是說,在MySQL源碼里是判斷大于 long_query_time,而非大于等于!
設置記錄的閾值:
set global long_query_time=3;
設置了但是還是沒有發(fā)生更改?為什么?此時需要重新開啟一個會話才可以:
接下來實行一個較慢的查詢,如下圖,但是記得要在配置文件中做如下配置:
接著去日志文件中查看存在哪些超過閾值的SQL就好了:
查詢當前系統(tǒng)中有多少條慢查詢記錄:
記載一下我的配置文件
slow_query_log=1; slow_query_log_file=/var/lib/mysql/tim-slow.log; long_query_time=3; log_output=FILE
日志分析工具mysqldumpshow
在生產環(huán)境中,如果要手工分析日志,查找、分析 SQL,顯然是個體力活,MYSQL 提供了日志分析工具mysqldumpshow
- s:是表示按何種方式排序
- c:訪問次數
- l:鎖定時間
- r:返回記錄
- t:查詢時間
- al:平均鎖定時間
- ar:平均返回記錄數
- at:平均查詢時間
- t:即為返回前面多少條的數據
- g:后邊搭配一個正則匹配模式,大小寫不敏感的
下面是使用示例:
得到返回記錄集最多的 10 個 SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/tim-slowlog
得到訪問次數最多的 10 個 SQL
mysqldumpslow -s c-t 10 /var/lib/mysql/tim-slow log
得到按照時間排序的前 10 條里面含有左連接的查詢語句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/tim-slowlog
另外建議在使用這些命令時結合和 more 使用,否則有可能出現爆屏情況
mysqldumpslow -s r -t 10 /var/lib/mysq/tim-slow.log | more
以上就是MySQL 慢查詢日志深入理解的詳細內容,更多關于MySQL 慢查詢日志的資料請關注本站其它相關文章!
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯系alex-e#qq.com處理。