自 MySQL 5.5 起,InnoDB 取代 MyISAM 成為預設存儲引擎。其核心優勢在於:ACID 事務支援、行級鎖定、外鍵約束、崩潰恢復 四大支柱,專為高併發、高可靠、大數據量場景設計。
innodb_flush_log_at_trx_commit=1 確保每次提交刷盤鎖粒度為行,而非 MyISAM 的表鎖。支援:
配合 MVCC,讀寫不阻塞,大幅提升吞吐量。
innodb_file_per_table=ON) 每表一個 .ibd,支援攜帶表空間遷移、單表備份innodb_buffer_pool_size) 緩存數據/索引/鎖/自適應雜湊,建議設為實體記憶體 60-80%| 參數 | 建議值 | 影響 |
|---|---|---|
| innodb_buffer_pool_size | 物理記憶體 60-80% | 核心效能杠桿,過大導致 Swap |
| innodb_flush_log_at_trx_commit | 1 | 1=最安全;2/0=高效能但掉電丟 1 秒數據 |
| innodb_file_per_table | ON | 獨立表空間,利於管理 |
| innodb_log_file_size | 1-4 GB | 大 Redo Log 減少 checkpoint 壓力 |
| innodb_log_buffer_size | 16-64 MB | 大事務緩衝,減少 I/O |
| innodb_thread_concurrency | 0 (自動) | 0=不限,高併發時可試 2*(CPU+磁盤數) |
| innodb_flush_method | O_DIRECT | 避免雙重緩衝,需檔案系統支援 |
EXPLAIN 檢查 Using indexALGORITHM=INPLACE,減少鎖表時間Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests 命中率 > 99%ALTER TABLE t ENGINE=InnoDB 會重建表,大表預留時間COUNT(*) 無 WHERE 時,MyISAM 秒回,InnoDB 需掃描(MVCC 可見性檢查),計數表緩存