pg_visibility. Исследование для определенной таблицы карты видимости#
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext.
Функциональность расширения pg_visibility позволяет:
исследовать карту видимости (Visibility Map, VM) конкретной таблицы;
анализировать информацию о видимости на уровне страниц;
использовать функции проверки целостности карты видимости и принудительного ее пересоздания.
Для хранения информации о видимости на уровне страниц применяются по три различных бита:
бит полной видимости в карте показывает, что каждый кортеж в соответствующей странице отношения является видимым для всех текущих и будущих транзакций;
бит полной заморозки в карте видимости показывает, что все кортежи данной страницы являются замороженными, то есть операции очистки не придется обрабатывать эту страницу, пока кортеж не будет добавлен, изменен, заблокирован или удален;
бит
PD_ALL_VISIBLEв заголовке страницы имеет то же значение, что и бит полной видимости в карте видимости, но он хранится в самой странице данных, а не в отдельной структуре данных. В обычной ситуации эти два бита будут согласованы, но бит полной видимости в странице иногда может быть установлен, тогда как в карте видимости он оказывается сброшенным при восстановлении после сбоя. Считываемые значения могут также различаться, если они подвергаются изменению в промежутке между обращениямиpg_visibilityк карте видимости и к странице данных. Эти биты могут различаться при событиях, приводящих к разрушению данных.
Поскольку функции, выдающие информацию о битах PD_ALL_VISIBLE, должны читать не только карту видимости, но и блоки отношения, они оказываются более дорогостоящими по сравнению с функциями, читающими только карту видимости. Функции, которые проверяют блоки данных отношения, тоже являются более дорогостоящими.
Функция |
Входные аргументы |
Возвращаемое значение |
Описание |
|---|---|---|---|
|
|
|
Возвращает биты полной видимости и полной заморозки в карте видимости для указанного блока заданного отношения |
|
|
|
Возвращает биты полной видимости и полной заморозки в карте видимости для указанного блока заданного отношения, а также бит |
|
|
|
Возвращает биты полной видимости и полной заморозки в карте видимости для каждого блока заданного отношения |
|
|
|
Возвращает биты полной видимости и полной заморозки в карте видимости для каждого блока заданного отношения, а также бит |
|
|
|
Возвращает число полностью видимых страниц и полностью замороженных страниц в отношении согласно карте видимости |
|
|
|
Возвращает идентификаторы |
|
|
|
Возвращает идентификаторы |
|
|
|
Аннулирует карту видимости для заданного отношения; функция полезна, если существует вероятность, что карта видимости для указанного отношения испорчена, и ее нужно принудительно пересоздать; первая же команда |
Доработка#
Доработка не проводилась.
Ограничения#
По умолчанию функции расширения разрешено выполнять только суперпользователям и членам роли pg_stat_scan_tables, кроме pg_truncate_visibility_map(relation regclass), которую могут выполнять только суперпользователи.
Установка#
При наличии прав администратора СУБД включение модуля выполняется запросом:
CREATE EXTENSION pg_visibility SCHEMA ext;
Настройка#
Настройка не требуется.
Использование модуля#
SELECT pg_visibility_map('username_test');
Пример результата выполнения запроса:
pg_visibility_map
-------------------
(0,f,f)
(1 row)
Ссылки на документацию разработчика#
Исходная документация PosgreSQL по модулю pg_visibility: https://www.postgresql.org/docs/15/pgvisibility.html