Pull to refresh

Comments 2

Егор, большое Вам спасибо за отличный цикл статей. И самое главное — отдельное спасибо за обратную связь, ответы на вопросы. С нетерпением жду новых статей.

Я изучал заморозку по курсу на сайте postgrespro и к сожалению не понял, на мой взгляд, очень важный момент.

Чтобы не допустить таких «путешествий» из прошлого в будущее, процесс очистки (помимо освобождения места в страницах) выполняет еще одну задачу. Он находит достаточно старые и «холодные» версии строк (которые видны во всех снимках и изменение которых уже маловероятно) и специальным образом помечает — «замораживает» — их


Заморозку можно вызвать вручную командой VACUUM FREEZE — при этом будут заморожены все версии строк, без оглядки на возраст транзакций


* То есть, у этой строки установлено 2 бита — бит фиксации и бит отмены
* Пусть все-таки строку начала менять транзакция.
* устанавливается xmax
* снимаются биты — фиксации и отмены, потому что они используются в MVCC
* xmin начинает уже иметь значение — с какой транзакции строка видна.

Как быть? ведь xmin уже полностью нерелевантен, но его надо использовать для видимости.
Думаю, что его надо каким-то числом перезаписать или установить еще какие-то некие служебные биты, чтобы «на xmin никто не обращал внимания».

Подскажите, пожалуйста, что происходит в данной ситуации. Можно было бы, конечно, происследовать вопрос самостоятельно, но это непросто, когда нет точки, от которой можно оттолкнуться.

Владимир, спасибо и вам за содержательные вопросы!


* снимаются биты — фиксации и отмены, потому что они используются в MVCC

Неа.


Мы замораживаем xmin: устанавливаем биты xmin committed + xmin aborted. Это означает, что транзакция, которая создала данную версию строки, произошла так давно, что ее номер нас больше не интересует.


Если мы затем изменяем строку, то устанавливаем xmax, чтобы показать, что время действия этой (теперь уже не актуальной) версии закончилось. Но xmin и его биты не трогаем — зачем? Нас устраивает, что эта версия началась в незапамятные времена.


А xmin будет установлен у новой версии этой строки.

Sign up to leave a comment.