Isolatie: Repeatable Read- en Serializable-niveaus
Repeatable Read
Het Repeatable Read isolatieniveau in databases zorgt ervoor dat wanneer je een transactie start, je een momentopname van de database ziet die gedurende je taak hetzelfde blijft.
Dit betekent dat zelfs als er andere wijzigingen in de database plaatsvinden terwijl je werkt, je alleen de gegevens ziet zoals ze waren toen je begon.
Transacties onder Repeatable Read-isolatie houden leesvergrendelingen op alle rijen waarnaar ze verwijzen en schrijfvergrendelingen op rijen die ze invoegen, bijwerken of verwijderen. Dit voorkomt verloren updates, vuile en niet-herhaalbare lezingen.
Er is echter één probleem dat nog steeds kan optreden bij dit type isolatie - phantom read.
Phantom read
De phantom read kan optreden wanneer de ene transactie gegevens leest en een andere transactie nieuwe records aan de database toevoegt. Hierdoor kunnen we verschillende resultaatsets krijgen voor twee opeenvolgende leestransacties.
Non-repeatable read vs phantom read
Non-repeatable read doet zich voor wanneer dezelfde query, uitgevoerd door Gebruiker A, verschillende waarden voor dezelfde rij oplevert tussen opeenvolgende lezingen, meestal als gevolg van wijzigingen door Gebruiker B.
Phantom read daarentegen treedt op wanneer dezelfde query, uitgevoerd door Gebruiker A, verschillende sets rijen oplevert tussen opeenvolgende lezingen, zelfs als individuele rijen zelf niet zijn bijgewerkt.
We kunnen dit isolatieniveau specificeren in onze SQL-query met het volgende commando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Het Serializable-isolatieniveau is het hoogste isolatieniveau in databases en zorgt voor de strengste vorm van gelijktijdigheidscontrole.
Op dit niveau worden transacties uitgevoerd alsof ze serieël verwerkt worden, één na de ander, ook al kunnen ze in werkelijkheid gelijktijdig worden uitgevoerd. Dit garandeert dat het resultaat van de transacties hetzelfde is als wanneer ze in een bepaalde seriële volgorde zouden zijn uitgevoerd, waardoor consistentie wordt behouden en alle bekende gelijktijdigheidsanomalieën worden voorkomen.
Opmerking
Het gebruik van dit type isolatie kan leiden tot verminderde prestaties door toegenomen vergrendeling.
We kunnen de volgende instructie gebruiken om dit isolatieniveau in onze SQL-query in te stellen:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 4.35
Isolatie: Repeatable Read- en Serializable-niveaus
Veeg om het menu te tonen
Repeatable Read
Het Repeatable Read isolatieniveau in databases zorgt ervoor dat wanneer je een transactie start, je een momentopname van de database ziet die gedurende je taak hetzelfde blijft.
Dit betekent dat zelfs als er andere wijzigingen in de database plaatsvinden terwijl je werkt, je alleen de gegevens ziet zoals ze waren toen je begon.
Transacties onder Repeatable Read-isolatie houden leesvergrendelingen op alle rijen waarnaar ze verwijzen en schrijfvergrendelingen op rijen die ze invoegen, bijwerken of verwijderen. Dit voorkomt verloren updates, vuile en niet-herhaalbare lezingen.
Er is echter één probleem dat nog steeds kan optreden bij dit type isolatie - phantom read.
Phantom read
De phantom read kan optreden wanneer de ene transactie gegevens leest en een andere transactie nieuwe records aan de database toevoegt. Hierdoor kunnen we verschillende resultaatsets krijgen voor twee opeenvolgende leestransacties.
Non-repeatable read vs phantom read
Non-repeatable read doet zich voor wanneer dezelfde query, uitgevoerd door Gebruiker A, verschillende waarden voor dezelfde rij oplevert tussen opeenvolgende lezingen, meestal als gevolg van wijzigingen door Gebruiker B.
Phantom read daarentegen treedt op wanneer dezelfde query, uitgevoerd door Gebruiker A, verschillende sets rijen oplevert tussen opeenvolgende lezingen, zelfs als individuele rijen zelf niet zijn bijgewerkt.
We kunnen dit isolatieniveau specificeren in onze SQL-query met het volgende commando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Het Serializable-isolatieniveau is het hoogste isolatieniveau in databases en zorgt voor de strengste vorm van gelijktijdigheidscontrole.
Op dit niveau worden transacties uitgevoerd alsof ze serieël verwerkt worden, één na de ander, ook al kunnen ze in werkelijkheid gelijktijdig worden uitgevoerd. Dit garandeert dat het resultaat van de transacties hetzelfde is als wanneer ze in een bepaalde seriële volgorde zouden zijn uitgevoerd, waardoor consistentie wordt behouden en alle bekende gelijktijdigheidsanomalieën worden voorkomen.
Opmerking
Het gebruik van dit type isolatie kan leiden tot verminderde prestaties door toegenomen vergrendeling.
We kunnen de volgende instructie gebruiken om dit isolatieniveau in onze SQL-query in te stellen:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Bedankt voor je feedback!