Что такое блокировки предикатов (Predicate Locks) в контексте уровня изоляции Serializable? Как СУБД отслеживает условия в запросах SELECT ... WHERE ..., чтобы предотвратить аномалию перекоса записи (Write Skew), не блокируя всю таблицу целиком?

В PostgreSQL Serializable отметки SIREAD отслеживают прочитанные области и зависимости, а не блокируют запись как обычный lock. Опасная комбинация зависимостей приводит к serialization failure.

Короткий ответ

Что ответить на собеседовании

В PostgreSQL Serializable отметки SIREAD отслеживают прочитанные области и зависимости, а не блокируют запись как обычный lock. Опасная комбинация зависимостей приводит к serialization failure.

Подробный разбор

Ответ с пояснениями

В PostgreSQL Serializable отметки SIREAD отслеживают прочитанные области и зависимости, а не блокируют запись как обычный lock. Опасная комбинация зависимостей приводит к serialization failure.

СУБД учитывает чтения и пересекающиеся записи, в том числе появление строк, подходящих условию. Гранулярность зависит от плана и может укрупняться от tuple/page до relation; поэтому обещание «никогда не затронет всю таблицу» неверно. Такие отметки не означают остановку всей таблицы, но укрупнение может увеличить ложные конфликты. При write skew одну транзакцию приходится повторить целиком. Другие СУБД могут реализовывать Serializable иначе, например range locks.

Источник: www.postgresql.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее