gpt4 book ai didi

mysql - InnoDB 查询持续时间不一致

转载 作者:行者123 更新时间:2023-11-30 23:16:31 25 4
gpt4 key购买 nike

我正在一个几乎为空的 InnoDB 表上运行一系列更新命令,每 20-30 个查询中大约有 1 个会莫名其妙地花费 10 倍于其他查询。比如前20次更新会耗时20ms,突然第21次更新就耗时200ms。我设置了一个非常基本的测试:

CREATE TABLE `test` (
`col1` int(11) DEFAULT NULL,
`col2` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我在表中插入一行,然后我有一个 C# 控制台程序执行一系列更新:

for (int i = 0; i < 15; i++) {
long start = CurrentTimeMillis();

MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = "UPDATE test SET col1=" + i + " WHERE col2=1";
cmd.Prepare();
cmd.ExecuteNonQuery();

Console.WriteLine("Duration: " + (CurrentTimeMillis() - start));
}

这是我从程序中看到的输出:

MySQL version : 5.5.17
Duration: 36
Duration: 30
Duration: 16
Duration: 26
Duration: 152
Duration: 47
Duration: 71
Duration: 77
Duration: 46
Duration: 28
Duration: 21
Duration: 25
Duration: 17

如果我运行“SHOW profile FOR QUERY #”,“正在更新”和“查询结束”值都异常高。

如果我将表切换到 MyISAM,查询持续时间是一致的,但我不希望表锁定。有没有人猜到是什么让 InnoDB 以这种方式运行?

最佳答案

除非 innodb_flush_method 设置为 O_DIRECT,否则更新是在内存中(在缓冲池中)执行的 - 它们被记录在二进制日志中(重播以防万一)崩溃)并每秒刷新一次到光盘(默认情况下)。这意味着由于此时发生的磁盘 I/O,每秒一次更新会变慢。

关于mysql - InnoDB 查询持续时间不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17466376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com