pgstattuple. Функции для получения статистики на уровне кортежей#

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

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

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

Модуль предоставляет функции для получения статистики на уровне кортежей.

Функции#

pgstattuple#

Применение функции возможно для принятия решения о необходимости очистки.

Функция получает блокировку отношения только для чтения.

Формат:

pgstattuple(
    REGCLASS
) RETURNS RECORD
pgstattuple(
    TEXT
) RETURNS RECORD

Входные параметры:

В качестве аргумента могут передаваться:

  • имя отношения;

  • схема.имя;

  • OID отношения.

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

Столбец

Тип

Описание

table_len

bigint

Физическая длина отношения в байтах

tuple_count

bigint

Количество «живых» кортежей

tuple_len

bigint

Общая длина «живых» кортежей в байтах

tuple_percent

float8

Процент «живых» кортежей

dead_tuple_count

bigint

Количество «мертвых» кортежей

dead_tuple_len

bigint

Общая длина «мертвых» кортежей в байтах

dead_tuple_percent

float8

Процент «мертвых» кортежей

free_space

bigint

Общий объем свободного пространства в байтах

free_percent

float8

Процент свободного пространства

Замечание:

Значение table_len всегда будет больше суммы tuple_len, dead_tuple_len и free_space. Разница объясняется:

  • фиксированными издержками;

  • внутристраничной таблицей указателей на кортежи;

  • пропусками, добавляемыми для выравнивания кортежей.

pgstatindex#

Функция pgstatindex возвращает запись с информацией об индексе типа B-дерево.

Подобно pgstattuple, функция pgstatindex собирает данные страница за страницей, поэтому результат не представляет мгновенный снимок всего индекса.

Формат:

pgstatindex(
    REGCLASS
) RETURNS RECORD
pgstatindex(
    TEXT
) RETURNS RECORD

Входные параметры:

В качестве аргумента могут передаваться:

  • имя отношения;

  • схема.имя;

  • OID отношения.

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

Столбец

Тип

Описание

version

integer

Номер версии B-дерева

tree_level

integer

Уровень корневой страницы в дереве

index_size

bigint

Общий объем индекса в байтах;
вычисляется по формуле:
internal_pages + leaf_pages + empty_pages + deleted_pages + одна страница, так как в нем учитывается и метастраница индекса

root_block_no

bigint

Расположение страницы корня (0, если ее нет)

internal_pages

bigint

Количество «внутренних» страниц (верхнего уровня)

leaf_pages

bigint

Количество страниц на уровне листьев

empty_pages

bigint

Количество пустых страниц

deleted_pages

bigint

Количество удаленных страниц

avg_leaf_density

float8

Средняя плотность страниц на уровне листьев

leaf_fragmentation

float8

Фрагментация на уровне листьев

pgstatginindex#

Функция возвращает запись с информацией об индексе типа GIN.

Формат:

pgstatginindex(
    REGCLASS
) RETURNS RECORD

Входные параметры:

В качестве аргумента могут передаваться:

  • имя отношения;

  • схема.имя;

  • OID отношения.

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

Столбец

Тип

Описание

version

integer

Номер версии GIN

pending_pages

integer

Количество страниц в списке ожидающих обработки

pending_tuples

bigint

Количество кортежей в списке ожидающих обработки

pgstathashindex#

Функция возвращает запись с информацией о хеш-индексе.

Формат:

pgstathashindex(
    REGCLASS
) RETURNS RECORD

Входные параметры:

В качестве аргумента могут передаваться:

  • имя отношения;

  • схема.имя;

  • OID отношения.

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

Столбец

Тип

Описание

version

integer

Номер версии HASH

bucket_pages

bigint

Количество страниц групп

overflow_pages

bigint

Количество страниц переполнения

bitmap_pages

bigint

Количество страниц битовой карты

unused_pages

bigint

Количество неиспользованных страниц

live_items

bigint

Количество «живых» кортежей

dead_tuples

bigint

Количество «мертвых» кортежей

free_percent

float

Процент свободного пространства

pg_relpages#

Функция возвращает число страниц в отношении.

Формат:

pg_relpages(
    REGCLASS
) RETURNS BIGINT
pg_relpages(
    TEXT
) RETURNS BIGINT

Входные параметры:

В качестве аргумента могут передаваться:

  • имя отношения;

  • схема.имя;

  • OID отношения.

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

Число страниц в заданном отношении.

pgstattuple_approx#

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

Функция pgstattuple всегда производит полное сканирование таблицы и возвращает точное число и размер «живых» и «мертвых» кортежей, точный объем свободного пространства. Функция pgstattuple_approx пытается избежать полного сканирования и возвращает точную статистику только по мертвым кортежам, а количество и объем живых кортежей, как и объем свободного пространства определяет приблизительно.

Различия функций pgstattuple и pgstattuple_approx:

Параметр

pgstattuple

pgstattuple_approx

