"Deadlock"
- MySQL Lock Contention:在 staging 重現的 deadlock、production 跑 6 個月才出現
MySQL InnoDB 的 lock 是 row-level、但 *為什麼某些 row 莫名其妙也被 lock* 是 gap lock / next-key lock 設計造成的隱性行為。本文從一個 production case 開場(staging 重現 deadlock / production 6 個月後突然爆)、走 5 種 InnoDB lock 類型(record / gap / next-key / insert intention / auto-inc)、isolation level 對 lock 行為的決定性影響、deadlock detection / SHOW ENGINE INNODB STATUS 解讀、5 production 踩雷(gap lock 阻塞 INSERT / auto-inc lock contention / FK lock cascading / large transaction lock holding / READ COMMITTED 跟 binlog ROW 互動)