1.1. 什么是慢查詢
慢查詢日志,顧名思義,就是查詢慢的日志,是指mysql記錄所有執行超過long_query_time參數設定的時間閾值的SQL語句的日志。該日志能為SQL語句的優化帶來很好的幫助。默認情況下,慢查詢日志是關閉的,要使用慢查詢日志功能,首先要開啟慢查詢日志功能。
1.2. 慢查詢配置
1.2.1. 慢查詢基本配置
- 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
1.2.2. 實操:
通過下面命令查看下上面的配置:
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' --項目開發中日志只能記錄在日志文件中,不能記表中
設置完成后,查詢一些列表可以發現慢查詢的日志文件里面有數據了。
但是在我的電腦上,不知道為啥,這個時間總是不能正常的執行sql結果。更新不了;
所以我們用這樣的方法就可以了:
找到my.cnf,添加如下內容
# 添加慢查詢日志 log_output=file slow_query_log=on slow_query_log_file = /tmp/mysql-slow.log log_queries_not_using_indexes=on long_query_time = 1
1.3. 慢查詢分析
慢查詢的日志記錄非常多,要從里面找尋一條查詢慢的日志並不是很容易的事情,一般來說都需要一些工具輔助才能快速定位到需要優化的SQL語句,下面介紹兩個慢查詢輔助工具
1.3.1. 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 要安裝一個程序,這個是prel命令,具體的可以參考
https://jingyan.baidu.com/article/9f7e7ec0b798ae6f281554e9.html