龙空技术网

MySQL中慢查询配置及慢查询日志分析案例详解

互联网奇点 172

前言:

而今咱们对“mysql开启慢日志查询”都比较关怀,看官们都需要分析一些“mysql开启慢日志查询”的相关文章。那么小编也在网摘上收集了一些有关“mysql开启慢日志查询””的相关内容,希望姐妹们能喜欢,各位老铁们快快来学习一下吧!

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慢查询配置查看是否开启慢查询

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

点击关注发私信或评论交流文章中有问题的地方,相互学习和答疑

标签: #mysql开启慢日志查询