MySQL慢查詢和慢查詢日志分析


在實際生產環境中,可能因為開發寫了不正確的SQL語句,索引優化的不好,或其他查詢操作而導致數據庫整體性能下降。

我們只需要分析一下慢查詢日志就會知道問題出在哪兒。

登錄數據庫:

$:mysql -u*** -p****

查看是否啟用慢日志記錄和狀態:

mysql>show variables like "%slow%";

+---------------------+----------------------------+
| Variable_name | Value |
+---------------------+----------------------------+
| log_slow_queries | ON |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /data/dbdata/frem-slow.log |
+---------------------+----------------------------+
4 rows in set (0.00 sec)

如上所示,表面數據庫已經啟用了慢查詢記錄和日志,slow_query_log_file:/data/dbdata/frem-slow.log這是記錄的日志。

/mysql/bin/mysqldumpslow 為慢查詢日志分析工具,詳細用法:

$:mysql/bin/mysqldumpslow -help

Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]

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, c, l, r, 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 #只顯示指定的行數,等同於SQL的limit
-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


按查詢行數排序,並取10行排序
mysqldumpslow -s r -t 10 /data/dbdata/frem-slow.log

按查詢時間排序,並取20行排序

mysqldumpslow -s t -t 10 /data/dbdata/frem-slow.log


其他的就可以舉一反三啦,加上相應參數就可以了。




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com