mysql慢查询日志是mysql日共记录日志的一种也是帮助定位查询较慢的sql的一种手段,他用来记录超过long_query_time设定值的sql,超过这个阀值mysql就会将其记录下来,写进slow_query_log_file配置好的日志文件中。默认的情况下mysql是关闭慢查询的功能的,因为开启慢查询功能会消耗一部分的系统资源,所以一般来说我们的生产环境也是不建议开启的。
涉及部分相关参数:
1、日志式
mysql默认情况下slow_query_log的值时“OFF”也就是关闭状态。在我我们定位一下慢sql的时候需要先查看当前状态可以通过查询VARIABLES查看相关参数例如
查看设置:
show VARIABLES like "%QUERY%"; --查看参数名称中带有“QUERY”的参数
show VARIABLES like "%log_output%"; --查看参数名称中带有“log_output”的参数
修改设置:set GLOBAL [key]=[value]
set GLOBAL slow_query_log=`ON`; --此方式只对当前生效,一旦数据库重启便会失效
永久生效:修改my.cnf配置文件增加参数或修改参数重启服务器即可
slow_query_log=ON
long_query_time=10
slow_query_log_file=/usr/local/mysql/data/localhost-slow.log
#慢查询的参数slow_query_log_file ,它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件host_name-slow.log
2、表格式
log_output参数适用来指定日志的存储方式的参数,他是一个枚举类型,有“FILE”和“TABLE”两个值。默认值为“FILE”。当然mysql也支持两种方式中间用逗号隔开log_output=‘FILE,TABLE’。但是一般来说我们统一建议时将日志记录到日志文件中,因为相较于记录到日志表来说。记录到日志文件要节省性能些,但是我们更希望的是关闭
查看设置
show VARIABLES like "%log_output%"; --查看参数名称中带有“log_output”的参数
修改设置
set GLOBAL log_output=`FILE`; --此方式只对当前生效,一旦数据库重启便会失效,需要的话在配置文件中增加或修改
如果是记录到表格中的话可以通过普通的sql查询你符合条件的记录:
其他
系统参数log_queries_not_using_indexes在你进行调优的时候也是一个不可多得的一个参数,他可以开启或者关闭是否记录没有使用索引的慢sql。默认情况下是关闭状态(“OFF”)。
系统参数log_show_admin_statements表示的是是否将慢管理语句例如ANALYZE TABLE和ALTER TABLE等记入慢查询日志
show variables like 'log_slow_admin_statements';
统计慢查询的条数:
show global status like '%slow_queries%';
mysql日志分析工具
在实际的使用过程中我们要定位慢sql有时候需要去真是的生产环境中分析日志,所以一般来说我们都会以日志文件的形式记录慢sql,但是这样的话我们分析的工作就变的体力活了。所以我们的mysql给我们提供了日志分析工具mysqldumpslow。这个工具可以大幅度的提高我们的分析效率。
mysqldumpslow参数解析:
-s, 是表示按照何种方式排序
c: 访问计数
l: 锁定时间
r: 返回记录
t: 查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间
-t, 是top n的意思,即为返回前面多少条的数据;
-g, 后边可以写一个正则匹配模式,大小写不敏感的;
比如:
得到返回记录集最多的10个SQL。
mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log
得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log
得到按照时间排序的前10条里面含有左连接的查询语句。
mysqldumpslow -s t -t 10 -g “left join” /database/mysql/mysql06_slow.log
另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。
mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more