我有一个大约有200万行的MySQL表,以及一个每秒更新大约100行的脚本。我想减少正在进行的磁盘写入I / O量。对于这个特定的表,ACID并不重要,好像我在崩溃中丢失了一些行,脚本只会在正确的位置恢复。即使我丢失了过去一小时的工作,也不会那么重要。
该表使用的是InnoDB,但我切换到了MyISAM,因为我发现它是否没有记录每次写入可以将I / O减少一半。
但即使使用MyISAM,也会有很多写入I / O.表+索引在磁盘上占用大约1300 MB,但是MySQL每小时写入大约1600 MB到磁盘。我已经计算过如果每行可以完全有效地写入磁盘,那么每小时写入大约160 MB。所以它的写作数据需要大约10倍。我意识到存在一些效率低下的问题,但我猜大多数写入都是因为它将整个页面写入磁盘。
是否有任何方法可以减少写入次数,因此等待每个页面上的更多行更新,以便在写入时更高效(即使在发生崩溃时会丢失更多数据) )?
答案 0 :(得分:2)
如果你使用的是innodb,你可以将innodb_flush_log_at_trx_commit设置为2。这极大地改善了我们系统更新期间的I / O.
这里有一些关于设置的说明: http://www.mysqlperformanceblog.com/?s=innodb_flush_log_at_trx_commit