Basis van databases

Welke beschrijving van tweefasenvergrendeling (two-phase locking, 2PL), die voor het gelijktijdigheidsbeheer van transacties wordt gebruikt, is juist?

  1. AEen transactie mag willekeurig vaak afwisselen tussen locks nemen en vrijgeven. Dit garandeert dat er nooit deadlocks optreden
  2. BLocks worden alleen genomen voor schrijven, niet voor lezen. Dit voorkomt alle problemen, ook dirty reads
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van databases

  1. 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?
  2. Bij het wijzigen van gegevens leggen veel DBMS'en de wijzigingen vast in een log (journaal) en schrijven ze die log naar niet-vluchtige opslag vóór de database zelf (WAL: write-ahead logging). Wat is de belangrijkste reden voor deze aanpak?
  3. Er zijn transacties T1 tot T5, en vóór een storing is één checkpoint genomen. T1 is vóór het checkpoint begonnen en gecommit. T2 en T3 zijn vóór het checkpoint begonnen; T2 is na het checkpoint maar vóór de storing gecommit, en T3 was op het moment van de storing niet gecommit. T4 en T5 zijn na het checkpoint begonnen; T4 is vóór de storing gecommit, en T5 was niet gecommit. Welke transacties moeten bij het herstel na de storing met de log een rollforward krijgen?
  4. Op de kolom LidNr van de tabel Lid met 1 miljoen rijen is een index in de vorm van een B+-boom aangemaakt. Welke combinatie van het effect dat in het algemeen mag worden verwacht en de prijs daarvoor is juist?
  5. Voor de tabel Lid met 1 miljoen rijen wordt overwogen op elk van de kolommen LidNr (allemaal verschillend), Prefectuur (47 waarden) en Geslacht (2 waarden, ruwweg half om half) een B+-boomindex aan te maken. Op welke kolom is een index waarschijnlijk het minst effectief bij een zoekopdracht waarin in de WHERE-clausule een waarde voor één kolom wordt opgegeven?