READ COMMITTED & REPEATABLE READ

Transacties en foutafhandeling in SQL Server

Miriam Antona

Software Engineer

READ COMMITTED

  • Standaard isolatieniveau
  • Kan geen data lezen die is gewijzigd door een andere transactie die niet gecommit of teruggedraaid is
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Transacties en foutafhandeling in SQL Server

READ COMMITTED - vergelijking isolatieniveaus

Dirty reads Non-repeatable reads Phantom reads
READ UNCOMMITTED yes yes yes
READ COMMITTED no yes yes
Transacties en foutafhandeling in SQL Server

READ COMMITTED - dirty reads voorkomen

Beginsaldo rekening 5 = $35.000

Transactie1

BEGIN TRAN
  UPDATE accounts
  SET current_balance = 30000
  WHERE account_id = 5;

Transactie2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;

Moet wachten!

Transacties en foutafhandeling in SQL Server

READ COMMITTED - dirty reads voorkomen

Beginsaldo rekening 5 = $35.000

Transactie1

BEGIN TRAN
  UPDATE accounts
  SET current_balance = 30000
  WHERE account_id = 5;

COMMIT TRAN;

Transactie2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00        |
Transacties en foutafhandeling in SQL Server

READ COMMITTED - selecteren zonder wachten

Transactie1

BEGIN TRAN
  SELECT current_balance
  FROM accounts WHERE account_id = 5;

Transactie2

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
Transacties en foutafhandeling in SQL Server

READ COMMITTED - samenvatting

Voordelen:

  • Voorkomt dirty reads

Nadelen:

  • Laat non-repeatable en phantom reads toe
  • Je kunt geblokkeerd worden door een andere transactie

Wanneer gebruiken?

  • Je wilt alleen gecommitte data lezen; non-repeatable en phantom reads zijn mogelijk
Transacties en foutafhandeling in SQL Server

REPEATABLE READ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
  • Kan geen ongecommitte data van andere transacties lezen
  • Als data is gelezen, mogen andere transacties die data niet wijzigen tot de REPEATABLE READ-transactie klaar is
Transacties en foutafhandeling in SQL Server

REPEATABLE READ - vergelijking isolatieniveaus

Dirty reads Non-repeatable reads Phantom reads
READ UNCOMMITTED yes yes yes
READ COMMITTED no yes yes
REPEATABLE READ no no yes
Transacties en foutafhandeling in SQL Server

REPEATABLE READ - non-repeatable reads voorkomen

Transactie1

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |

Transactie2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Moet wachten!

Transacties en foutafhandeling in SQL Server

REPEATABLE READ - non-repeatable reads voorkomen

Transactie1

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
COMMIT TRAN

Transactie2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Moet wachten!

Transacties en foutafhandeling in SQL Server

REPEATABLE READ - non-repeatable reads voorkomen

Transactie1

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
COMMIT TRAN

Transactie2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 rows affected)
Transacties en foutafhandeling in SQL Server

REPEATABLE READ - samenvatting

Voordelen:

  • Voorkomt dat anderen data wijzigen die jij leest; voorkomt non-repeatable reads
  • Voorkomt dirty reads

Nadelen:

  • Laat phantom reads toe
  • Je kunt geblokkeerd worden door een REPEATABLE READ-transactie

Wanneer gebruiken?

  • Je wilt alleen gecommitte data lezen en niet dat anderen jouw gelezen data wijzigen. Phantom reads neem je voor lief
Transacties en foutafhandeling in SQL Server

Laten we oefenen!

Transacties en foutafhandeling in SQL Server

Preparing Video For Download...