lock을 일관된 전역 순서로 획득하고, 트랜잭션을 짧게 유지하며, 안전한 곳에서는 isolation을 낮추고, 그래도 deadlock이 발생하면 패자(loser)를 재시도하십시오. deadlock은 순환(cycle)입니다: 트랜잭션 A가 row 1을 잡고 row 2를 기다리는 동안 B는 row 2를 잡고 row 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)
