随机InnoDB INSERT超级慢

时间:2015-10-09 01:58:14

标签: mysql innodb database-performance

我有以下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上没有此问题。

1 个答案:

答案 0 :(得分:2)

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

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

另外一定要设置innodb_flush_method = O_DIRECT以避免操作系统级页面缓存。