Полное сканирование таблицы

Всегда

Нет

Количество «живых» кортежей

Точно

Приблизительно

Количество «мертвых» кортежей

Точно

Точно

Размер «живых» кортежей

Точно

Приблизительно

Размер «мертвых» кортежей

Точно

Точно

Объем свободного пространства

Точно

Приблизительно

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

На страницах, которые нельзя пропустить, функция pgstattuple_approx сканирует каждый кортеж, отражает его наличие и размер в соответствующих счетчиках и суммирует свободное пространство на странице. В конце она оценивает приблизительно общее число живых кортежей, исходя из числа просканированных страниц и кортежей. Это происходит так же, как VACUUM рассчитывает значение pg_class.reltuples.

Формат:

pgstattuple_approx(
    REGCLASS
) RETURNS RECORD

Входные параметры:

В качестве аргумента могут передаваться:

  • имя отношения;

  • схема.имя;

  • OID отношения.

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

Столбец

Тип

Описание

table_len

bigint

Точная физическая длина отношения в байтах

scanned_percent

float8

Просканированный процент таблицы

approx_tuple_count

bigint

Приблизительное количество «живых» кортежей

approx_tuple_len

bigint

Приблизительная общая длина «живых» кортежей в байтах

approx_tuple_percent

float8

Процент «живых» кортежей

dead_tuple_count

bigint

Точное количество «мертвых» кортежей

dead_tuple_len

bigint

Точная общая длина «мертвых» кортежей в байтах

dead_tuple_percent

float8

Процент «мертвых» кортежей

approx_free_space

bigint

Приблизительный общий объем свободного пространства в байтах

approx_free_percent

float8

Процент свободного пространства

Доработка#

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

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

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

Установка#

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

CREATE EXTENSION pgstattuple SCHEMA ext;

Настройка#

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

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

SELECT * FROM pgstattuple('pg_catalog.pg_proc') \gx

Пример результата выполнения функции:

-[ RECORD 1 ]------+--------
table_len          | 1294336
tuple_count        | 3779
tuple_len          | 1110651
tuple_percent      | 85.81
dead_tuple_count   | 14
dead_tuple_len     | 5080
dead_tuple_percent | 0.39
free_space         | 144716
free_percent       | 11.18

Пример функции с переданным текстовым именем в качестве аргумента:

SELECT * FROM pgstattuple ('message') \gx

Пример функции с переданным OID в качестве аргумента:

SELECT 'message'::regclass::oid;
-[ RECORD 1 ]
oid | 165575
SELECT * FROM pgstattuple (165575) \gx

Пример результата выполнения функции:

-[ RECORD 1 ]------+------
table_len          | 8192
tuple_count        | 4
tuple_len          | 280
tuple_percent      | 3.42
dead_tuple_count   | 4
dead_tuple_len     | 265
dead_tuple_percent | 3.23
free_space         | 7556
free_percent       | 92.24

Функция pgstatindex возвращает запись с информацией об индексе типа B-дерево:

SELECT * FROM pgstatindex('pg_cast_oid_index');

Пример результата выполнения функции:

-[ RECORD 1 ]------+------
version            | 2
tree_level         | 0
index_size         | 16384
root_block_no      | 1
internal_pages     | 0
leaf_pages         | 1
empty_pages        | 0
deleted_pages      | 0
avg_leaf_density   | 54.27
leaf_fragmentation | 0

Функция pgstatginindex возвращает запись с информацией об индексе типа GIN:

SELECT * FROM ext.pgstatginindex('testidx');

Пример результата выполнения функции:

 version | pending_pages | pending_tuples 
---------+---------------+----------------
       2 |             0 |              0
(1 row)

Функция pgstathashindex возвращает запись с информацией о хеш-индексе:

select * from pgstathashindex('con_hash_index');

Пример результата выполнения функции:

-[ RECORD 1 ]--+-----------------
version        | 4
bucket_pages   | 33081
overflow_pages | 0
bitmap_pages   | 1
unused_pages   | 32455
live_items     | 10204006
dead_items     | 0
free_percent   | 61.8005949100872

Функция pg_relpages возвращает число страниц в отношении:

SELECT * FROM pg_relpages('message');

Пример результата выполнения функции:

 pg_relpages 
-------------
           1
(1 row)

Функция pgstattuple_approx возвращает приблизительные значения физической длины отношения, процента «мертвых» кортежей и другую информацию:

SELECT * FROM pgstattuple_approx('ext.message'::regclass) \gx

Пример результата выполнения функции:

-[ RECORD 1 ]--------+--------------
table_len            | 8192
scanned_percent      | 100
approx_tuple_count   | 4
approx_tuple_len     | 280
approx_tuple_percent | 3.41796875
dead_tuple_count     | 4
dead_tuple_len       | 265
dead_tuple_percent   | 3.23486328125
approx_free_space    | 7556
approx_free_percent  | 92.236328125

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

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