【问题标题】:Mysql slow query log keeps recording same queries every 5 secondsMysql慢查询日志每5秒记录一次相同的查询
【发布时间】:2013-05-13 04:21:36
【问题描述】:

我在 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)。

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

rotating mysql slow query log

Mysql slow query log is logging faster queries

Logging slow queries in MySQL

......

有专家能解释一下吗?

非常感谢!

【问题讨论】:

    标签: mysql database-performance sql-tuning


    【解决方案1】:

    根据the slow query log 上的文档,这是设计使然

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

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

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

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

    另外,进一步解释这个variable setting does

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

    每次触发时都会记录查询,直到它们被修改为与触发其日志的行为不匹配。如果您担心磁盘空间,您可以轮换日志,如您链接的问题之一中所建议的那样。看到这个literature on logrotate and example configuration

    【讨论】:

    • 非常感谢@lan Schoonover 的精彩解释。我不太明白为什么这 2 个查询每 5 秒触发一次,触发有什么问题吗?
    • 火,我的意思是执行。对不起,俚语:)
    猜你喜欢
    • 1970-01-01
    • 2012-11-05
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2010-10-31
    • 2012-06-01
    相关资源
    最近更新 更多