【问题标题】:MySQL slow query log bug? Logging quick queriesMySQL慢查询日志bug?记录快速查询
【发布时间】:2018-03-23 08:45:13
【问题描述】:

我已经设置了 MySQL 慢查询日志,几乎是默认的:

slow-query-log = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log
long_query_time = 1

当我查看输出时,我注意到它记录了这个查询:

# Time: 180323  9:08:17
# User@Host: db_sys[db_sys] @ localhost []
# Thread_id: 129753  Schema: pace-data  QC_hit: No
# Query_time: 1.193407  Lock_time: 0.000040  Rows_sent: 0  Rows_examined: 0
# Rows_affected: 10
SET timestamp=1521792497;
REPLACE INTO `core_model_img` (`id_img`) VALUES ('848'), ('287'), ('311'), ('288'), ('289'), ('290'), ('291'), ('94'), ('292'), ('294');

它在 1 列表中插入(或替换)10 行(该列已编入索引)。当我自己运行查询时,需要 60 毫秒。是的,有时是 65 毫秒,但绝对远不及 1.194307 秒。

另一个奇怪的事情是,查询似乎以某个奇怪的时间间隔(UTC 时间)返回:1:38:17、2:08:17、2:38:17、5:08:17、5:38: 17、6:08:17、6:38:17、8:38:17。这是在夜间,没有真正的用户活动发生。

查询可能被某事或某人(它是一个 Web 服务器)间接调用,所以这可以解释,但是:让我困惑的主要是查询时间。我不知道它为什么要记录这个查询。会不会是bug?

(来自评论)

CREATE TABLE `core_model_img` (
    `id_img` int(11) NOT NULL, 
    UNIQUE KEY `id_img` (`id_img`), 
    CONSTRAINT `core_model_img_ibfk_1` FOREIGN KEY (`id_img`)
               REFERENCES `lib_img` (`id`)
               ON DELETE CASCADE
               ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

【问题讨论】:

  • 请提供SHOW CREATE TABLE。索引是普通的还是 UNIQUE 会产生很大的差异。
  • CREATE TABLE `core_model_img` ( `id_img` int(11) NOT NULL, UNIQUE KEY `id_img` (`id_img`), CONSTRAINT `core_model_img_ibfk_1` FOREIGN KEY (`id_img`) REFERENCES `lib_img` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8

标签: mysql performance mysql-slow-query-log


【解决方案1】:

REPLACEDELETE 加上INSERT 的组合。

我想知道DELETE 是否在意识到INSERT 相同之前级联?在这种情况下,我担心REPLACEFOREIGN KEYs 不兼容。

REPLACE 更改为INSERT IGNORE

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多