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服務后網站日志在線分析工具,開啟。
修改配置文件f,加入下面一行命令
= ON
2.3 設置慢查詢日志的閾值
慢查詢日志的閾值默認是10,單位是秒。
對于線上服務來說,10秒太長了,我們可以手動修改。
一種是通過MySQL命令修改,比如修改為1秒:
set long_query_time=1;
復制代碼
另一種方法是修改MySQL配置文件,重新MySQL服務后,開啟。
修改配置文件f,加入下面一行命令
= 1
2.4 修改慢查詢日志位置
使用MySQL命令查看慢查詢日志位置:
show variables like '%slow_query_log_file%';
復制代碼
想要修改慢查詢日志位置,可以修改MySQL配置文件網站日志在線分析工具,重新MySQL服務后,開啟。
修改配置文件f,加入下面一行命令
= /usr/local/mysql/data/.log
2.5 記錄更多慢查詢SQL
默認情況下管理語句是不會被記錄到慢查詢日志中,管理語句包括ALTER TABLE、 TABLE、 CHECK TABLE、 INDEX、 DROP INDEX、 TABLE和 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提供了分析慢查詢日志的工具。
常用參數有
-s: 表示按何種方式排序:
c: 訪問次數
l: 鎖定時間
r: 返回記錄
t: 查詢時間
al: 平均鎖定時間
ar: 平均返回記錄數
at: 平均查詢時間
-t: 返回前面多少條的數據;
4.1 查詢返回結果最多的10條SQL:
-s r -t 10 /usr/local/mysql/data/.log
4.2 查詢耗時最長的10條SQL:
-s t -t 10 /usr/local/mysql/data/.log