Выбор ответа Middle Транзакции и изоляция обновлено
Как обеспечивается Durability
Вопрос
За счёт чего PostgreSQL гарантирует, что закоммиченные данные переживут внезапное отключение питания?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: При COMMIT записи WAL сбрасываются на диск, после сбоя идёт восстановление. Принцип write-ahead log: изменение сначала попадает в последовательный журнал, и при COMMIT достаточно надёжно записать журнал, а страницы таблиц сбрасываются позже, на чекпоинтах.
Варианты ответа
- При COMMIT записи WAL сбрасываются на диск, после сбоя идёт восстановлениеправильный ответ
- Перед ответом на COMMIT все изменённые страницы таблиц пишутся на диск
- Данные сразу пишутся на реплику, и после сбоя берутся с неё
- За счёт MVCC: старые версии строк остаются на диске до VACUUM
Разбор
Принцип write-ahead log: изменение сначала попадает в последовательный журнал, и при COMMIT достаточно надёжно записать журнал, а страницы таблиц сбрасываются позже, на чекпоинтах. Писать все страницы при каждом коммите было бы слишком медленно. Синхронная реплика повышает надёжность, но не является базовым механизмом. MVCC отвечает за изоляцию, а не за долговечность. Оговорка: synchronous_commit = off ослабляет гарантию ради скорости.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Транзакции и изоляция»
- Advisory-блокировки в PostgreSQL
- Как избежать deadlock при переводах
- Взаимоблокировки: как ловить и предотвращать
- Долгая транзакция и раздувание таблиц
- MVCC и VACUUM в PostgreSQL
- VACUUM или VACUUM FULL на проде
- Зачем нужна заморозка и что такое wraparound
- Что делает PostgreSQL при deadlock