| 鎖級別 | 典型引擎 | 特點 |
|---|---|---|
| 頁鎖 | BDB | 折中方案,鎖定資料頁(通常 8KB-16KB) |
| 表鎖 | MyISAM, MEMORY, ISAM | 粗粒度、衝突概率高、開銷小 |
| 行鎖 | InnoDB | 細粒度、並發度最高、開銷大、易死鎖 |
LOW_PRIORITY / HIGH_PRIORITY 調整優先序-- 客戶端 1:長時間查詢(持有讀鎖)
SELECT COUNT(*) FROM content GROUP BY content;
-- 客戶端 2:更新被阻塞 30 秒
UPDATE content SET content='I love you' WHERE id=444;
-- 客戶端 1 結束後,客戶端 2 瞬間完成(0.02 秒)
UPDATE content SET content='I hate you' WHERE id=444;
說明:讀鎖釋放前,寫請求排隊;讀鎖釋放後,寫請求立即獲得鎖執行。
主庫採用行鎖(InnoDB)保障寫入並發;從庫可考慮表鎖(MyISAM)加速報表查詢,前提是 SQL 已優化且無寫入衝突。
SELECT ... FOR UPDATE 明確加鎖innodb_lock_wait_timeout 避免無限等待SHOW ENGINE INNODB STATUS 分析死鎖日誌