Атомарность определяет общий исход изменений. Изоляция ограничивает взаимодействие параллельных транзакций до и после этого решения. Проверка полного отката не заменяет тест двух конкурентных продаж.
Атомарность транзакции
Определение
Атомарность транзакции — свойство «всё или ничего»: изменения, которыми управляет транзакция, либо принимаются вместе, либо вместе отменяются. Граница правила — сама транзакция: письмо, платёж во внешней системе и выданный последовательностью номер откату не подчиняются.
Также ищут: Transaction atomicity · all-or-nothing transaction
Зачем это знать
Если заказ создан, но товар не удалось зарезервировать, приложение должно отменить незавершённую операцию. Проверяйте, какие изменения действительно подчиняются этому откату. Отправленное письмо, внешний платёж и выделенный номер последовательности могут жить по другим правилам — их нельзя использовать как доказательство общего результата заказа.
Карта понятия
Что подтверждено
Атомарность означает, что транзакционно управляемые изменения имеют общий исход. Зафиксированная транзакция принимает их, а полный откат не оставляет частично принятого логического результата этой транзакции.
Граница применимости: Транзакционное состояние в заявленной границе; нетранзакционные служебные объекты и независимые внешние действия в неё не включаются автоматически.
Транзакция может включать много команд, инструкций процессора и операций ввода-вывода. Её атомарность описывает общий результат работы, а не выполнение всей работы одной неделимой инструкцией процессора.
Граница применимости: Сопоставление уровня транзакционной модели и инструкций процессора; не обещание атомарности отдельной машинной команды любого размера.
Откат записи заказа не отзывает уже отправленное письмо и не отменяет платёж в независимой системе, не участвовавшей в транзакции. Приложение должно отдельно определить, как установить исход такого действия и что делать, если база и внешняя система завершились по-разному.
Граница применимости: Редакторский вывод для независимых внешних эффектов; конкретная компенсация определяется контрактом внешней системы.
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
Первичный обзор transaction model, ACID, concurrency anomalies, logs и two-phase commit.
- PostgreSQL 18 Documentation: Transactions
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить границы BEGIN/COMMIT/ROLLBACK, отдельные транзакции без BEGIN, точки сохранения и оговорку о поведении клиентских библиотек.
- Intel 64 and IA-32 Architectures Software Developer Manuals
Официальное описание архитектуры, программной модели и полного набора инструкций Intel 64 и IA-32.
Утверждения: 02
- PostgreSQL 18 Documentation: PREPARE TRANSACTION
Описывает prepared transaction, external transaction manager и operational risk forgotten prepared state.
Утверждения: 03
- PostgreSQL 18 Documentation: Transaction Isolation
Определяет isolation phenomena и фактическое поведение PostgreSQL levels, включая Serializable.
- PostgreSQL 18 Documentation: WAL Configuration
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить fsync, synchronous_commit=off/on/remote_write/remote_apply и условия ожидания синхронных реплик.