慢查询是什么
Mysql的慢查询日志是Mysql提供的一种日志记录,它用来记录在Mysql中响应时间超过阀值的语句。
具体指运行时间超过long_query_time值的sql,则会被记录到慢查询日志中。long_query_time默认是10s。
如何玩
默认情况下,Mysql数据库没有开启慢查询日志,需要我们手动来设置这个参数。
当然,如果不是调优需要的话,一般不建议启动该参数,因为慢查询日志会或多或少代来一些性能影响。慢查询日志支持将日志记录写入文件。
查看当前是否开启
1 2 3 4 5 6
| mysql> SHOW VARIABLES LIKE '%slow_query_log%';
Variables_name | Value slow_query_log | OFF slow_query_log_file | /var/lib/mysql/slow.log 2 rows in set (0.00 sec)
|
开启
1 2 3 4 5 6 7 8 9
| # 使用以下语句只对当前数据库生效,mysql重启后则失效 set global_slow_query_log=1;
# 永久生效,修改配置文件my.cnf(增加或修改以下两个字段) # 如果没有指定 slow_query_log_file,系统默认host_name-slow.log # 重启mysql服务。 [mysqld] slow_query_log=1 slow_query_log_file=/var/lib/mysql/slow.log
|
参数修改
1 2 3 4 5 6 7 8 9 10 11
| # 默认查询时间超过这个参数的时间,就会被记录到慢查询日志中。默认为10s mysql> SHOW VARIABLES LIKE 'long_query_time%';
long_query_time | 10.000000
# 可以通过set 在当前数据库生效,mysql重启后失效。也可以在my.cnf中修改。
set global long_query_time=3;
注: 此时需要重新开一个会话才能看到修改的值。
|
模拟慢查询
1 2
| # 模拟一个4s的查询sql select sleep(4);
|
日志分析工具
mysqldumpslow
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| mysqldumpslow --help
-s: 是表示访问按照何种方式排序 c: 访问次数 l: 锁定时间 r: 返回记录数 t: 查询时间
al: 平均锁定时间 ar: 平均返回记录数 at: 平均查询时间
-t: 即为返回前边多少条的数据 -g: 后边搭配一个正则匹配模式,大小写不敏感
|
常用场景
1 2 3 4 5 6 7 8 9 10 11
| # 得到返回记录集最多的10个SQL mysqldumpslow -s r -t 10 /var/lib/mysql/host_name-slow.log
# 得到访问次数最多的10个SQL mysqldumpslow -s c -t 10 /var/lib/mysql/host_name-slow.log
# 得到按照时间排序的前10条里边含有做链接的查询语句 mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/host_name-slow.log
# 建议在使用这些命令时结合| 和 more 使用,否则可能出现爆屏 mysqldumpslow -s r -t 10 /var/lib/mysql/host_name-slow.log | more
|