鎖是數據庫併發控制核心。MySQL 不同存儲引擎鎖粒度不同:MyISAM/MEMORY 表鎖,BDB 頁鎖,InnoDB 行鎖。本文系統梳理原理、衝突矩陣、死鎖排查與優化參數。
| 引擎 | 鎖粒度 | 死鎖 | 適用場景 |
|---|---|---|---|
| MyISAM | 表級 | 無 | 讀多寫少、只讀報表 |
| InnoDB | 行級 | 有 | 高併發寫入、事務業務 |
| BDB | 頁級 | 有 | 已淘汰 |
LOCK TABLES t1 READ, t2 WRITE; / UNLOCK TABLES;。IS、IX,標識事務意圖,便於表鎖兼容性檢查。SHOW ENGINE INNODB STATUS\G 看 LATEST DETECTED DEADLOCK 區塊。innodb_lock_wait_timeout=50(默認 50s)innodb_deadlock_detect=ON(高併發可關閉,靠 timeout)innodb_spin_wait_delay、innodb_sync_spin_loops(自旋優化)GET_LOCK('key', 10) / RELEASE_LOCK('key') 實現分布式邏輯鎖。Innodb_row_lock_waits、Innodb_row_lock_time_avg、Innodb_row_lock_time_max。Table_locks_waited、Table_locks_immediate(MyISAM)。