70.4. Карта видимости#

70.4. Карта видимости

70.4. Карта видимости #

Каждое отношение кучи имеет карту видимости (VM), которая отслеживает, какие страницы содержат только кортежи, которые известно, что видимы для всех активных транзакций; она также отслеживает, какие страницы содержат только замороженные кортежи. Она хранится рядом с основными данными отношения в отдельном форке таблицы, названной номером файла отношения, плюс суффикс _vm. Например, если номер файла отношения равен 12345, VM хранится в файле с именем 12345_vm, в том же каталоге, что и основной файл таблицы. Обратите внимание, что у индексов нет VM.

Карта видимости хранит два бита на каждую страницу кучи. Если первый бит установлен, это означает, что страница полностью видима, или, другими словами, на странице нет кортежей, которые нужно убрать при очистке. Эта информация также может использоваться для ответа на запросы, использующие только индексные кортежи, при помощи только-индексных сканирований. Если второй бит установлен, это означает, что все кортежи на странице были заморожены. Это означает, что даже процесс очистки, предотвращающий зацикливание, не должен повторно посещать страницу.

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

Модуль pg_visibility может быть использован для изучения информации, хранящейся в карте видимости.