READ COMMITTED & REPEATABLE READ

Transakcje i obsługa błędów w SQL Server

Miriam Antona

Software Engineer

READ COMMITTED

  • Domyślny poziom izolacji
  • Nie można odczytywać danych zmodyfikowanych przez inną transakcję, która nie została zatwierdzona ani wycofana
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Transakcje i obsługa błędów w SQL Server

READ COMMITTED – porównanie poziomów izolacji

Brudne odczyty Odczyty niepowtarzalne Odczyty fantomowe
READ UNCOMMITTED tak tak tak
READ COMMITTED nie tak tak
Transakcje i obsługa błędów w SQL Server

READ COMMITTED – zapobieganie brudnym odczytom

Pierwotne saldo konta 5 = 35 000 USD

Transakcja1

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

Transakcja2

...

...

...

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

Musi czekać!

Transakcje i obsługa błędów w SQL Server

READ COMMITTED – zapobieganie brudnym odczytom

Pierwotne saldo konta 5 = 35 000 USD

Transakcja1

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

COMMIT TRAN;

Transakcja2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00        |
Transakcje i obsługa błędów w SQL Server

READ COMMITTED – odczyt bez oczekiwania

Transakcja1

BEGIN TRAN
  SELECT current_balance
  FROM accounts WHERE account_id = 5;

Transakcja2

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
Transakcje i obsługa błędów w SQL Server

READ COMMITTED – podsumowanie

Zalety:

  • Zapobiega brudnym odczytom

Wady:

  • Dopuszcza odczyty niepowtarzalne i fantomowe
  • Może być blokowany przez inną transakcję

Kiedy stosować?:

  • Gdy chcesz odczytywać tylko zatwierdzone dane, bez odczytów niepowtarzalnych i fantomowych
Transakcje i obsługa błędów w SQL Server

REPEATABLE READ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
  • Nie można odczytywać niezatwierdzonych danych z innych transakcji
  • Jeśli dane zostały odczytane, inne transakcje nie mogą ich modyfikować, dopóki transakcja REPEATABLE READ nie zakończy się
Transakcje i obsługa błędów w SQL Server

REPEATABLE READ – porównanie poziomów izolacji

Brudne odczyty Odczyty niepowtarzalne Odczyty fantomowe
READ UNCOMMITTED tak tak tak
READ COMMITTED nie tak tak
REPEATABLE READ nie nie tak
Transakcje i obsługa błędów w SQL Server

REPEATABLE READ – zapobieganie odczytom niepowtarzalnym

Transakcja1

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

Transakcja2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Musi czekać!

Transakcje i obsługa błędów w SQL Server

REPEATABLE READ – zapobieganie odczytom niepowtarzalnym

Transakcja1

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

Transakcja2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Musi czekać!

Transakcje i obsługa błędów w SQL Server

REPEATABLE READ – zapobieganie odczytom niepowtarzalnym

Transakcja1

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

Transakcja2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 rows affected)
Transakcje i obsługa błędów w SQL Server

REPEATABLE READ – podsumowanie

Zalety:

  • Zapobiega modyfikowaniu odczytywanych danych przez inne transakcje, eliminuje odczyty niepowtarzalne
  • Zapobiega brudnym odczytom

Wady:

  • Dopuszcza odczyty fantomowe
  • Może być blokowany przez transakcję REPEATABLE READ

Kiedy stosować?:

  • Gdy chcesz odczytywać tylko zatwierdzone dane i nie chcesz, aby inne transakcje modyfikowały odczytywane dane. Odczyty fantomowe nie są problemem
Transakcje i obsługa błędów w SQL Server

Ćwiczmy!

Transakcje i obsługa błędów w SQL Server

Preparing Video For Download...