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?

  1. AHet laat beide blijven wachten; een van de locks wordt vanzelf vrijgegeven
  2. BHet draait één transactie terug zodat haar locks vrijkomen, en laat de andere doorgaan
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van databases

  1. 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?
  2. 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?
  3. 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?
  4. 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?
  5. Welke beschrijving van de kenmerken van een key-value-store, een van de databases die NoSQL worden genoemd, is in het algemeen juist?