DB_TRX_ID (創建事務 ID)、DB_ROLL_PTR (指向 Undo Log 版本鏈)。m_ids (活躍事務 ID 列表)、min_trx_id、max_trx_id、creator_trx_id。| 級別 | ReadView 生成 | 鎖策略 | 幻讀 |
|---|---|---|---|
| READ UNCOMMITTED | 無 (讀最新) | 無鎖 | 允許 |
| READ COMMITTED | 每條 SELECT 生成 | 記錄鎖 | 允許 |
| REPEATABLE READ (預設) | 首條 SELECT 生成 | Next-Key Lock (Gap+Record) | **防止** (Gap Lock) |
| SERIALIZABLE | 首條 SELECT 生成 | 讀寫全加鎖 (S/X 鎖) | 防止 |
SELECT,讀 ReadView 可見版本,**不加鎖**。SELECT ... LOCK IN SHARE MODE、SELECT ... FOR UPDATE、UPDATE、DELETE、INSERT,讀最新版本,**加鎖**。Next-Key Lock = Record Lock + Gap Lock。鎖定索引記錄及其前方間隙,形成左開右閉區間 (prev_key, curr_key]。
SELECT ... FOR UPDATE、UPDATE、DELETE 走索引時自動加 Next-Key Lock。BIGINT UNSIGNED AUTO_INCREMENT)。熱點頁面自動建立內存哈希表,B+ 樹 O(log N) → O(1)。無需配置,innodb_adaptive_hash_index=ON 預設開啟。
非唯一二級索引插入延遲合併寫入。innodb_change_buffering=all (預設) 同時緩衝插入、刪除標記、清除操作。
防止頁寫入一半掉電導致頁損壞。先寫共享表空間 doublewrite 區,再寫數據文件。可關閉 innodb_doublewrite=0 (需檔案系統支援原子寫入)。
基於 Redo Log (WAL)、Tablespace 獨立、xtrabackup 掃描頁 LSN 實現**非阻塞、一致性、增量**物理備份。MyISAM 需 FLUSH TABLES WITH READ LOCK 全局鎖表。
InnoDB 以聚簇索引為骨架,MVCC 為靈魂,Next-Key Lock 守護一致性,多層優化應對極致負載。深諳其內核,方能駕馭 MySQL 高併發、高可靠之道。