READ COMMITTED & REPEATABLE READ

Транзакції та обробка помилок у SQL Server

Miriam Antona

Software Engineer

READ COMMITTED

  • Рівень ізоляції за замовчуванням
  • Не можна читати дані, змінені іншою транзакцією, яка ще не виконала COMMIT або ROLLBACK
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Транзакції та обробка помилок у SQL Server

READ COMMITTED — порівняння рівнів ізоляції

Брудні читання Неповторювані читання Фантомні читання
READ UNCOMMITTED так так так
READ COMMITTED ні так так
Транзакції та обробка помилок у SQL Server

READ COMMITTED — запобігання брудним читанням

Початковий баланс рахунку 5 = $35,000

Transaction1

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

Transaction2

...

...

...

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

Має чекати!

Транзакції та обробка помилок у SQL Server

READ COMMITTED — запобігання брудним читанням

Початковий баланс рахунку 5 = $35,000

Transaction1

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

COMMIT TRAN;

Transaction2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00        |
Транзакції та обробка помилок у SQL Server

READ COMMITTED — вибірка без очікування

Transaction1

BEGIN TRAN
  SELECT current_balance
  FROM accounts WHERE account_id = 5;

Transaction2

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
Транзакції та обробка помилок у SQL Server

READ COMMITTED — підсумок

Плюси:

  • Забороняє брудні читання

Мінуси:

  • Дозволяє неповторювані й фантомні читання
  • Інша транзакція може вас заблокувати

Коли використовувати?:

  • Потрібно читати лише зафіксовані дані; неповторювані й фантомні читання не критичні
Транзакції та обробка помилок у SQL Server

REPEATABLE READ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
  • Не можна читати незафіксовані дані інших транзакцій
  • Якщо дані прочитано, інші транзакції не можуть їх змінювати, доки транзакція REPEATABLE READ не завершиться
Транзакції та обробка помилок у SQL Server

REPEATABLE READ — порівняння рівнів ізоляції

Брудні читання Неповторювані читання Фантомні читання
READ UNCOMMITTED так так так
READ COMMITTED ні так так
REPEATABLE READ ні ні так
Транзакції та обробка помилок у SQL Server

REPEATABLE READ — запобігання неповторюваним читанням

Transaction1

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

Transaction2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Має чекати!

Транзакції та обробка помилок у SQL Server

REPEATABLE READ — запобігання неповторюваним читанням

Transaction1

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

Transaction2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Має чекати!

Транзакції та обробка помилок у SQL Server

REPEATABLE READ — запобігання неповторюваним читанням

Transaction1

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

Transaction2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 рядок змінено)
Транзакції та обробка помилок у SQL Server

REPEATABLE READ — підсумок

Плюси:

  • Блокує інші транзакції від зміни даних, які ви читаєте; немає неповторюваних читань
  • Запобігає брудним читанням

Мінуси:

  • Дозволяє фантомні читання
  • Вас може заблокувати транзакція REPEATABLE READ.

Коли використовувати?:

  • Потрібно читати лише зафіксовані дані й не дозволяти іншим змінювати те, що ви читаєте; фантомні читання не критичні
Транзакції та обробка помилок у SQL Server

Давайте потренуємось!

Транзакції та обробка помилок у SQL Server

Preparing Video For Download...