慢查询日志概念
mysql慢查询日志是mysql日共记录日志的一种也是帮助定位查询较慢的sql的一种手段,他用来记录超过long_query_time设定值的sql,超过这个阀值mysql就会将其记录下来,写进slow_query_log_file配置好的日志文件中。默认的情况下mysql是关闭慢查询的功能的,因为开启慢查询功能会消耗一部分的系统资源,所以一般来说我们的生产环境也是不建议开启的。
涉及部分相关参数:
- slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。当我们有些版本的数据库也会用“on”或者“off”
- log-slow-queries
:旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log - slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
- long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。默认值10s
- log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
- log_output:日志存储方式。log_output=‘FILE’表示将日志存入文件,默认值是’FILE’。log_output='TABLE’表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据
库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output=‘FILE,TABLE’。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需
要能够获得更高的系统性能,那么建议优先记录到文件。
慢查询设置
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