MySQL Slow Query

Enable Slow Query

MariaDB

  1. 开启了慢查询日志只对当前数据库生效,如果重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf
1
2
3
4
5
6
show variables  like '%slow_query_log%';
set global slow_query_log=1;

# 输出结果
slow_query_log ON
slow_query_log_file /var/log/mysql/mariadb-slow.log
  1. 慢查询时间阈值
1
2
3
4
show variables like 'long_query_time';

# 输出结果
long_query_time 2.000000
  1. 为了不影响数据性能,建议写日志到文件
1
2
3
# log_output变量用于指定日志的存储方式,这个变量有两个取值:FILE, TABLE,默认取值为FILE

show variables like 'log_output';

mysqldumpslow

  • t:返回前面多少条的数据
  • g:一个正则匹配模式,大小写不敏感
  • c:访问计数
  • l:锁定时间
  • r:返回记录
  • t:查询时间
  • al:平均锁定时间
  • ar:平均返回记录数
  • at:平均查询时间

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
#得到返回记录集最多的10个SQL。

mysqldumpslow -s r -t 10 log_path

#得到访问次数最多的10个SQL

mysqldumpslow -s c -t 10 log_path

#得到按照时间排序的前10条里面含有左连接的查询语句。

mysqldumpslow -s t -t 10 -g “left join” log_path

#另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。

Refer