慢查詢日志,顧名思義,就是查詢慢的日志,是指mysql記錄所有執行超過long_query_time參數設定的時間閾值的SQL語句的日志。該日志能為SQL語句的優化帶來很好的幫助。默認情況下,慢查詢日志是關閉的,要使用慢查詢日志功能,首先要開啟慢查詢日志功能。
慢查詢基本配置
slow_query_log 啟動停止技術慢查詢日志
slow_query_log_file 指定慢查詢日志得存儲路徑及文件(默認和數據文件放一起)
long_query_time 指定記錄慢查詢日志SQL執行時間得伐值(單位:秒,默認10秒)
log_queries_not_using_indexes 是否記錄未使用索引的SQL
log_output 日志存放的地方【TABLE】【FILE】【FILE,TABLE】
配置了慢查詢后,它會記錄符合條件的SQL
包括:
查詢語句
數據修改語句
已經回滾得SQL
show VARIABLES like '%slow_query_log%' show VARIABLES like '%slow_query_log_file%' show VARIABLES like '%long_query_time%' show VARIABLES like '%log_queries_not_using_indexes%' show VARIABLES like 'log_output' set global long_query_time=0; ---默認10秒,這里為了演示方便設置為0 set GLOBAL slow_query_log = 1; --開啟慢查詢日志 set global log_output='FILE,TABLE' --項目開發中日志只能記錄在日志文件中,不能記表中 設置完成后,查詢一些列表可以發現慢查詢的日志文件里面有數據了。
第一行:用戶名 、用戶的IP信息、線程ID號
第二行:執行花費的時間【單位:毫秒】
第三行:執行獲得鎖的時間
第四行:獲得的結果行數
第五行:掃描的數據行數
第六行:這SQL執行的具體時間
第七行:具體的SQL語句
慢查詢分析
慢查詢分析工具
Mysqldumpslow
常用的慢查詢日志分析工具,匯總除查詢條件外其他完全相同的SQL,並將分析結果按照參數中所指定的順序輸出。
mysqldumpslow -s r -t 10 slow-mysql.log -s order (c,t,l,r,at,al,ar) c:總次數 t:總時間 l:鎖的時間 r:總數據行 at,al,ar :t,l,r平均數 【例如:at = 總時間/總次數】 -t top 指定取前面幾天作為結果輸出 mysqldumpslow.pl -s t -t 10 D:\test-slow.log
pt_query_digest
是用於分析mysql慢查詢的一個工具,與mysqldumpshow工具相比,py-query_digest 工具的分析結果更具體,更完善。
有時因為某些原因如權限不足等,無法在服務器上記錄查詢。這樣的限制我們也常常碰到。
perl .\pt-query-digest --explain h=127.0.0.1,u=root,p=root1234% D:\test-slow.log