1. 慢查詢日志的作用
慢查詢日志默認不開啟,建議手動開啟,方便我們定位線上問題,
執行時間超過閾值的SQL會被寫入到慢查詢日志當中,這樣可以幫助我們記錄執行時間過長的SQL陳述句,定位線上慢SQL問題,方便我們進行SQL性能調優,
2. 慢查詢日志的配置
2.1 查看是否開啟了慢查詢日志
show variables like 'slow_query_log';

默認是OFF,不開啟,可以手動開啟,
2.2 開啟慢查詢日志
一種方法是可以使用MySQL命令開啟:
set global slow_query_log=1;

另一種方法是修改MySQL組態檔,重新MySQL服務后,開啟,
修改組態檔my.cnf,加入下面一行命令
slow_query_log = ON
2.3 設定慢查詢日志的閾值
慢查詢日志的閾值默認是10,單位是秒,
對于線上服務來說,10秒太長了,我們可以手動修改,

一種是通過MySQL命令修改,比如修改為1秒:
set long_query_time=1;

另一種方法是修改MySQL組態檔,重新MySQL服務后,開啟,
修改組態檔my.cnf,加入下面一行命令
long_query_time = 1
2.4 修改慢查詢日志位置
使用MySQL命令查看慢查詢日志位置:
show variables like '%slow_query_log_file%';

想要修改慢查詢日志位置,可以修改MySQL組態檔,重新MySQL服務后,開啟,
修改組態檔my.cnf,加入下面一行命令
slow_query_log_file = /usr/local/mysql/data/localhost_slow.log
2.5 記錄更多慢查詢SQL
默認情況下管理陳述句是不會被記錄到慢查詢日志中,管理陳述句包括ALTER TABLE、 ANALYZE TABLE、 CHECK TABLE、 CREATE INDEX、 DROP INDEX、 OPTIMIZE TABLE和 REPAIR TABLE等,

管理陳述句也是非常重要的,如果想要被記錄,可以通過MySQL命令修改:
set global log_slow_admin_statements=ON;

默認情況下,不使用索引的陳述句,也是不會被記錄的,
夠坑人吧!一不留神就掉坑里了,不記錄不使用索引的陳述句,還要慢查詢日志干嘛?

想要記錄不使用索引的陳述句,可以通過命令修改:
set global log_queries_not_using_indexes=ON;

3. 慢查詢日志的使用
手動造一條慢SQL,測驗一下效果,user表中有100萬表資料:
select * from user;
然后看一下慢查詢日志檔案的內容:
cat /usr/local/mysql/data/localhost_slow.log

SQL陳述句和執行時間都被記錄了,
4. 分析慢查詢日志
有時候慢查詢日志較多,手動查看起來并不是很方便,好在MySQL提供了分析慢查詢日志的工具mysqldumpslow,
常用引數有
-s: 表示按何種方式排序:
c: 訪問次數
l: 鎖定時間
r: 回傳記錄
t: 查詢時間
al: 平均鎖定時間
ar: 平均回傳記錄數
at: 平均查詢時間
-t: 回傳前面多少條的資料;
4.1 查詢回傳結果最多的10條SQL:
mysqldumpslow -s r -t 10 /usr/local/mysql/data/localhost_slow.log

4.2 查詢耗時最長的10條SQL:
mysqldumpslow -s t -t 10 /usr/local/mysql/data/localhost_slow.log

文章持續更新,可以微信搜一搜「 一燈架構 」第一時間閱讀更多技術干貨,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/501128.html
標籤:MySQL
