MySQL优化篇:慢查询日志
1、概念
MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time
值的SQL,则会被记录到慢查询日志中。
具体指运行时间超过long_query_time
值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。
由他来查看哪些SQL抄错了我们的最大忍耐时间值,比如一条SQL执行超过5秒,我们就算慢SQL,希望能收集超过5秒的SQL,结合之前的explain进行全面分析。
2、如何使用
- 默认情况下,MySQL数据库没有开启慢查询日志,需要手动设置这个参数。
- 如果不是调优需要的话,一般不建议启动这个参数,因为开启慢查询日志会或多或少带来一定的性能影响。
- 慢查询日志支持将日志记录写入文件
(1)开启设置
SQL语句 | 描述 | 备注 |
---|---|---|
SHOW VARIABLES LIKE “%slow_query_log%”; | 查看慢查询日志是否开启 | 默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的 |
set global slow_query_log=1; | 开启慢查询日志 | |
show variables like “long_query_time%”; | 查看慢查询设定的阈值 | 单位秒 |
set long_query_time =1; | 设定慢查询阈值 | 单位秒 |
(2)永久生效
永久生效—需要修改配置文件my.cnf中的[mysqld]下的配置
[mysqld]
slow_query_log=1
slow_query_log_file=/var/lib/mysql/htzw-slow.log
long_query_time=3
log_output=FILE
参数说明与注意事项
1、使用show variables like 'long_query_time’查看是当前连接会话的变量值。因为long_query_time变量在
GLOBAL和SESSION
中都有,如果不加访问域则使用默认的SESSION
访问域,所以要想看到全局的long_query_time变量需要用如下语句show global variables like 'long_query_time'
2、show variables完整语法为:show [global|session] variables [like ‘pattern’ | where expr]
3、log_output
变量用于指定日志的存储方式,这个变量有两个取值:FILE,TABLE
,默认取值为FILE。MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output=’FILE,TABLE’
。
(3)运行查询时间长的SQL,打开慢查询日志查看
特殊说明
在进行SQL优化的过程中,可以通过参数设置将未使用到索引的查询当做慢查询捕获,具体可以通过如下变量设置:
系统变量log-queries-not-using-indexes
:未使用索引的查询也被记录到慢查询日志中(可选项)。如果调优的话,建议开启这个选项。另外,开启了这个参数,其实使用full index scan(索引全扫描)的sql也会被记录到慢查询日志。
3、日志分析工具(mysqldumpslow)
(1)查看慢查询记录的条数
如果想查询有多少条慢查询记录,可以使用这个系统状态变量——Slow_queries。
(2)查看mysqldumpslow的帮助信息
mysqldumpslow --help
参数 | 描述 |
---|---|
-s | 表示按照何种方式排序 |
c | 访问次数 |
l | 锁定时间 |
r | 返回记录 |
t | 查询时间 |
al | 平均锁定时间 |
ar | 平均返回记录数 |
at | 平均查询时间 |
-t | 即为返回前面多少条的数据 |
-g | 后边搭配一个正则表达式,大小写不敏感 |
(3)查看mysqldumpslow的帮助信息
#得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/htzw-slow.log
#得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /var/lib/mysql/htzw-slow.log
#得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/htzw-slow.log
#另外建议在使用这些命令时结合|和more使用,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /var/lib/mysql/htzw-slow.log | more
上一篇: MySql5.6从零开始学之查询数据
下一篇: 深入 Java 应用性能调优实践