locks ਨੂੰ ਇੱਕ consistent global order ਵਿੱਚ acquire ਕਰੋ, transactions ਨੂੰ ਛੋਟਾ ਰੱਖੋ, ਜਿੱਥੇ ਸੁਰੱਖਿਅਤ ਹੋਵੇ ਓਥੇ isolation ਘਟਾਓ, ਅਤੇ ਜਦੋਂ deadlock ਫਿਰ ਵੀ ਹੋ ਜਾਵੇ ਤਾਂ loser ਨੂੰ retry ਕਰੋ। ਇੱਕ deadlock ਇੱਕ cycle ਹੈ: transaction A row 1 ਰੱਖਦਾ ਹੈ ਅਤੇ row 2 ਲਈ ਇੰਤਜ਼ਾਰ ਕਰਦਾ ਹੈ, ਜਦਕਿ B row 2 ਰੱਖਦਾ ਹੈ ਅਤੇ row 1 ਲਈ ਇੰਤਜ਼ਾਰ ਕਰਦਾ ਹੈ — ਕੋਈ ਵੀ ਅੱਗੇ ਨਹੀਂ ਵਧ ਸਕਦਾ, ਇਸ ਲਈ DB ਇੱਕ ਨੂੰ ਮਾਰ ਦਿੰਦਾ ਹੈ।
ਓਹ cycle ਜਿਸਨੂੰ ਤੁਹਾਨੂੰ ਤੋੜਨਾ ਪਵੇਗਾ
Tx A Tx B
holds row 1 ──── waits ────▶ row 2 (held by B)
▲ │
│ waits │ holds
└────────── row 1 ◀────────────┘
(cycle = deadlock; DB aborts one victim)
