繁体   English   中英

随机 InnoDB 插入超慢

[英]Random InnoDB INSERTs super slow

我有以下 INSERT 语句:

cursor.execute('''UPDATE alg SET size=%(size)s, path=%(path)s, 
                  last_modified=%(last_modified)s, search_terms=%
                  WHERE objectID=%(objectID)s''', data)

它被编入索引,通常需要 1/1000 秒来完成。 但是,每 200 次左右的 INSERT 一次,就需要超长的时间。 这是一个定时的例子——

453
0.000407934188843
454
0.29783987999 <-- this one
455
0.000342130661011
456
0.000318765640259
457
0.000240087509155

该列已编入索引,并使用InnoDB 知道可能是什么问题吗? 这似乎也是随机的,因为如果我一遍又一遍地运行它,不同的对象会导致 INSERT 变慢——它与任何特定对象无关。

另请注意,我在 MyISAM 上没有这个问题。

您可能有默认的 innodb_log_file_size,其 ID 为 5 兆字节。 在 cnf 文件中将此设置为最小值 128M 或 innodb_buffer_pool_size 的 25%。 您会希望缓冲池对于您的系统尽可能大。 如果它是一个专用的 mysql 服务器,那么 70-80% 的系统 RAM 不会不合理(留一些用于操作系统页面缓存)。

将日志文件的大小设置得更大,将需要将需要刷新到表的时间间隔开。 将它设置得太大会增加重启时的崩溃恢复时间。

还要确保设置 innodb_flush_method=O_DIRECT 以避免操作系统级别的页面缓存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM