緣起:針對 JavaEye 上的 FUD 論調實測驗證
網上有文章稱:「InnoDB 磁碟性能令人擔憂,百萬行記錄插入後速度從 1600 行/秒暴跌至 50 行/秒」。筆者從未見過如此極端情況,且無人反駁,遂自行驗證。
測試環境
- MySQL 5.0.26 x86_64 / Linux x86_64
ibdata 17GB,未啟用 innodb_file_per_table
- 表 1:約 1000 萬行,2.2GB,含主鍵 6 個索引欄位
- 表 2:約 3000 萬行,6.3GB,含主鍵 6 個索引欄位
- 硬體:雙 Xeon 3GHz、4GB 記憶體、SCSI 硬碟、普通組裝伺服器
- 表結構:int、varchar、datetime,無 text/blob,單行約 0.1KB
測試 1:1000 萬行表,2 分鐘插入測試
Java JDBC 遠端呼叫,每次插入 1 行:
- CPU 30%
- INSERT OK/ERR: 73,824/0
- 耗時 129 秒
- 平均/當前/最大:572/620/620 行/秒
測試 2:3000 萬行表,10 分鐘長測
插入 100 萬新行,8 執行緒、連線池:
- CPU 30%
- OK/ERR: 1,006,907/0
- 耗時 1,683 秒
- 平均/當前/最大:598/586/647 行/秒
結論: 3000 萬行表持續插入 100 萬行,速度穩定維持近 600 行/秒,無線性衰退。
關於 ibdata 增長 100KB/次的說明
MySQL 文檔說明增長尺寸可配置,大量 INSERT 場景可設 innodb_autoextend_increment 為 100MB 或更大。
補充測試:含 TEXT 大欄位(每行 10KB)
1000 萬行表基礎上測試:
- CPU 持續 30%
- 速度維持約 300 行/秒
- 寫入吞吐約 3MB/秒

證明大欄位下亦無線性下降問題。下一步計劃測試單表 1 億行,預期速度仍可維持。