Mysql慢查询日志不尊重long_query_time变量,日志真的很快查询

时间:2017-09-28 16:40:53

标签: mysql mysql-slow-query-log

我正在运行mysql 5.5并正在调试性能问题。我启用了mysql慢速日志记录。这些是我在my.cnf中的相关设置:

log_slow_queries    = /var/log/mysql/mysql-slow.log
long_query_time = 10
log-queries-not-using-indexes

Mysql确实在创建和写入慢查询日志。但是,它记录了大量运行的查询,这些查询比long_query_time参数指定的要快得多。

以下是几个例子:

# Query_time: 0.000142  Lock_time: 0.000039 Rows_sent: 1  Rows_examined: 1 
# Query_time: 0.000081  Lock_time: 0.000024 Rows_sent: 1  Rows_examined: 1
# Query_time: 0.000116  Lock_time: 0.000034 Rows_sent: 1  Rows_examined: 1

实际上,没有查询的实例具有查询或锁定时间,这些查询或锁定时间一起加起来大于0.1。从我读取long_query_time参数应该做什么,我不希望在慢查询日志中找到这些查询。

1 个答案:

答案 0 :(得分:4)

编辑my.cnf不会将更改应用于正在运行的实例。您必须重启mysvicef的MySQL服务才能生效。

或者,您可以使用SET GLOBAL long_query_time = 10在当前运行的实例中应用等效更改。

我的习惯是两者:编辑my.cnf以便下次重启MySQL服务时生效,然后我也使用SET GLOBAL来应用相同的更改到正在运行的实例。了解并非每个MySQL服务器变量都可以像这样动态更改。

另请注意,只有 new 客户端连接才能获得该全局值。现有客户端连接将继续使用在连接开始时生效的先前全局值。

重新评论:

请注意,您设置了log-queries-not-using-indexes。这意味着记录所有不使用索引的查询,即使查询比long_query_time更快。

https://dev.mysql.com/doc/refman/5.5/en/slow-query-log.html说:

  

服务器按以下顺序使用控制参数   确定是否将查询写入慢查询日志:

     
      
  • 查询必须不是管理声明,或者   必须指定--log-slow-admin-statements。

  •   
  • 查询必须至少使用long_query_time秒,或者   必须启用log_queries_not_using_indexes,并且查询不使用   行查找的索引。

  •   
  • 查询必须至少检查过min_examined_row_limit行。

  •   

请注意,“不使用索引”有点违反直觉。 https://dev.mysql.com/doc/refman/5.5/en/server-options.html#option_mysqld_log-queries-not-using-indexes说:

  

[log-queries-not-using-indexes]选项并不一定意味着不使用索引。例如,使用完整索引扫描的查询使用索引但会被记录,因为索引不会限制行数。