Basis van databases

Transactie T1 voerde SELECT COUNT(*) FROM Bestelling WHERE Bedrag >= 1000 uit en kreeg 8. Direct daarna voegde T2 met INSERT een rij toe voor een bestelling met een bedrag van 2000 en voerde een commit uit. Toen T1 hetzelfde SELECT-statement opnieuw uitvoerde, kreeg het 9. Welk verschijnsel is dit?

  1. ANon-repeatable read
  2. BDirty read
  3. CPhantom read
Antwoord en toelichting tonen

Antwoord: C. Phantom read

Wanneer binnen één transactie een zoekopdracht met dezelfde voorwaarde wordt herhaald en de verzameling resultaatrijen verandert omdat een andere transactie tussendoor passende rijen heeft toegevoegd (of verwijderd) en gecommit, heet dat verschijnsel een phantom read (of phantom). De naam komt doordat de nieuw verschenen rijen als spoken (phantoms) opduiken. Een non-repeatable read is wanneer een al gelezen rij bij opnieuw lezen een andere waarde heeft (of verdwenen is), omdat een andere transactie haar heeft gewijzigd of verwijderd en gecommit. Locks op bestaande rijen kunnen niet voorkomen dat rijen die nog niet bestaan worden toegevoegd, dus om phantoms te voorkomen zijn mechanismen nodig zoals het locken van het bereik dat de zoekvoorwaarde omvat. Volgens de SQL-standaard treden bij het isolatieniveau SERIALIZABLE geen phantoms op. T2 heeft gecommit, dus het is geen dirty read.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van databases

  1. Welk antwoord noemt van de isolatieniveaus die de SQL-standaard definieert juist de verschijnselen die bij READ COMMITTED kunnen optreden?
  2. Transactie T1 heeft een gedeelde lock op een rij en leest die. T2 vraagt een gedeelde lock en T3 een exclusieve lock op dezelfde rij aan. Wat is juist voor de periode tot T1 zijn lock vrijgeeft?
  3. Welke beschrijving van tweefasenvergrendeling (two-phase locking, 2PL), die voor het gelijktijdigheidsbeheer van transacties wordt gebruikt, is juist?
  4. 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?
  5. 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?