IT-словарь › Базы данных › Перекос записи (write skew)

Перекос записи (write skew)

Базы данных Svenska → Обновлено: 2026-10-18

Аномалия конкурентности: две транзакции читают пересекающиеся данные и обе обновляют их на основе увиденного, а итоговое состояние оказывается некорректным, хотя каждая транзакция изолирована. Snapshot isolation это допускает, SERIALIZABLE — нет.

Классический пример: правило больницы «на дежурстве должен быть хотя бы один врач». Транзакция 1: врач A проверяет, можно ли взять отгул, — count(on_call) = 2, можно. Транзакция 2: врач B делает то же самое — тоже 2, можно. Обе ставят on_call = false. Итог: на дежурстве ноль врачей. Обе видели состояние с двумя врачами, обе были изолированы и успешно зафиксированы, но вместе дали недопустимый результат. Защита: изоляция SERIALIZABLE (SSI), явные блокировки строк (FOR UPDATE), проверка ограничений на уровне приложения. PostgreSQL в режиме SERIALIZABLE обнаруживает write skew и откатывает одну из транзакций.

← Назад к словарю