我有一個約200萬行的MySQL表和一個每秒更新大約100行的腳本。我想減少正在進行的磁盤寫入I/O的數量。對於這個特定的表,ACID並不重要,因爲如果我在崩潰中丟失了一些行,腳本就會在適當的位置恢復。即使我失去了過去一小時的工作,也沒有什麼大不了的。減少在MySQL中寫入非關鍵數據的I/O?
該表使用的是InnoDB,但我切換到了MyISAM,因爲我想如果它沒有記錄每個可以將I/O減少一半的寫入。
但即使使用MyISAM,也有很多寫入I/O正在進行。表+索引在磁盤上佔用大約1300 MB,但MySQL每小時寫入大約1600 MB到磁盤。我已經計算出,如果每行可以高效寫入磁盤,那麼每小時寫入大約160 MB。所以它寫的數據量是它需要的10倍。我意識到有一些低效率,但我猜測大部分寫入是因爲它將整個頁面寫入磁盤。
有什麼辦法可以減少它的寫入次數,因此它會一直等到每個頁面上的更多行被更新,以便它可以在寫入時更加高效(即使在發生某個事件時會丟失更多的數據崩潰)?
也值得一看http://www.mysqlperformanceblog.com/2011/03/18/video-the-innodb-storage-engine-for-mysql/ – 2011-04-08 17:22:29
我試過了 - 可以更改爲等待超過一秒鐘來刷新? – Nick 2011-04-12 17:49:33
據我所知,它不能配置爲等待超過一秒鐘。 但你也可以使用沖洗方法。看看參數,並在你的一些測試系統上試用它們http://dev.mysql.com/doc/refman/5.1/de/innodb-parameters.html – csupnig 2011-04-13 13:17:54