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