innodb_file_per_table=ON,將不同表的 .ibd 文件掛載到不同物理磁盤/RAID 卷,分散隨機 I/O 壓力。| 參數 | 調整值 | 作用 |
|---|---|---|
innodb_autoextend_increment | 128M | 表空間自動擴容步長,減少頻繁擴容導致的 I/O 抖動。 |
innodb_log_buffer_size | 32M | 事務日誌緩衝,大事務提交時減少 fsync 次數。 |
innodb_log_file_size | 128M | Redo log 文件大小,越大意味著 checkpoint 間隔越長,平滑寫入峰值。 |
innodb_flush_log_at_trx_commit | 0 | 關鍵突破:0 = 每秒刷盤一次(由後台線程),犧牲最多 1 秒數據換取極高寫入吞吐。 |
innodb_log_file_size(需停機:關閉實例 → 刪除舊 ib_logfile* → 啟動)。innodb_log_buffer_size、innodb_autoextend_increment。innodb_flush_log_at_trx_commit=0(動態生效),並確認業務可接受「極端崩潰丟失 1 秒數據」。調整後,寫入穩定在 100+ 行/秒,CPU 佔用率從 80%+ 降至 30% 左右,I/O 等待時間明顯下降。
innodb_flush_log_at_trx_commit=0 會導致 實例崩潰時丟失最近 1 秒提交的事務。=1,改用批量提交、異步寫入隊列、升級 SSD/RAID 卡等手段提升吞吐。SHOW ENGINE INNODB STATUS 觀察 Log sequence number 推進情況,確保後台刷盤跟得上。一句話總結: 在可接受「秒級數據風險」的業務場景下,innodb_flush_log_at_trx_commit=0 配合大 Redo Log 是提升 MySQL 寫入吞吐的「核武器級」參數組合。