首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

反駁 MySQL InnoDB 性能質疑:千萬級實測數據說明插入性能無線性衰退

     編輯:MySQL 資料庫相關知識

緣起:針對 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 億行,預期速度仍可維持。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved