Фиксация принимает результат транзакции. Долговечность описывает, какой отказ принятый результат переживёт. У PostgreSQL 18 ослабленный synchronous_commit меняет момент подтверждения, поэтому само слово COMMIT без настроек не задаёт достаточную гарантию хранения.
Долговечность транзакции
Определение
Долговечность транзакции — сохранность подтверждённого результата при отказах, которые входят в заявленную гарантию. Поэтому гарантия имеет смысл только с перечнем отказов: заказ по-разному переживает сбой процесса, перезапуск узла и утрату единственного носителя.
Также ищут: Transaction durability · durability в ACID
Зачем это знать
Заказ, подтверждённый до аварии, может быть важнее последних миллисекунд ответа. Согласуйте, когда база вправе сообщить об успехе и какая копия должна пережить требуемый отказ. При выборе тракта хранения проверяют выполнение команд устойчивой записи; при выборе репликации — отдельную пригодную копию и этап, которого ждёт фиксация.
Карта понятия
Что подтверждено
Долговечность связывает принятое подтверждение фиксации с сохранением результата при предусмотренном отказе. Гарантия требует точного условия: сохранённый локально журнал помогает при восстановлении того же хранилища, а полная утрата единственного носителя требует другой пригодной копии.
Граница применимости: Модель долговечности и механизмы PostgreSQL 18; логическая сохранность, независимая реплика и защита от утраты носителя не отождествляются.
Надёжная фиксация текущего состояния может столь же надёжно сохранить ошибочное удаление. Возврат к состоянию до ошибки требует сохранённой истории и работоспособного пути восстановления; одна долговечность этой истории не создаёт.
Граница применимости: Долговечность в сравнении с восстановлением после логической ошибки; PostgreSQL 18 PITR — конкретный пример механизма истории.
В PostgreSQL 18 долговечная фиксация не требует сразу записывать все изменённые страницы таблиц. Достаточно устойчиво сохранить нужные записи WAL: после сбоя журнал позволяет повторить ещё не перенесённые в файлы данных изменения.
Граница применимости: PostgreSQL 18, правило предварительной записи журнала и восстановление при сохранном необходимом хранилище; не режим synchronous_commit=off.
В PostgreSQL 18 synchronous_commit=off позволяет сообщить об успехе до устойчивой записи WAL. При сбое последние уже подтверждённые транзакции могут быть потеряны; это ослабление долговечности не означает допустимость частично выполненных транзакций в восстановленной базе.
Граница применимости: PostgreSQL 18, асинхронная фиксация при корректно работающем fsync; её последствия отличаются от отключения fsync.
В PostgreSQL 18 отключение fsync убирает требуемую защиту порядка и устойчивости записи при аварии и может привести к повреждению базы. Это другой риск, чем окно потери последних транзакций при synchronous_commit=off; режимы нельзя считать взаимозаменяемой настройкой ускорения.
Граница применимости: PostgreSQL 18, параметры fsync и synchronous_commit; предполагается авария, затрагивающая ещё неустойчивые записи.
При настроенных синхронных репликах PostgreSQL 18 remote_write ждёт записи в файловую систему реплики, on — устойчивой записи её WAL, remote_apply — применения, после которого изменения доступны новым подходящим снимкам чтения. Уже открытый старый снимок Repeatable Read от этого не обновляется. Переживаемые отказы и момент видимости различаются.
Граница применимости: PostgreSQL 18, synchronous_commit и требуемые синхронные реплики. remote_write не обещает пережить отказ ОС реплики; без настроенных синхронных реплик удалённое ожидание не возникает.
Гарантия устойчивой записи зависит от того, что весь тракт хранения действительно выполняет запросы сброса. Если оборудование сообщает об устойчивом сохранении, а данные остаются только в теряемом при питании кэше, успешное ожидание со стороны базы не доказывает сохранность после потери питания.
Граница применимости: Требования PostgreSQL 18 к надёжности fsync и физической записи; конкретные контроллер, накопитель и режим кэша требуют собственных паспортных и испытательных данных.
Не путать
Долговечность защищает принятое состояние в оговорённой модели отказов. Проверенное восстановление подтверждает достижение нужного состояния из доступных материалов. Для отмены ошибочного удаления требуется подходящая сохранённая история, даже если удаление было безупречно зафиксировано.
Что проверить
- Согласуйте событие подтверждения заказа и отдельно перечислите покрываемые отказы процесса, ОС, питания, носителя и площадки.
- Снимите действующие значения fsync и synchronous_commit в том соединении, которое фиксирует заказ.
- Для синхронного режима проверьте, какие реплики обязательны и какого удалённого этапа ждёт фиксация.
- Проверьте по документации и испытаниям, как контроллер и накопители выполняют сброс и что происходит с кэшем при потере питания.
- На отдельном стенде воспроизведите предусмотренный аварийный отказ и сопоставьте подтверждённые операции с восстановленными.
- Не требуйте немедленной записи всех страниц как единственного доказательства: отдельно проверяйте сохранность и пригодность необходимого WAL.
- Выполните восстановление до тестового ошибочного удаления из независимых материалов и проверьте состояние заказа в приложении.
Первоисточники
- The Transaction Model — Turing Award Lecture
Первичный обзор transaction model, ACID, concurrency anomalies, logs и two-phase commit.
Утверждения: 01
- PostgreSQL 18 Documentation: Write-Ahead Logging
Описывает порядок устойчивой записи WAL до изменённых страниц, восстановление страниц из журнала после сбоя и фиксацию транзакций без обязательного сброса всех изменённых страниц.
- PostgreSQL 18 Documentation: Log-Shipping Standby Servers
Фиксирует async default, synchronous commit wait points и связь replication delay с data loss.
- PostgreSQL 18 Documentation: Continuous Archiving and Point-in-Time Recovery
Связывает base backup, непрерывный WAL archive и проверяемый recovery target.
Утверждения: 02
- PostgreSQL 18 Documentation: WAL Configuration
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить fsync, synchronous_commit=off/on/remote_write/remote_apply и условия ожидания синхронных реплик.
- PostgreSQL 18 Documentation: Transaction Isolation
Определяет isolation phenomena и фактическое поведение PostgreSQL levels, включая Serializable.
Утверждения: 06
- PostgreSQL 18 Documentation: Reliability
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить выполнение сброса всем трактом хранения, энергозависимые кэши накопителя и контроллера и границы гарантии при потере питания.
Утверждения: 07
- PostgreSQL 18 Documentation: Transactions
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить границы BEGIN/COMMIT/ROLLBACK, отдельные транзакции без BEGIN, точки сохранения и оговорку о поведении клиентских библиотек.