Распределённые данные

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

Определение

Атомарность транзакции — свойство «всё или ничего»: изменения, которыми управляет транзакция, либо принимаются вместе, либо вместе отменяются. Граница правила — сама транзакция: письмо, платёж во внешней системе и выданный последовательностью номер откату не подчиняются.

Также ищут: 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. Разведите испытания атомарности, конкурентной видимости и сохранности после аварии: у них разные условия успешного прохождения.
Открытые основания

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

  • Стандарт1
  • Исследование1
  • Документация4
  • Первичная публикация
    The Transaction Model — Turing Award Lecture Microsoft Research / ACM · Jim Gray, FCRC 1999 lecture slides · проверено

    Первичный обзор transaction model, ACID, concurrency anomalies, logs и two-phase commit.

    Утверждения: 01 · 02 · 06

  • Официальная документация
    PostgreSQL 18 Documentation: Transactions PostgreSQL Global Development Group · документация PostgreSQL 18, страница открыта 7 сентября 2026 года · проверено

    Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить границы BEGIN/COMMIT/ROLLBACK, отдельные транзакции без BEGIN, точки сохранения и оговорку о поведении клиентских библиотек.

    Утверждения: 01 · 03 · 04 · 05

  • Первичная спецификация
    Intel 64 and IA-32 Architectures Software Developer Manuals Intel · Version 092, обновлено 19 августа 2026 года · проверено

    Официальное описание архитектуры, программной модели и полного набора инструкций Intel 64 и IA-32.

    Утверждения: 02

  • Официальная документация
    PostgreSQL 18 Documentation: PREPARE TRANSACTION PostgreSQL Global Development Group · PostgreSQL 18 SQL command reference · проверено

    Описывает prepared transaction, external transaction manager и operational risk forgotten prepared state.

    Утверждения: 03

  • Официальная документация
    PostgreSQL 18 Documentation: Transaction Isolation PostgreSQL Global Development Group · PostgreSQL 18, Chapter 13.2 · проверено

    Определяет isolation phenomena и фактическое поведение PostgreSQL levels, включая Serializable.

    Утверждения: 05 · 06

  • Официальная документация
    PostgreSQL 18 Documentation: WAL Configuration PostgreSQL Global Development Group · документация PostgreSQL 18, страница открыта 7 сентября 2026 года · проверено

    Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить fsync, synchronous_commit=off/on/remote_write/remote_apply и условия ожидания синхронных реплик.

Карта знаний

Связанные понятия

Из знания — в навык

Курсы по теме

Подтвердите действие