慢查詢日誌mysql
(1)是什麼sql
(2)怎麼玩數據庫
① 說明服務器
默認狀況下,MySQL數據庫沒有開啓慢查詢日誌,須要咱們手動來設置這個參數。
固然,若是不是調優須要的話,通常不建議啓動該參數,由於開啓慢查詢日誌會或多或少帶來必定的性能影響。慢查詢日誌支持將日誌記錄寫入文件session
②查看是否開啓及如何開啓工具
默認——SHOW VARIABLES LIKE '%slow_query_log%';性能
默認狀況下slow_query_log的值爲OFF,表示慢查詢日誌是禁用的,能夠經過設置slow_query_log的值來開啓
SHOW VARIABLES LIKE '%slow_query_log%';ui
開啓——set global slow_query_log=1;spa
使用set global slow_query_log=1開啓了慢查詢日誌只對當前數據庫生效,若是MySQL重啓後則會失效。3d
全局變量設置,對當前鏈接不影響
對當前鏈接馬上生效
若是要永久生效,就必須修改配置文件my.cnf(其它系統變量也是如此)
修改my.cnf文件,[mysqld]下增長或修改參數
slow_query_log 和slow_query_log_file後,而後重啓MySQL服務器。也即將以下兩行配置進my.cnf文件
slow_query_log =1
slow_query_log_file=/var/lib/mysql/atguigu-slow.log
關於慢查詢的參數slow_query_log_file ,它指定慢查詢日誌文件的存放路徑,系統默認會給一個缺省的文件host_name-slow.log(若是沒有指定參數slow_query_log_file的話)
③ 那麼開啓了慢查詢日誌後,什麼樣的SQL纔會記錄到慢查詢日誌裏面呢?
這個是由參數long_query_time控制,默認狀況下long_query_time的值爲10秒,
命令:SHOW VARIABLES LIKE 'long_query_time%';
可使用命令修改,也能夠在my.cnf參數裏面修改。
假如運行時間正好等於long_query_time的狀況,並不會被記錄下來。也就是說,
在mysql源碼裏是判斷大於long_query_time,而非大於等於。
④ Case
使用命令 set global long_query_time=1 修改成闕值到1秒鐘的就是慢sql
修改後發現long_query_time並無改變。兩個解決方案:
1) 須要從新鏈接或新開一個會話才能看到修改值。 SHOW VARIABLES LIKE 'long_query_time%';
2) 或者經過set session long_query_time=1來改變當前session變量;
查詢當前系統中有多少條慢查詢記錄
show global status like '%Slow_queries%';
⑤ 配置版
【mysqld】下配置:
slow_query_log=1;
slow_query_log_file=/var/lib/mysql/atguigu-slow.log
long_query_time=3;
log_output=FILE
(3)日誌分析工具mysqldumpslow
查看mysqldumpslow的幫助信息:mysqldumpslow --help
1 s: 是表示按照何種方式排序 2 c: 訪問次數 3 l: 鎖定時間 4 r: 返回記錄 5 t: 查詢行數 6 al:平均鎖定時間 7 ar:平均返回記錄數 8 at:平均查詢時間 9 t:即爲返回前面多少條的數據 10 g:後邊搭配一個正則匹配模式,大小寫不敏感的
工做經常使用參考
獲得返回記錄集最多的10個SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log
獲得訪問次數最多的10個SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/atguigu-slow.log
獲得按照時間排序的前10條裏面含有左鏈接的查詢語句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/atguigu-slow.log
另外建議在使用這些命令時結合 | 和more 使用 ,不然有可能出現爆屏狀況
mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log | more