MySQL之慢查询日志
慢查询日志定义
- 慢查询日志是MySQL提供的一种日志记录,用来记录响应时间超过阀值的SQL语句。
- 如果某条SQL语句运行时间超过long_query_time设定的值,就会被记录到慢查询日志中。
- long_query_time的默认值为 10(10秒)
- 由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条sql执行超过5秒钟,我们就算慢SQL,希望能 收集超过5秒的sql,结合之前explain进行全面分析
使用
默认情况下,MySQL 数据库没有开启慢查询日志
,需要我们手动来设置这个参数
如果不是调优需要的话,一般不建议启动该参数
,因为开启慢查询日志会将SQL语句写入日志,因此或多或少带来一定的性能影响。
SQL语句 | 说明 |
---|---|
SHOW VARIABLES LIKE ‘%slow_query_log%’ | 查看慢查询日志是否开启(默认OFF) |
set global slow_query_log=1 | 开启慢查询日志 |
set global slow_query_log=0 | 关闭慢查询日志 |
SHOW VARIABLES LIKE ‘long_query_time%’ | 查看慢查询设定阈值(默认10秒) |
set long_query_time=5 | 设定慢查询阈值为5秒 (单位:秒 ) |
注意:
- set global slow_query_log=1开启慢查询日志,仅对当前数据库生效,MySQL重启后失效。
- 如果需要永久生效,则需要修改
my.ini
配置文件,在[mysqld]
下增加slow_query_log = 1
、slow_query_log_file = G:\Programs\mysql-8.0.18\data\layman-slow.log
、long_query_time = 5
和log_output = FILE
(和数据库查询的一致)
永久配置
[mysqld]
#开启慢查询
slow_query_log = 1
#设置日志路径
slow_query_log_file = G:\Programs\mysql-8.0.18\data\layman-slow.log
#设置慢查询阈值为5秒
long_query_time = 5
log_output = FILE
日志分析工具
生产环境中手工查找,分析日志,非常的耗费时间,因此MySQL提供了日志分析工具mysqldumpslow
帮助信息
简单实用案例
--获取返回集最多的10条SQL
mysqldumpslow -s r -t 10 G:\Programs\mysql-8.0.18\data\layman-slow.log
--获取访问次数最多的10条SQL
mysqldumpslow -s c -t 10 G:\Programs\mysql-8.0.18\data\layman-slow.log
--获取按时间排序的前10条含有LEFT JOIN的SQL语句
mysqldumpslow -s t -t 10 -g "LEFT JOIN" G:\Programs\mysql-8.0.18\data\layman-slow.log
--结合|more使用,否则有可能会爆屏
mysqldumpslow -s r -t 10 G:\Programs\mysql-8.0.18\data\layman-slow.log |more