Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: PostgreSQL, durability, WAL, checkpoint, ACID

Как долговечность реализована в PostgreSQL?

Вопрос проверяет понимание механизмов долговечности (durability) в PostgreSQL, включая WAL и контрольные точки.

Короткий ответ

Долговечность в PostgreSQL обеспечивается через Write-Ahead Logging (WAL). Все изменения сначала записываются в журнал WAL, а затем применяются к данным. При сбое система восстанавливается, проигрывая WAL с последней контрольной точки. Это гарантирует, что завершённые транзакции не будут потеряны.

Длинный ответ

Как PostgreSQL гарантирует долговечность?

Долговечность (Durability) — одна из ключевых характеристик ACID. В PostgreSQL она реализована через механизм Write-Ahead Logging (WAL). Суть в том, что перед тем как изменить страницу данных на диске, сервер записывает запись об этом изменении в журнал WAL. Это гарантирует, что даже при внезапном сбое питания или крахе системы, все завершённые транзакции могут быть восстановлены.

Как работает WAL?

Каждая транзакция, которая изменяет данные, сначала фиксирует изменения в WAL-буфере. При COMMIT сервер сбрасывает буфер на диск (синхронизирует WAL-файл). Только после этого транзакция считается завершённой. Сами страницы данных могут быть записаны позже, в фоновом режиме, во время контрольных точек (checkpoints).

Пример кода: настройка синхронизации

-- Проверка текущего режима синхронизации WAL
SHOW synchronous_commit;
-- Возможные значения: on, remote_write, remote_apply, off

-- Установка строгой синхронизации (по умолчанию)
ALTER SYSTEM SET synchronous_commit = 'on';
SELECT pg_reload_conf();

Контрольные точки

Контрольная точка — это момент, когда все грязные страницы (изменённые, но ещё не записанные на диск) принудительно сбрасываются. После этого WAL-журнал можно очистить. Параметр checkpoint_timeout (по умолчанию 5 минут) и max_wal_size управляют частотой контрольных точек.

Вывод

Долговечность в PostgreSQL критична для систем, где потеря данных недопустима (финансы, бронирования). Используйте WAL и настройте synchronous_commit в зависимости от компромисса между производительностью и надёжностью.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

Ключевые слова

#PostgreSQL

#durability

#WAL

#checkpoint

#ACID

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.