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 '%slow_query_log%;
-
设置开启查询慢日志 : set global slow_query_log=1;
-
默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,
-
可以通过设置slowquery_log的值来开启
-
SHOW VARIABLES LIKE '%slow_query_log%';
-
使用set global slow_ query_ log=1开启了慢查询日志只对当前数据库生效,如果MySQL重启后则会失效。
- 如果要永久生效,就必须修改配置文件my.cnf (其它系统变量也是如此)
-
修改my.cnf文件,[mysqld]下 增加或修改参数
-
slow_ query_ _log 和slow_ _query_ _log_ file后, 然后重启MySQL服务器。也即将如下两行配置进my .cnf文件
-
slow query_ log =1
-
slow_ query_ log_ file=/var/lib/mysql/localhost-slow.log
-
关于慢查询的参数slow_ _query_ _log_ file ,它指定慢查询日志文件的存放路径,系统默认会给一个缺省 的文件host_ _name-slow.log (如果没有指定参数slow_ _query_ log_ file的话)
-
- 说明:
- 什么样的sql才会记录到慢查询日志中
-
这个是由参数long_ query_time控制, 默认情况下long_ query_ _time的值为10秒,
-
命令: SHOW VARIABLES LIKE 'long_ query_ _time%';
-
可以使用命令修改,也可以在my.cnf参数里面修改。
-
假如运行时间正好等于long_ _query_ time的情况,并不会被记录下来。也就是说,
-
在mysq|源码里是判断大于long_ query_ time, 而非大于等于。
-
- 实际使用:
- 查看当前多少秒算是慢的sql:show variables like ‘long_query_time%’;
- 设置慢的阙值时间:set global long_query_time =3;
- 设置之后发现还是10s,并不是我们设置的3。
-
- 为什么设置之后还是看不出来变化呢:
- 需要重新连接后重新开一个会话才能看到修改值
- show variables like 'long_query_time%'
- show global variables like 'long_query_time';
- 使用语句执行时间是4秒钟:select sellp(4);在另一个窗口使用命令:tail -5 /var/lib/mysql/主机名-slow.log
- 查询当前数据库中有多少条慢询记录:show global status like '%Slow_queries%' ;
- 配置文件配置永久生效:
-
slow_query_log=1;
- slow_query_log_file=/var/lib/mysql/localhost-slow.log;
- long_query_time=3;
- log_output=FILE;
-
- 配置文件配置永久生效:
- 日志分析工具mysqldumpslow:在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow
-
查看mysqldumpslow 的帮助信息: mysqldumpslow --help
-
s:是表示按照何种方式排序;
-
c:访问次数
-
l:锁定时间
-
r:返回记录
-
t:查询时间
-
al:平均锁定时间
-
ar:平均返回记录数
-
at:平均查询时间
-
t:即为返回前面多少条的数据;
-
g:后边搭配一个正则匹配模式,大小写不敏感的;
-
-
得到返回记录集最多的10个SQL
mysqldumpslow S r -t 10 /var/ib/mysql/atguigu-slow.log -
得到访问次数最多的10个SQL
mysqldumpslow -S C -t 10 /var/ib/mysql/atguigu-slow.log -
得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow-s t-t 10 -g "left join" /var/lib/mysql/atguigu-slow.log -
另外建议在使用这些命令时结合|和more 使用,否则有可能出现爆屏情况
mysqldumpslow -S r -t 10 Nvar/lib/mysql/atguigu-slow.log| more
-