Сериализуемость задаёт последовательную эквивалентность транзакций. Линеаризуемость задаёт допустимую историю операций объекта с порядком завершённых вызовов. Сначала определяют границу операции, затем сравнивают гарантии.
Почему это важно
Если каждая последовательная операция сохраняет правило заказа, сериализуемое выполнение защищает его от несовместимых сочетаний параллельных действий. Это помогает выбрать изоляцию при проверке остатков и лимитов, но не освобождает от правильной логики операции и обработки повторов.
Что подтверждено
Сериализуемое выполнение даёт тот же результат, что выполнение зафиксированных транзакций по одной в некотором порядке. Требование относится ко всей транзакции с её чтениями и изменениями, а не к независимому упорядочению отдельных SQL-команд.
Граница применимости: Гарантия изоляции Serializable в модели SQL.
Сериализуемость сопоставляет целые транзакции с последовательным выполнением. Линеаризуемость сопоставляет операции объекта с его последовательной спецификацией и сохраняет порядок неперекрывающихся вызовов. Это разные единицы гарантии: линеаризуемые чтения отдельных объектов сами не делают группу действий транзакцией.
Граница применимости: Сравнение изоляции транзакций SQL и корректности параллельных объектов по Херлихи и Уинг; линеаризуемость не названа следующим уровнем изоляции SQL.
PostgreSQL Serializable допускает параллельное выполнение и отслеживает опасные зависимости между транзакциями. При необходимости он отклоняет попытку с ошибкой сериализации. Поэтому этот режим не означает ни выполнение всех запросов по очереди, ни отсутствие повторов.
Граница применимости: PostgreSQL 18, сериализуемая изоляция на основе снимков; не обещается минимально возможное число отклонений.
Предикатные блокировки PostgreSQL Serializable служат для обнаружения зависимостей чтения и записи. Сами эти блокировки не задерживают другие транзакции и не вызывают взаимоблокировки; обычные блокировки строк и таблиц при этом продолжают действовать.
Граница применимости: PostgreSQL 18, предикатные блокировки Serializable, а не любые блокировки базы.
Сериализуемость не исправляет правило, которое ошибочно и при последовательной работе. Если транзакция разрешает резерв сверх остатка без нужной проверки, последовательная эквивалентность сохраняет эту ошибку. Ограничения данных и логика операции задают само правило.
Граница применимости: Вывод из гарантии Serializable и роли ограничений PostgreSQL; защита от параллелизма отличается от корректности приложения.
Настройка Serializable в одном соединении не переводит остальные операции в этот режим. Гарантию общего правила проверяют по всем транзакциям, которые читают и меняют участвующие в нём данные, включая фоновые задачи и административные записи.
Граница применимости: PostgreSQL 18: применение рекомендаций Serializable к полной группе операций, от которой зависит правило.
Не путать
MVCC выбирает видимые версии данных. Сериализуемость требует допустимого общего результата транзакций. PostgreSQL использует многоверсионность на нескольких уровнях изоляции, поэтому слово MVCC не подтверждает Serializable.
Что проверить
- Опишите границы одной транзакции и правило, которое она должна сохранять.
- Проверьте это правило сначала при последовательном выполнении.
- Включите в проверку все пути изменения данных, в том числе фоновые задания.
- Испытайте параллельные решения по одному условию, даже если записываются разные строки.
- Подготовьте повтор всей транзакции после ошибки сериализации.
- Измеряйте число повторов на рабочей нагрузке; не обещайте отсутствие конфликтов.
- Требование к чтению после завершённой записи сформулируйте отдельно от названия уровня изоляции.
Первоисточники
PostgreSQL 18 Documentation: Transaction Isolation
PostgreSQL Global Development Group · PostgreSQL 18, Chapter 13.2
Определяет isolation phenomena и фактическое поведение PostgreSQL levels, включая Serializable.
Открыть первоисточникLinearizability: A Correctness Condition for Concurrent Objects
Carnegie Mellon University / ACM · Herlihy and Wing, ACM TOPLAS 12(3), July 1990
Даёт формальное real-time correctness condition для concurrent operations.
Открыть первоисточникPostgreSQL 18 Documentation: Explicit Locking
PostgreSQL Global Development Group · документация PostgreSQL 18, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить блокировки строк SELECT FOR UPDATE, ожидание конкурирующих изменений и срок удержания до конца транзакции.
Открыть первоисточникPostgreSQL 18 Documentation: Constraints
PostgreSQL Global Development Group · документация PostgreSQL 18, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить CHECK и NULL, NOT NULL, UNIQUE и границу проверок одной строки; пример заказа — редакторское применение этих правил.
Открыть первоисточникPostgreSQL 18 Documentation: Introduction to MVCC
PostgreSQL Global Development Group · PostgreSQL 18, Chapter 13.1
Объясняет multiversion snapshots и границу между MVCC и explicit locking.
Открыть первоисточник