IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Уровни изоляции транзакций SQL

Уровни изоляции транзакций

Уровень изоляции транзакции определяет степень независимости выполняемых транзакций друг от друга. Он влияет на конкурентный доступ к данным и балансирует между производительностью и целостностью данных.

Стандарт SQL определяет четыре уровня изоляции:

Уровень Грязное чтение Неповторяющееся чтение Фантомное чтение
READ UNCOMMITTED Да Да Да
READ COMMITTED (по умолчанию в PostgreSQL, Oracle) Нет Да Да
REPEATABLE READ (по умолчанию в MySQL) Нет Нет Да
SERIALIZABLE Нет Нет Нет

 

1. READ UNCOMMITTED (Чтение неподтверждённых данных)

Транзакция может читать данные, которые ещё не зафиксированы (COMMIT) в другой транзакции.

Плюсы:

  • Минимальная блокировка, высокая скорость работы.

Минусы:

  • Возможны грязные чтения (dirty reads) — чтение неподтвержденных изменений, которые могут быть откатаны (ROLLBACK).

Пример в PostgreSQL:

2. READ COMMITTED (Чтение подтверждённых данных)

Транзакция читает только те данные, которые уже зафиксированы (COMMIT).

Плюсы:

  • Исключает грязное чтение.
  • Высокая производительность.

Минусы:

  • Возможны неповторяющиеся чтения (non-repeatable read), когда один и тот же запрос внутри транзакции возвращает разные данные, если параллельная транзакция изменила и закоммитила их.

Пример в PostgreSQL:

3. REPEATABLE READ (Повторяемость чтения)

Транзакция фиксирует состояние строк на момент первого чтения и всегда видит одни и те же данные, даже если другая транзакция их изменила.

Плюсы:

  • Исключает грязное чтение и неповторяющееся чтение.

Минусы:

  • Возможны фантомные чтения (phantom reads), если другая транзакция добавит новые строки.

Пример в PostgreSQL:

4. SERIALIZABLE (Полная изоляция)

Максимальная изоляция — транзакции выполняются как будто по очереди.

Плюсы:

  • Исключает грязные, неповторяющиеся и фантомные чтения.
  • Гарантирует целостность данных.

Минусы:

  • Сильное падение производительности из-за блокировок и возможных откатов транзакций.

Пример в PostgreSQL:

Какой уровень выбрать?

Уровень Когда использовать?
READ UNCOMMITTED Не рекомендуется (только для аналитики, где важна скорость, а не точность).
READ COMMITTED Подходит для большинства систем. Хороший баланс между изоляцией и производительностью.
REPEATABLE READ Используется, если важно защититься от изменения уже прочитанных данных (например, при обработке заказов).
SERIALIZABLE Применяется, когда нужна максимальная защита (например, в банковских операциях).

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *