1

我在 my.cnf 中启用了以下变量:

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

并重新启动 MySQL 服务。然后 mysql-slow.log 每 5 秒重复记录 2 个查询(都是全扫描的小表,不涉及索引)。这两个查询实际上都用了不到 0.01 秒。并且日志文件变得越来越大。

我的服务器版本:5.5.31-0ubuntu0.12.04.1-log (Ubuntu)。

我想知道日志文件多久执行一次写入工作,甚至是冗余工作?我们可以控制一些其他系统变量来减慢这项工作吗?还有一些类似的问题,例如:

旋转mysql慢查询日志

Mysql 慢查询日志正在记录更快的查询

在 MySQL 中记录慢查询

……

有专家能解释一下吗?

非常感谢!

4

1 回答 1

2

根据慢查询日志的文档,这是设计使然

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

  1. 查询不能是管理语句,或者必须指定 --log-slow-admin-statements。

  2. 查询必须至少花费 long_query_time 秒,或者必须启用 log_queries_not_using_indexes 并且查询不使用索引进行行查找。

  3. 查询必须至少检查 min_examined_row_limit 行。

此外,进一步解释此变量设置的作用

如果您在启用慢查询日志的情况下使用此选项,则会记录预期检索所有行的查询。请参阅第 5.2.5 节,“慢查询日志”。此选项不一定意味着不使用索引。例如,使用全索引扫描的查询使用索引但会被记录,因为索引不会限制行数。

每次触发时都会记录查询,直到它们被修改为与触发其日志的行为不匹配。如果您担心磁盘空间,您可以轮换日志,如您链接的问题之一中所建议的那样。请参阅有关 logrotate 和示例配置的文献

于 2013-05-18T00:02:20.783 回答