READ COMMITTED & REPEATABLE READ

Transakce a zpracování chyb v SQL Serveru

Miriam Antona

Software Engineer

READ COMMITTED

  • Výchozí úroveň izolace
  • Nelze číst data upravená jinou transakcí, která ještě nebyla potvrzena nebo vrácena zpět
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Transakce a zpracování chyb v SQL Serveru

READ COMMITTED – porovnání úrovní izolace

Špinavá čtení Neopakovatelná čtení Fantomová čtení
READ UNCOMMITTED ano ano ano
READ COMMITTED ne ano ano
Transakce a zpracování chyb v SQL Serveru

READ COMMITTED – zamezení špinavým čtením

Původní zůstatek účtu 5 = 35 000 $

Transakce1

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

Transakce2

...

...

...

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

Musí čekat!

Transakce a zpracování chyb v SQL Serveru

READ COMMITTED – zamezení špinavým čtením

Původní zůstatek účtu 5 = 35 000 $

Transakce1

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

COMMIT TRAN;

Transakce2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00        |
Transakce a zpracování chyb v SQL Serveru

READ COMMITTED – čtení bez čekání

Transakce1

BEGIN TRAN
  SELECT current_balance
  FROM accounts WHERE account_id = 5;

Transakce2

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
Transakce a zpracování chyb v SQL Serveru

READ COMMITTED – shrnutí

Výhody:

  • Zamezuje špinavým čtením

Nevýhody:

  • Povoluje neopakovatelná a fantomová čtení
  • Může být blokováno jinou transakcí

Kdy jej použít?:

  • Chcete číst pouze potvrzená data, ale nevadí vám neopakovatelná a fantomová čtení
Transakce a zpracování chyb v SQL Serveru

REPEATABLE READ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
  • Nelze číst nepotvrzená data z jiných transakcí
  • Přečtená data nemohou být jinými transakcemi změněna, dokud transakce REPEATABLE READ neskončí
Transakce a zpracování chyb v SQL Serveru

REPEATABLE READ – porovnání úrovní izolace

Špinavá čtení Neopakovatelná čtení Fantomová čtení
READ UNCOMMITTED ano ano ano
READ COMMITTED ne ano ano
REPEATABLE READ ne ne ano
Transakce a zpracování chyb v SQL Serveru

REPEATABLE READ – zamezení neopakovatelným čtením

Transakce1

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

Transakce2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Musí čekat!

Transakce a zpracování chyb v SQL Serveru

REPEATABLE READ – zamezení neopakovatelným čtením

Transakce1

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

Transakce2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Musí čekat!

Transakce a zpracování chyb v SQL Serveru

REPEATABLE READ – zamezení neopakovatelným čtením

Transakce1

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

Transakce2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 rows affected)
Transakce a zpracování chyb v SQL Serveru

REPEATABLE READ – shrnutí

Výhody:

  • Zamezuje jiným transakcím měnit čtená data, neopakovatelným čtením
  • Zamezuje špinavým čtením

Nevýhody:

  • Povoluje fantomová čtení
  • Může být blokováno transakcí REPEATABLE READ

Kdy jej použít?:

  • Chcete číst pouze potvrzená data a nechcete, aby jiné transakce měnily čtená data. Fantomová čtení vám nevadí
Transakce a zpracování chyb v SQL Serveru

Lass uns üben!

Transakce a zpracování chyb v SQL Serveru

Preparing Video For Download...