mysql怎么开启慢查询(MySQL中慢查询配置及慢查询日志分析案例详解)
mysql怎么开启慢查询(MySQL中慢查询配置及慢查询日志分析案例详解)show_query_log_file=/usr/local/var/mysql/slow_query_log.log #慢查询日志存放目录slow_query_log=1 #开启慢查询已经开启,不过这个是临时开启,mysql重启后就会关闭需要修改MySQL的配置文件,一般默认/etc/my.cnf[mysqld]下增加或修改参数
MySQL慢查询- MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
- 具体指运行时间超过long_query_time值 的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。
- 查看哪些SQL超出了我们的最大忍耐时间值,比如一条sq|执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sq| 结合之前explain进行全面分析。
- 查看是否开启慢查询
mysql> show variables like "%low_query_log%";
在mysql默认关闭
默认情况下,MySQL中慢查询是没有开启的,一般情况下不建议开启,因为这个配置的开启,会影响mysql的性能。
- 如何配置及开启
- 临时开启
mysql> set global slow_query_log=1;
已经开启,不过这个是临时开启,mysql重启后就会关闭
- 永久开启
需要修改MySQL的配置文件,一般默认/etc/my.cnf
[mysqld]下增加或修改参数
slow_query_log=1 #开启慢查询
show_query_log_file=/usr/local/var/mysql/slow_query_log.log #慢查询日志存放目录
long_query_time=3 #设置慢查询阀值
log_output=FILE #慢查询文件的格式
配置完成后,需要重启mysql让其生效
- 慢查询阀值设置
查看默认的慢查询时长,这个是由参数long_query_time控制,默认值是10s
mysql>show variables like "%long_query_time%";
- 设置自己认为慢的阀值
mysql>set global long_query_time=3;
注意:我们发现设置了阀值,但是没有生效,不是没有生效,而是因为我们需要重新建立一次连接或重新打开一次会话才可以看到设置值。
重新建立连接发现已经变成我们自己设置的默认值
- 测试慢查询语句并查看慢查询产生的日志
解释:由于我这测试环境没有大数据了且没有超过5s以上执行的sql,我们就利用mysql中一个函数来测试。
#就是让这条sql休眠5s执行
mysql> select sleep(5);
- 查看慢查询产生的日志捕获情况
这就是慢查询日志捕获的执行超过阀值的sql语句
查看当前系统中有多少慢查询mysql>show global status like "%Slow_queries%";
可以作为mysql健康检查的一种查询方式
慢查询日志分许工具mysqldumpslow --help
--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
-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个SQL
mysqldumpslow-s r -t 10 /usr/local/var/mysql/Look-slow.log
- 得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /usr/local/var/mysql/Look-slow.log
- 得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow-s t-t 10 -g "left join" /usr/local/var/mysql/Look-slow.log
- 另外建议在使用这些命令时结合|和more使用,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /usr/local/var/mysql/Look-slow.log | more
点击关注发私信或评论交流文章中有问题的地方,相互学习和答疑