> За счет чего достигается durability в PostgreSQL? (Go)
Уровень: middle · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: InDrive
Стек: Go, PostgreSQL
> Пример ответа
Durability в PostgreSQL обеспечивается в первую очередь механизмом Write-Ahead Logging (WAL). Все изменения данных сначала записываются в журнал предзаписи (WAL) на диск, и только после этого фиксируются в самих таблицах (data pages). При сбое системы PostgreSQL при восстановлении (recovery) проигрывает WAL-записи, восстанавливая все завершённые транзакции, что гарантирует сохранность данных.
Ключевые элементы:
- Синхронная фиксация WAL: По умолчанию параметр
synchronous_commit = onзаставляет сервер ждать, пока WAL-запись транзакции будет физически записана на диск (с помощьюfsync), прежде чем вернуть клиенту подтверждение COMMIT. - Надёжное хранение: PostgreSQL использует
fsyncдля сброса буферов ОС на диск, а также поддерживает контрольные суммы страниц (data checksums) для обнаружения повреждений. - Репликация: В кластерных конфигурациях (например, streaming replication) WAL передаётся на реплики, что добавляет дополнительный уровень защиты от потери данных.
Для Go-разработчика важно помнить: если вы используете database/sql с PostgreSQL, каждая успешная транзакция (COMMIT) гарантирует durability только при стандартных настройках. Отключение synchronous_commit ускоряет запись, но может привести к потере последних транзакций при сбое.
> Похожие задачи по Go
Как растет мапа в Go и что влияет на ее увеличение?
Что такое живая зона памяти в Go?
Для чего используется SELECT FOR UPDATE?
Приходилось ли менять уровни изоляции транзакций?
> Похожие задачи по backend
Как растет мапа в Go и что влияет на ее увеличение?
Что такое живая зона памяти в Go?
Для чего используется SELECT FOR UPDATE?
Приходилось ли менять уровни изоляции транзакций?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью