Mysql

MyISAM 吞吐量峰值在 12000 條記錄插入

  • April 23, 2015

我正在使用批量記錄插入測試數據庫性能。

除了儲存引擎之外,兩個系統都是相同的

**Database      1000        4000        12000**
MySQL_InnoDB    60.95330976 218.2572161 262.1174723
MySQL_MyISAM    88.55827134 307.503075  684.8142441

這裡的度量標準是吞吐量,定義為操作/秒。

正如您在插入 1000 條記錄時看到的那樣,兩者都非常相似,同樣是 4000 條。

我不確定為什麼 MyISAM 在插入 12000 條記錄時與 InnoDB 相比飆升如此之高。可能是由於緩衝區大小嗎?我將預設值設置為 8MB,並且我計算出 1000 條記錄和 4000 條記錄都在該緩衝區內,但 120000 條記錄超過了 8MB 緩衝區大小。這可能是吞吐量呈指數增長的原因嗎?

我更感興趣的是為什麼 MyISAM 在 InnoDB 似乎更加線性時,在 12000 次插入時會出現每秒操作數的指數峰值。

使用 innodb,您可能正在填寫您的事務日誌 ( innodb_log_size)。插入時,InnoDB 首先將所有內容寫入事務日誌。一旦在日誌事務中應用到數據庫本身。因此,如果伺服器在事務中崩潰,它可以重放日誌(重新應用事務)以保持數據一致。

這實際上意味著,每個數據都會被寫入磁碟兩次。

如果您的插入不適合日誌,則必須等到日誌中的事務刷新到數據庫。這可能是您看到性能大幅提升的原因。

(哦,請注意日誌大小。如果您將其設置得太大,伺服器崩潰後的恢復可能需要很長時間)

引用自:https://serverfault.com/questions/685127