pg_visibility. Исследование для определенной таблицы карты видимости#

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Функциональность расширения pg_visibility позволяет:

  • исследовать карту видимости (Visibility Map, VM) конкретной таблицы;

  • анализировать информацию о видимости на уровне страниц;

  • использовать функции проверки целостности карты видимости и принудительного ее пересоздания.

Для хранения информации о видимости на уровне страниц применяются по три различных бита:

  • бит полной видимости в карте показывает, что каждый кортеж в соответствующей странице отношения является видимым для всех текущих и будущих транзакций;

  • бит полной заморозки в карте видимости показывает, что все кортежи данной страницы являются замороженными, то есть операции очистки не придется обрабатывать эту страницу, пока кортеж не будет добавлен, изменен, заблокирован или удален;

  • бит PD_ALL_VISIBLE в заголовке страницы имеет то же значение, что и бит полной видимости в карте видимости, но он хранится в самой странице данных, а не в отдельной структуре данных. В обычной ситуации эти два бита будут согласованы, но бит полной видимости в странице иногда может быть установлен, тогда как в карте видимости он оказывается сброшенным при восстановлении после сбоя. Считываемые значения могут также различаться, если они подвергаются изменению в промежутке между обращениями pg_visibility к карте видимости и к странице данных. Эти биты могут различаться при событиях, приводящих к разрушению данных.

Поскольку функции, выдающие информацию о битах PD_ALL_VISIBLE, должны читать не только карту видимости, но и блоки отношения, они оказываются более дорогостоящими по сравнению с функциями, читающими только карту видимости. Функции, которые проверяют блоки данных отношения, тоже являются более дорогостоящими.

Функция

Входные аргументы

Возвращаемое значение

Описание

pg_visibility_map

relation regclass;
blkno bigint;
all_visible OUT boolean;
all_frozen OUT boolean

record

Возвращает биты полной видимости и полной заморозки в карте видимости для указанного блока заданного отношения

pg_visibility

relation regclass;
blkno bigint;
all_visible OUT boolean;
all_frozen OUT boolean;
pd_all_visible OUT boolean

record

Возвращает биты полной видимости и полной заморозки в карте видимости для указанного блока заданного отношения, а также бит PD_ALL_VISIBLE этого блока

pg_visibility_map

relation regclass;
blkno OUT bigint;
all_visible OUT boolean;
all_frozen OUT boolean

setof record

Возвращает биты полной видимости и полной заморозки в карте видимости для каждого блока заданного отношения

pg_visibility

relation regclass;
blkno OUT bigint;
all_visible OUT boolean;
all_frozen OUT boolean;
pd_all_visible OUT boolean

setof record

Возвращает биты полной видимости и полной заморозки в карте видимости для каждого блока заданного отношения, а также бит PD_ALL_VISIBLE каждого блока

pg_visibility_map_summary

relation regclass;
all_visible OUT bigint;
all_frozen OUT bigint

record

Возвращает число полностью видимых страниц и полностью замороженных страниц в отношении согласно карте видимости

pg_check_frozen

relation regclass;
t_ctid OUT tid

setof tid

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

pg_check_visible

relation regclass;
t_ctid OUT tid

setof tid

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

pg_truncate_visibility_map

relation regclass

void

Аннулирует карту видимости для заданного отношения; функция полезна, если существует вероятность, что карта видимости для указанного отношения испорчена, и ее нужно принудительно пересоздать; первая же команда VACUUM, выполняемая с данным отношением после этой функции, просканирует все страницы в отношении и пересоздаст карту видимости

Доработка#

Доработка не проводилась.

Ограничения#

По умолчанию функции расширения разрешено выполнять только суперпользователям и членам роли 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