一貫したグローバルな順序でロックを取得し、トランザクションを短く保ち、安全な場合は分離レベルを下げ、それでもデッドロックが起きたら敗者をリトライします。 デッドロックはサイクルです。トランザクションAは行1を保持して行2を待ち、Bは行2を保持して行1を待つ — どちらも進めないので、DBが一方を殺します。
断ち切るべきサイクル
text
Tx A Tx B
holds row 1 ──── waits ────▶ row 2 (held by B)
▲ │
│ waits │ holds
└────────── row 1 ◀────────────┘
(cycle = deadlock; DB aborts one victim)
