Pull to refresh

Comments 4

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

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

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

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

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

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

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

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

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

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

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

Sign up to leave a comment.