[英]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.