首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 批量插入優化實戰:從 29 分鐘縮減至 53 秒的性能提升之路

     編輯:MySQL 綜合教學

核心結論

將單條 INSERT 合併為批量 INSERT(Batch Insert),在測試環境中將 10 萬條數據導入耗時從 1777 秒(約 29.6 分鐘) 驟降至 53 秒,性能提升 33 倍。但並非 Values 越多越好,存在明顯的「拐點」。

測試環境與基準數據

  • 表結構:單 ID 自增主鍵 + 數值字段
  • 數據量:10 萬條 INT 值
  • 連接方式:本地 Unix Socket
  • 測試工具:Shell 單進程腳本
SQL 模式耗時QPSRPS (有效行/秒)
單條 INSERT (SQL A)1777 秒5656
批量 INSERT,每批 10 個值 (SQL B)53 秒1881886

性能提升的根本原因

  1. 減少網絡交互與連接開銷:每次連接需經歷握手、權限驗證、語法解析、優化器分析等步驟。
  2. 單條與多條 VALUES 寫入耗時接近:Profile 數據顯示,核心 update 階段耗時幾乎一致(單值 0.000061s vs 10值 0.000073s),固定開銷被攤薄。

尋找最佳 Batch Size:實測數據揭示拐點

測試不同 values number(每批行數)的效果:

Values/批次總耗時(秒)QPSRPS (吞吐量)
117775656
10531881886
50 (最優)49402040
10050192000
20051101960
5005731754
10006021666
5000690.31449
100001330.07751

關鍵發現

  • QPS 峰值 ≠ RPS 峰值:QPS 在 10 批次達峰值 (188),但 RPS 在 50 批次達峰值 (2040)。吞吐量才是業務核心指標。
  • 最佳區間:50-100。超過 200 後邊際收益遞減,超過 5000 性能劇烈下降(大包裹處理開銷、緩衝區壓力)。
  • 該最優值受表結構、字段類型、索引、網絡延遲影響,必須實測確定。

工程落地:雙閾值觸發策略

純粹按數量或時間觸發均有缺陷,推薦 「數量閾值」與「時間閾值」並行:

  • 隊列積攢達到 N 條(如 50) → 立即寫入
  • 距離上次寫入超過 T 秒(如 1 秒) → 立即寫入(無論積攢多少)

優點:高並發時走數量閾值保吞吐;低並發時走時間閾值保實時性。

總結

  1. Batch Insert 是提升 MySQL 寫入吞吐量最「性價比」的手段。
  2. 最優 Batch Size 需根據實際業務場景壓測得出,通用建議 50-100。
  3. 生產環境採用「數量 + 時間」雙閾值觸發機制,平衡吞吐與延遲。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved