pgstattuple

Функции для получения статистики на уровне кортежей.
Схема размещения: ext.
Модуль предоставляет функции для получения статистики на уровне кортежей.

pgstattuple

Функция pgstattuple. Применение функции возможно для принятия решения о необходимости очистки. Функция получает блокировку отношения только для чтения.
Возможны следующие форматы записи:
  • формат 1:
    pgstattuple(
        REGCLASS
    ) RETURNS RECORD
    
  • формат 2:
    Формат2 type=sql
    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 собирает данные страница за страницей, поэтому результат не представляет мгновенный снимок всего индекса.
Возможны следующие форматы записи:
  • формат 1:
    pgstatindex(
        REGCLASS
    ) RETURNS RECORD
    
  • формат 2:
    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

Функция pgstatginindex возвращает запись с информацией об индексе типа GIN.
Формат:
pgstatginindex(
    REGCLASS
) RETURNS RECORD
В качестве аргумента могут передаваться:
  • имя отношения;
  • схема.имя;
  • OID отношения.
Возвращаемые значения:
СтолбецТипОписание
version
integerНомер версии GIN
pending_pages
integerКоличество страниц в списке ожидающих обработки
pending_tuples
bigintКоличество кортежей в списке ожидающих обработки

pgstathashindex

Функция 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 возвращает число страниц в отношении.
Возможны следующие форматы записи:
  • формат 1:
    pg_relpages(
        REGCLASS
    ) RETURNS BIGINT
    
  • формат 2:
     pg_relpages(
        TEXT
    ) RETURNS BIGINT
    
В качестве аргумента могут передаваться:
  • имя отношения;
  • схема.имя;
  • OID отношения.
Возвращаемые значения: число страниц в заданном отношении.

pgstattuple_approx

Функция pgstattuple_approx возвращает приблизительные значения физической длины отношения, процента «мертвых» кортежей и другую информацию и является более быстрой альтернативой pgstattuple.
Функция pgstattuple всегда производит полное сканирование таблицы и возвращает точное число и размер «живых» и «мертвых» кортежей, точный объем свободного пространства. Функция pgstattuple_approx пытается избежать полного сканирования и возвращает точную статистику только по мертвым кортежам, а количество и объем живых кортежей, как и объем свободного пространства определяет приблизительно.
Различия функций pgstattuple и pgstattuple_approx:
Параметрpgstattuplepgstattuple_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 и суперпользователь.

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

Пример использования функции:
SELECT * FROM pgstattuple('pg_catalog.pg_proc') \gx
Пример результата выполнения функции:
Раскрыть type=sql
-[ 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`
Пример результата выполнения функции:
Раскрыть type=sql
-[ 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');
Пример результата выполнения функции:
Раскрыть type=sql
-[ 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');
Пример результата выполнения функции:
Раскрыть type=sql
 version | pending_pages | pending_tuples
---------+---------------+----------------
       2 |             0 |              0
(1 row)
Функция pgstathashindex возвращает запись с информацией о хеш-индексе:
SELECT * from pgstathashindex('con_hash_index');
Пример результата выполнения функции:
Раскрыть type=sql
-[ 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');
Пример результата выполнения функции:
Раскрыть type=sql
 pg_relpages
-------------
           1
(1 row)
Функция pgstattuple_approx возвращает приблизительные значения физической длины отношения, процента «мертвых» кортежей и другую информацию:
SELECT * FROM pgstattuple_approx('ext.message'::regclass) \gx
Пример результата выполнения функции:
Раскрыть type=sql
-[ 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

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

Дополнительную информацию по поставляемому модулю pgstattuple можно получить по ссылке.
Предыдущий раздел
pg_stat_statements
Следующий раздел
pg_trgm
Была ли страница полезной?