Выбор ответа Middle Транзакции и изоляция обновлено

Как обеспечивается Durability

Вопрос

За счёт чего PostgreSQL гарантирует, что закоммиченные данные переживут внезапное отключение питания?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: При COMMIT записи WAL сбрасываются на диск, после сбоя идёт восстановление. Принцип write-ahead log: изменение сначала попадает в последовательный журнал, и при COMMIT достаточно надёжно записать журнал, а страницы таблиц сбрасываются позже, на чекпоинтах.

Варианты ответа

  1. При COMMIT записи WAL сбрасываются на диск, после сбоя идёт восстановлениеправильный ответ
  2. Перед ответом на COMMIT все изменённые страницы таблиц пишутся на диск
  3. Данные сразу пишутся на реплику, и после сбоя берутся с неё
  4. За счёт MVCC: старые версии строк остаются на диске до VACUUM

Разбор

Принцип write-ahead log: изменение сначала попадает в последовательный журнал, и при COMMIT достаточно надёжно записать журнал, а страницы таблиц сбрасываются позже, на чекпоинтах. Писать все страницы при каждом коммите было бы слишком медленно. Синхронная реплика повышает надёжность, но не является базовым механизмом. MVCC отвечает за изоляцию, а не за долговечность. Оговорка: synchronous_commit = off ослабляет гарантию ради скорости.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме