Загрузка…
Загрузка…
Уровни изоляции определяют, насколько «видимы» изменения параллельных транзакций друг для друга. Чем выше уровень изоляции, тем меньше аномалий, но обычно это приводит к более высоким затратам на производительность и параллелизм.
низший уровень;
позволяет читать нефиксированные изменения (dirty read).
считываются только зафиксированные данные;
грязное чтение запрещено;
возможно неповторяющееся чтение и фантомное чтение.
повторное чтение одних и тех же строк внутри транзакции дает один и тот же результат;
уменьшает часть аномалий, но в зависимости от СУБД, фантомных сценариев может остаться.
самый строгий уровень;
гарантирует результат, эквивалентный последовательному выполнению транзакций;
— максимальная защита от аномалий, но дороже с точки зрения параллелизма.
Выбор уровня изоляции — это баланс между корректностью и производительностью. В производстве это определяется из инвариантов домена: где достаточно Read Committed, а где требуется Repeatable Read или Serializable.
BEGIN;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SELECT balance FROM accounts WHERE id = 1;
-- ... інші операції в межах тієї ж транзакції
COMMIT;Уровни изоляции определяют, насколько «видимы» изменения параллельных транзакций друг для друга.
