Перейти к основному содержимому

pageinspect. Исследование страниц баз данных на низком уровне

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

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

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

Модуль pageinspect предоставляет функции, которые позволяют исследовать страницы баз данных на низком уровне. Это может быть полезно для отладки.

Описание функций

Функции общего назначения

ФункцияВозвращаемое значениеОписаниеАргументы
get_raw_page (relname TEXT, fork TEXT, blkno INT)byteaСчитывает указанный блок отношения с заданным именем и возвращает копию значения bytea. Это позволяет получить одну согласованную во времени копию блокаrelname – имя отношения;
blkno – номер блока отношения;
fork – слой:
main — обратиться к основному слою данных;
fsm — к карте свободного пространства;
vm — к карте видимости;
init — к слою инициализации
get_raw_page (relname TEXT, blkno INT)byteaУпрощенная версия get_raw_page для чтения данных из основного слоя. Аналог get_raw_page (relname, 'main', blkno)relname – имя отношения;
blkno – номер блока отношения
page_header (page BYTEA)recordПоказывает общие для всех страниц кучи и индекса PostgreSQL поляpage – образ страницы, полученный в результате вызова get_raw_page
page_checksum (page BYTEA, blkno INT4)smallintВычисляет контрольную сумму страницы в заданном блоке. Обеим функциям нужно передавать одинаковые номера, поскольку вычисление контрольной суммы зависит от номера блокаpage – образ страницы, полученный в результате вызова get_raw_page;
blkno – номер блока
fsm_page_contents (page BYTEA)textПоказывает внутреннюю структуру узла на странице FSMpage – образ страницы, полученный в результате вызова get_raw_page

Функции кучи

ФункцияВозвращаемое значениеОписаниеАргументы
heap_page_items (page BYTEA)setof record
Описание полей можно найти в src/include/storage/itemid.h и src/include/access/htup_details.h (внешние ссылки)
Показывает все указатели линейных блоков на странице кучи. Для используемых блоков также выводятся заголовки всех кортежей, независимо от того, были ли видны они в снимке MVCC в момент копирования исходной страницыpage – образ страницы кучи, полученный в результате вызова get_raw_page
tuple_data_split (rel_oid OID, t_data BYTEA, t_infomask INTEGER, t_infomask2 INTEGER, t_bits TEXT [, do_detoast BOOL])BYTEA[]Разделяет данные кортежей на атрибуты так, как это происходит внутри сервераАтрибуты, возвращаемые функцией heap_page_items;
do_detoast = true – полученные атрибуты будут распакованы по мере необходимости; если не задан, подразумевается false
heap_page_item_attrs (page BYTEA, rel_oid REGCLASS [, do_detoast BOOL])setof recordВозвращает неструктурированное содержимое кортежа в виде массива атрибутов, которые могут быть распакованы, если установлен флаг do_detoast. Функция похожа на heap_page_itemspage – образ страницы кучи, полученный в результате вызова get_raw_page;
do_detoast = true – полученные атрибуты будут распакованы по мере необходимости; если не задан, подразумевается false
heap_tuple_infomask_flags (t_infomask INTEGER, t_infomask2 INTEGER)recordДекодирует значения t_infomask и t_infomask2, которые возвращает функция heap_page_items, и выдает массивы с именами флагов в понятном виде: один, перечисляющий все флаги по отдельности, а другой — комбинированные.
Комбинированные флаги выводятся для тех макросов на уровне исходного кода, в которых объединяются значения нескольких битов, например, HEAP_XMIN_FROZEN.
Описания выдаваемых имен флагов можно найти в src/include/access/htup_details.h
Атрибуты, возвращаемые функцией heap_page_items

Функции для индексов-B-деревьев

ФункцияВозвращаемое значениеОписаниеАргументы
bt_metap (relname TEXT)recordВыдает информацию о метастранице индекса B-деревоrelname – имя отношения
bt_page_stats (relname TEXT, blkno INT)recordВыдает сводную информацию по единичным страницам B-дереваrelname – имя отношения;
blkno – номер блока отношения
bt_page_items (relname TEXT, blkno INT)setof recordВыдает подробную информацию обо всех элементах на странице индекса B-деревоrelname – имя отношения;
blkno – номер блока отношения
bt_page_items (page BYTEA)setof recordВыдает подробную информацию обо всех элементах на странице индекса B-деревоpage – страница в виде значения bytea

Функции для индексов BRIN

ФункцияВозвращаемое значениеОписаниеАргументы
brin_page_type (page BYTEA)textВозвращает тип страницы для заданной страницы индекса BRIN или выдает ошибку, если эта страница не является корректной страницей индекса BRINpage – страница в виде значения bytea
brin_metapage_info (page BYTEA)recordВозвращает сведения о метастранице индекса BRINpage – страница в виде значения bytea
brin_revmap_data (page BYTEA)setof tidВыдает список идентификаторов кортежей со страницы сопоставлений зон индекса BRINpage – страница в виде значения bytea
brin_page_items (page BYTEA, index OID)setof record
Возвращаемые столбцы соответствуют полям в структурах BrinMemTuple и BrinValues.
Подробное описание: src/include/access/brin_tuple.h.
Выдает содержимое, сохраненное в странице данных BRINpage – страница в виде значения bytea;
index – имя индекса

Функции для индексов GIN

ФункцияВозвращаемое значениеОписаниеАргументы
gin_metapage_info (page BYTEA)recordВыдает информацию о метастранице индекса GINpage – страница в виде значения bytea
gin_page_opaque_info (page BYTEA)recordВыдает информацию из непрозрачной области индекса GIN (тип страницы)page – страница в виде значения bytea
gin_leafpage_items (page BYTEA)setof recordВыдает информацию о данных, хранящихся в странице индекса GIN на уровне листьевpage – страница в виде значения bytea

Функции для хеш-индексов

ФункцияВозвращаемое значениеОписаниеАргументы
hash_page_type (page BYTEAtextВозвращает тип страницы для заданной страницы хеш-индексаpage – страница в виде значения bytea
hash_page_stats (page BYTEA)setof recordВозвращает информацию о странице группы или переполнения хеш-индексаpage – страница в виде значения bytea
hash_page_items (page BYTEA)setof recordВозвращает информацию о данных, хранящихся на странице группы или переполнения хеш-индексаpage – страница в виде значения bytea
hash_bitmap_info (index OID, blkno INT)recordПоказывает состояние бита в странице битовой карты для определенной страницы переполнения хеш-индексаindex – имя индекса;
blkno – номер блока отношения
hash_metapage_info (page BYTEA)recordВозвращает информацию, хранящуюся в метастранице хеш-индексаpage – страница в виде значения bytea

Доработка

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

Ограничения

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

Установка

При наличии прав администратора СУБД включение модуля выполняется запросом:

CREATE EXTENSION pageinspect SCHEMA ext;

Настройка

Настройка не требуется.

Использование модуля

Примеры использования функций модуля представлены в документации PostgreSQL: https://www.postgresql.org/docs/13/pageinspect.html

Ссылки на документацию разработчика

Исходная документация по модулю pageinspect: https://www.postgresql.org/docs/15/pageinspect.html