В PostgreSQL Serializable отметки SIREAD отслеживают прочитанные области и зависимости, а не блокируют запись как обычный lock. Опасная комбинация зависимостей приводит к serialization failure.
Что такое блокировки предикатов (Predicate Locks) в контексте уровня изоляции Serializable? Как СУБД отслеживает условия в запросах SELECT ... WHERE ..., чтобы предотвратить аномалию перекоса записи (Write Skew), не блокируя всю таблицу целиком?
В PostgreSQL Serializable отметки SIREAD отслеживают прочитанные области и зависимости, а не блокируют запись как обычный lock. Опасная комбинация зависимостей приводит к serialization failure.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В PostgreSQL Serializable отметки SIREAD отслеживают прочитанные области и зависимости, а не блокируют запись как обычный lock. Опасная комбинация зависимостей приводит к serialization failure.
СУБД учитывает чтения и пересекающиеся записи, в том числе появление строк, подходящих условию. Гранулярность зависит от плана и может укрупняться от tuple/page до relation; поэтому обещание «никогда не затронет всю таблицу» неверно. Такие отметки не означают остановку всей таблицы, но укрупнение может увеличить ложные конфликты. При write skew одну транзакцию приходится повторить целиком. Другие СУБД могут реализовывать Serializable иначе, например range locks.
Источник: www.postgresql.org.