Mysql抛出查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要参考依据,是一项非常实用的功能。 MySQL抛出查询日志的打开和配置非常简单,可以指定记录的文件(或表),超过的时间阈值等可以记录在慢SQL中。 老实说,这不仅仅是与sqlserver跟踪或扩展事件进行比较(
1 .打开滚动查询日志
通常,只需将slow_query_log=1配置文件添加到配置文件中。 也就是说,如果打开了滚动查询日志,但未指定slow_query_log_file,则会自动生成主机名为“‘slow'.log的文件。
2、默认情况下,记录慢速查询的时间阈值为10s
默认情况下,在使用slow_query_log=1启动MySQL时,将打开一个具有主机名“‘slow'.log的默认文件,并记录超过10s的滚动查询
也可以显式指定低速查询的日志文件名(如果不存在,将自动创建)和记录低速查询的时间阈值)。 不是默认的10s。
注意如果在配置文件中指定long_query_time,则不需要时间单位。 只需要一个值。 例如,1表示1s。 如果拥有时间单位,则无法启动服务。
以下是记录在日志文件中的低速sql的示例
3、在表中记录低速查询日志
配置:要在表中记录慢速查询,必须添加log_output的配置
mysql库下面是缺省的slow_log表,您可以直接将slow_query_log_file=slow_log记录在表中。
记录的slow sql如下所示: 您可以看到sql_text是二进制信息,而不是原始sql文本
用转换函数转换就可以了。
关于低速查询记录在日志文件和表中的区别:
1 )滚动查询记录在日志文件和表中,记录本身差别不大。 在表中记录的情况下,滚动查询的执行时间信息微妙地不准确
2 )在表中记录滚动查询消息可以方便地查询,但因为是结构化数据,所以可能比在滚动查询日志文件(平面文本文件)中记录的速度慢一些) (个人推测)。 如果要记录到文件中,则必须使用mysqldumpslow工具进行分析。
3 )滚动查询不记录执行失败的查询。 例如,如果long_query_time设置为10(10秒),且一个查询超过10秒,则无法在MySQL抛出查询中记录此查询信息,因为其他原因导致执行失败。