慢日志
-
MySQL的慢查詢日志是MySQL提供一種日志記錄,它用來記錄MySQL中響應時間超過閾值的語句具體指運行時間超過long_query_time值的SQL,則會被記錄到慢日志中
具體指運行時間超過long_query_time值得SQL,則會被記錄到慢查詢日志中,long_query_time值默認為10,意思是運行10秒以上的語句。
-
由他來查看哪些SQL超出了我們最大忍耐時間值,比如一條sql執行超過5秒鍾,我們就算慢SQL,希望能收集超過5秒sql,結合之前explain進行全面分析。
-
默認情況下,MySQL沒有開啟慢日志,需要手動設置這個參數。當然如果不是調優需要,一般不建議啟動參數,因為開啟慢日志會或多或少帶來一定性能影響,慢查詢日志支持將日志記錄寫入文件。
-
查看是否開啟慢日志:默認情況下slow_query_log關閉的
show variables like "%slow_query_log%";
-
開啟慢日志:
1.終端開啟: set global slow_query_log=1; 但是這樣開啟,只是只對當前數據庫生效,重啟數據庫MySQL 則會失效 2.永久啟動慢日志: 修改配置文件:my.cnf [mysqld]下增加或修改參數: slow_query_log=1 slow_query_log_file=/var/lib/mysql/{host_name}-slow.log
-
-
查看慢日志記錄的閾值:默認long_query_time =10秒
show variables like 'long_query_time%';
-
修改閥值:
1.終端修改: # 更改閥值為3秒 set global long_query_time=3; 需要注意的是,設置完慢sql的閥值,需要關閉窗口,重新進入窗口,輸入下面命令查看是否成功設置: show global variables like "long_query_time"; 2.永久配置慢日志閾值: slow_query_log=1; slow_query_log_file=路徑 long_query_time=3; log_output=FILE
-
-
慢日志文件記錄:
-
先模擬一條查詢的慢SQL語句:
select sleep(4); -
進入慢日志查看:

Query_time 執行時間 use 當前庫 SET timestamp 當前時間戳 導致問題sql語句 -
查看慢日志條數:
show global status like 'Slow_queries%';
-
mysqldumpslow 日志分析工具
-
在生產環境中,如果手工分析日志,查找,分析SQL,顯然是個體力活,MySQL提供了日志分析工具mysqldumpslow
-
這里在lInux系統操作:我們先看看mysqldumpslow給我們提供了什么方法
[root@VM_0_2_centos ~]# mysqldumpslow --help Parse and summarize the MySQL slow query log. Options are --verbose verbose --debug debug --help write this text to standard output -v verbose -d debug -s ORDER what to sort by (al, at, ar, ae, c, l, r, e, t), 'at' is default al: average lock time ar: average rows sent at: average query time c: count l: lock time r: rows sent t: query time -r reverse the sort order (largest last instead of first) -t NUM just show the top n queries -a don't abstract all numbers to N and strings to 'S' -n NUM abstract numbers with at least n digits within names -g PATTERN grep: only consider stmts that include this string -h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard), default is '*', i.e. match all -i NAME name of server instance (if using mysql.server startup script) -l don't subtract lock time from total time -
常用方法:
s:表示按照何種方式排序 c: 訪問次數 l: 鎖定時間 r: 返回記錄 t: 查詢時間 al: 平均鎖定時間 ar: 平均返回記錄數 at: 平均查詢時間 t: 即為返回前面多少條數據 g: 后邊搭配一個正則匹配模式,大小寫不敏感的 -
案例:
# 得到返回記錄集最多的10個SQL mysqldumpslow -s r -t 10 /var/lib/mysql/VM_0_2_centos-slow.log # 得到訪問次數最多的10個SQL mysqldumpslow -s c -t 10 /var/lib/mysql/VM_0_2_centos-slow.log # 得到按照時間排序的前10條里面含有左連接的查詢語句 mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/VM_0_2_centos-slow.log # 另外建議在使用這些命令時結合 | 和 more 使用,否則有可能出現爆屏現象 mysqldumpslow -s r -t 10 /var/lib/mysql/VM_0_2_centos-slow.log | more
