鎖粒度決定了併發控制的精細程度。粒度越細,並發度越高,但鎖管理開銷越大。MySQL 採用插件式存儲引擎,不同引擎支援不同粒度。
READ LOCAL 允許尾部並發插入 (MyISAM 特有)。無論引擎,ALTER TABLE、LOCK TABLES、FLUSH TABLES WITH READ LOCK 由 Server 層實施表鎖,忽略引擎鎖。
僅在存儲引擎層實現。MySQL Server 層不知行鎖存在,只見引擎返回的鎖等待狀態。
| 鎖模式 | 鎖定範圍 | 目的 | 兼容性 |
|---|---|---|---|
| 記錄鎖 | 單個索引記錄 | 防止修改衝突 | X 鎖互斥,S 鎖共享 |
| 間隙鎖 | 索引記錄間隙 | 防止幻讀 | 互不阻塞,但阻塞插入 |
| 臨鍵鎖 | 記錄 + 間隙 | RR 級防幻讀 | X 鎖互斥 |
AUTO_INCREMENT 計數器鎖,語句級釋放 (非事務級)。| 維度 | 表鎖 | 行級鎖 |
|---|---|---|
| 鎖衝突概率 | 高 (全表) | 低 (單行/間隙) |
| 死鎖可能 | 無 | 有 (需檢測回滾) |
| 內存開銷 | 極小 | 較大 (鎖結構數組) |
| 適用負載 | 讀多寫少、小表、OLAP | 高併發 OLTP、事務密集 |
Innodb_row_lock_waits、Innodb_row_lock_time_avg、Innodb_deadlocks。SHOW ENGINE INNODB STATUS 查看 LATEST DETECTED DEADLOCK 區塊,分析鎖獲取順序,調整業務 SQL 順序統一化。