Basis van databases
Transactie T1 nam een exclusieve lock op rij A en vroeg daarna een lock op rij B aan, terwijl T2 een exclusieve lock op rij B nam en daarna een lock op rij A aanvroeg, zodat geen van beide verder kan. Wat doet een DBMS doorgaans wanneer het deze situatie detecteert?
- AHet laat beide blijven wachten; een van de locks wordt vanzelf vrijgegeven
- BHet draait één transactie terug zodat haar locks vrijkomen, en laat de andere doorgaan
- CHet commit de wijzigingen van zowel T1 als T2 zoals ze zijn
Antwoord en toelichting tonen
Antwoord: B. Het draait één transactie terug zodat haar locks vrijkomen, en laat de andere doorgaan
Een toestand waarin twee of meer transacties op elkaar wachten om locks vrij te geven, zodat geen enkele verder kan, heet een deadlock. Wachten alleen lost dit nooit op, dus veel DBMS'en detecteren een deadlock, bijvoorbeeld wanneer er een cyclus ontstaat in de wachtgraaf die laat zien welke transactie op welke wacht, en draaien een van de transacties (het slachtoffer) terug zodat haar locks vrijkomen. De teruggedraaide transactie wordt later opnieuw uitgevoerd. Een andere aanpak is een bovengrens (timeout) te stellen aan het wachten op een lock en een transactie die die overschrijdt terug te draaien. Als preventieve maatregel werkt het goed om elke transactie de locks in een vaste volgorde te laten nemen, zoals rij A vóór rij B.