Распределённые данные · проверено по источникам

Атомарность транзакции

Атомарность транзакции означает общий исход её транзакционных изменений: они принимаются вместе или отменяются. Это свойство результата в установленной границе, а не обещание выполнить работу одной инструкцией или откатить любой вызванный приложением внешний эффект.

Также ищут: Transaction atomicity · all-or-nothing transaction

Практический смысл

Почему это важно

Если заказ создан, но товар не удалось зарезервировать, приложение должно отменить незавершённую операцию. Проверяйте, какие изменения действительно подчиняются этому откату. Отправленное письмо, внешний платёж и выделенный номер последовательности могут жить по другим правилам — их нельзя использовать как доказательство общего результата заказа.

Доказательная часть

Что подтверждено

  1. Атомарность означает, что транзакционно управляемые изменения имеют общий исход. Зафиксированная транзакция принимает их, а полный откат не оставляет частично принятого логического результата этой транзакции.

    Граница применимости: Транзакционное состояние в заявленной границе; нетранзакционные служебные объекты и независимые внешние действия в неё не включаются автоматически.

  2. Транзакция может включать много команд, инструкций процессора и операций ввода-вывода. Её атомарность описывает общий результат работы, а не выполнение всей работы одной неделимой инструкцией процессора.

    Граница применимости: Сопоставление уровня транзакционной модели и инструкций процессора; не обещание атомарности отдельной машинной команды любого размера.

  3. Откат записи заказа не отзывает уже отправленное письмо и не отменяет платёж в независимой системе, не участвовавшей в транзакции. Приложение должно отдельно определить, как установить исход такого действия и что делать, если база и внешняя система завершились по-разному.

    Граница применимости: Редакторский вывод для независимых внешних эффектов; конкретная компенсация определяется контрактом внешней системы.

  4. ROLLBACK TO в PostgreSQL 18 отменяет изменения после выбранной точки сохранения, но позволяет позже зафиксировать более ранние изменения той же транзакции. Поэтому частичный откат к SAVEPOINT не равен полному ROLLBACK и должен учитываться при проверке состава заказа.

    Граница применимости: PostgreSQL 18, точки сохранения явного блока транзакции; итогом может быть фиксация только сохранённой части работы.

  5. В PostgreSQL 18 номер, выделенный последовательностью через nextval, не возвращается ей при откате транзакции. Если неудачная запись заказа уже получила следующий номер, он может остаться пропущенным. Пробел в последовательности сам по себе не доказывает, что сохранённый заказ был удалён.

    Граница применимости: PostgreSQL 18, выделение значения через nextval и последующий откат транзакции; не все операции изменения последовательности. Пример заказа относится к схеме, использующей этот способ нумерации.

  6. Общий исход изменений и их видимость конкурентным читателям — разные свойства. Атомарность не выбирает уровень изоляции: режим, допускающий грязное чтение, позволяет наблюдать чужие ещё не зафиксированные данные, даже если последующий откат отменит изменения записывающей транзакции.

    Граница применимости: Общая модель SQL-аномалий и свойств транзакций; PostgreSQL 18 грязное чтение не допускает ни на одном своём уровне.

Граница терминов

Не путать

Изоляция транзакций

Атомарность определяет общий исход изменений. Изоляция ограничивает взаимодействие параллельных транзакций до и после этого решения. Проверка полного отката не заменяет тест двух конкурентных продаж.

Долговечность транзакции

Атомарность защищает от частично принятого результата, долговечность — от утраты принятого результата при предусмотренном отказе. Их можно различить на PostgreSQL: ослабление ожидания устойчивой записи может оставить окно потери последних подтверждённых транзакций без превращения их в частичные записи.

Перед спецификацией

Что проверить

  1. Перечислите все изменения заказа, которые должны иметь один общий исход, включая резерв и связанные строки.
  2. Поставьте контролируемый отказ после каждого изменения и проверьте состояние после полного отката.
  3. Установите, не выполняет ли драйвер промежуточную автоматическую фиксацию.
  4. Если используются SAVEPOINT, отдельно перечислите, что сохраняется после каждого частичного отката.
  5. Проверьте результат внешней оплаты или уведомления после отката базы; не считайте его отменённым по состоянию SQL-транзакции.
  6. Отдельно проверьте выделение номера последовательностью и откат записи заказа; не восстанавливайте историю продаж по одним пропускам номеров.
  7. Разведите испытания атомарности, конкурентной видимости и сохранности после аварии: у них разные условия успешного прохождения.
Открытые основания

Первоисточники

  • Первичная публикация

    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 и условия ожидания синхронных реплик.

    Открыть первоисточник
Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие