Атомарность определяет общий исход изменений. Изоляция ограничивает взаимодействие параллельных транзакций до и после этого решения. Проверка полного отката не заменяет тест двух конкурентных продаж.
Почему это важно
Если заказ создан, но товар не удалось зарезервировать, приложение должно отменить незавершённую операцию. Проверяйте, какие изменения действительно подчиняются этому откату. Отправленное письмо, внешний платёж и выделенный номер последовательности могут жить по другим правилам — их нельзя использовать как доказательство общего результата заказа.
Что подтверждено
Атомарность означает, что транзакционно управляемые изменения имеют общий исход. Зафиксированная транзакция принимает их, а полный откат не оставляет частично принятого логического результата этой транзакции.
Граница применимости: Транзакционное состояние в заявленной границе; нетранзакционные служебные объекты и независимые внешние действия в неё не включаются автоматически.
Транзакция может включать много команд, инструкций процессора и операций ввода-вывода. Её атомарность описывает общий результат работы, а не выполнение всей работы одной неделимой инструкцией процессора.
Граница применимости: Сопоставление уровня транзакционной модели и инструкций процессора; не обещание атомарности отдельной машинной команды любого размера.
Откат записи заказа не отзывает уже отправленное письмо и не отменяет платёж в независимой системе, не участвовавшей в транзакции. Приложение должно отдельно определить, как установить исход такого действия и что делать, если база и внешняя система завершились по-разному.
Граница применимости: Редакторский вывод для независимых внешних эффектов; конкретная компенсация определяется контрактом внешней системы.
ROLLBACK TO в PostgreSQL 18 отменяет изменения после выбранной точки сохранения, но позволяет позже зафиксировать более ранние изменения той же транзакции. Поэтому частичный откат к SAVEPOINT не равен полному ROLLBACK и должен учитываться при проверке состава заказа.
Граница применимости: PostgreSQL 18, точки сохранения явного блока транзакции; итогом может быть фиксация только сохранённой части работы.
В PostgreSQL 18 номер, выделенный последовательностью через nextval, не возвращается ей при откате транзакции. Если неудачная запись заказа уже получила следующий номер, он может остаться пропущенным. Пробел в последовательности сам по себе не доказывает, что сохранённый заказ был удалён.
Граница применимости: PostgreSQL 18, выделение значения через nextval и последующий откат транзакции; не все операции изменения последовательности. Пример заказа относится к схеме, использующей этот способ нумерации.
Общий исход изменений и их видимость конкурентным читателям — разные свойства. Атомарность не выбирает уровень изоляции: режим, допускающий грязное чтение, позволяет наблюдать чужие ещё не зафиксированные данные, даже если последующий откат отменит изменения записывающей транзакции.
Граница применимости: Общая модель SQL-аномалий и свойств транзакций; PostgreSQL 18 грязное чтение не допускает ни на одном своём уровне.
Не путать
Атомарность защищает от частично принятого результата, долговечность — от утраты принятого результата при предусмотренном отказе. Их можно различить на PostgreSQL: ослабление ожидания устойчивой записи может оставить окно потери последних подтверждённых транзакций без превращения их в частичные записи.
Что проверить
- Перечислите все изменения заказа, которые должны иметь один общий исход, включая резерв и связанные строки.
- Поставьте контролируемый отказ после каждого изменения и проверьте состояние после полного отката.
- Установите, не выполняет ли драйвер промежуточную автоматическую фиксацию.
- Если используются SAVEPOINT, отдельно перечислите, что сохраняется после каждого частичного отката.
- Проверьте результат внешней оплаты или уведомления после отката базы; не считайте его отменённым по состоянию SQL-транзакции.
- Отдельно проверьте выделение номера последовательностью и откат записи заказа; не восстанавливайте историю продаж по одним пропускам номеров.
- Разведите испытания атомарности, конкурентной видимости и сохранности после аварии: у них разные условия успешного прохождения.
Первоисточники
The Transaction Model — Turing Award Lecture
Microsoft Research / ACM · Jim Gray, FCRC 1999 lecture slides
Первичный обзор transaction model, ACID, concurrency anomalies, logs и two-phase commit.
Открыть первоисточникPostgreSQL 18 Documentation: Transactions
PostgreSQL Global Development Group · документация PostgreSQL 18, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить границы BEGIN/COMMIT/ROLLBACK, отдельные транзакции без BEGIN, точки сохранения и оговорку о поведении клиентских библиотек.
Открыть первоисточникIntel 64 and IA-32 Architectures Software Developer Manuals
Intel · Version 092, обновлено 19 августа 2026 года
Официальное описание архитектуры, программной модели и полного набора инструкций Intel 64 и IA-32.
Открыть первоисточникPostgreSQL 18 Documentation: PREPARE TRANSACTION
PostgreSQL Global Development Group · PostgreSQL 18 SQL command reference
Описывает prepared transaction, external transaction manager и operational risk forgotten prepared state.
Открыть первоисточникPostgreSQL 18 Documentation: Transaction Isolation
PostgreSQL Global Development Group · PostgreSQL 18, Chapter 13.2
Определяет isolation phenomena и фактическое поведение PostgreSQL levels, включая Serializable.
Открыть первоисточникPostgreSQL 18 Documentation: WAL Configuration
PostgreSQL Global Development Group · документация PostgreSQL 18, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить fsync, synchronous_commit=off/on/remote_write/remote_apply и условия ожидания синхронных реплик.
Открыть первоисточник