Basis van databases
Welke beschrijving van tweefasenvergrendeling (two-phase locking, 2PL), die voor het gelijktijdigheidsbeheer van transacties wordt gebruikt, is juist?
- AEen transactie mag willekeurig vaak afwisselen tussen locks nemen en vrijgeven. Dit garandeert dat er nooit deadlocks optreden
- BLocks worden alleen genomen voor schrijven, niet voor lezen. Dit voorkomt alle problemen, ook dirty reads
- CZodra een transactie een lock vrijgeeft, neemt ze daarna geen nieuwe locks meer. Dit garandeert dat gelijktijdige uitvoering hetzelfde resultaat geeft als seriële uitvoering, maar deadlocks kunnen nog steeds optreden
Antwoord en toelichting tonen
Antwoord: C. Zodra een transactie een lock vrijgeeft, neemt ze daarna geen nieuwe locks meer. Dit garandeert dat gelijktijdige uitvoering hetzelfde resultaat geeft als seriële uitvoering, maar deadlocks kunnen nog steeds optreden
Bij tweefasenvergrendeling (2PL) heeft elke transactie twee fasen: een fase waarin ze de benodigde locks een voor een neemt (de groeifase) en een fase waarin ze die vrijgeeft (de krimpfase), en zodra ze begint locks vrij te geven, neemt ze geen nieuwe meer. Als elke transactie deze regel volgt, is gegarandeerd dat het resultaat van gelijktijdige uitvoering hetzelfde is als wanneer de transacties in een bepaalde volgorde een voor een worden uitgevoerd (serialiseerbaarheid). Een deadlock, waarbij twee transacties elk wachten tot de ander een lock vrijgeeft, kan 2PL echter niet voorkomen, dus het DBMS detecteert deadlocks en lost ze op, bijvoorbeeld door een van de transacties terug te draaien. In de praktijk wordt vaak strikte tweefasenvergrendeling gebruikt, die exclusieve locks tot de commit vasthoudt; die voorkomt ook dat andere transacties niet-gecommitte gegevens lezen.