Обновить

Комментарии 4

Егор, спасибо за отличную статью. Вопрос, связанный с заморозкой.

В заголовке фрагмента WAL хранится:
номер транзакции, к которой относится запись;

полагаю, что этот номер для чего-то используется, например, при восстановлении.

Но как быть если номер транзакции заморожен, прошло уже много времени и в системе появилась уже другая транзакция, номер которой совпадает с замороженным номером?

Как в целом процесс заморозки дружит с WAL с точки зрения номеров транзакций?

Спасибо, Владимир.
Номер транзакции — да, используется при восстановлении (например, для установки xmin/xmax при проигровании записи о вставках/удалениях/обновлениях табличных строк).
Дружат нормально. Заморозка — это же некоторое действие со страницей, которое тоже попадает в журнал. При восстановлении мы сначала получим страницу в том виде, в котором она была до заморозки, потом восстановим заморозку и т. д.

Понимаю, что статья давняя, но все же.

Каким образом работает чтение только что записанных данных?

Пример: добавили новую строку, она попала только в WAL, но не в основную базу. Делаем выборку и эта строка там есть. postgres как внутри это обрабатывает?

Только что записанные данные обязательно попадают не только в журнал, но и в основную базу. Только не сразу на диск, а сначала в буферный кеш. Вот из буферного кеша они и читаются.

А вот если сервер упадет, тогда недошедшие до диска данные будут восстановлены из журнала.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
www.postgrespro.ru
Дата регистрации
Дата основания
Численность
501–1 000 человек
Местоположение
Россия
Представитель
Иван Панченко