pgstattuple
Функции для получения статистики на уровне кортежей.
Схема размещения:
ext
.Модуль предоставляет функции для получения статистики на уровне кортежей.
Функция
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
возвращает запись с информацией об индексе типа 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
возвращает запись с информацией об индексе типа 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
возвращает число страниц в отношении.Возможны следующие форматы записи:
-
формат 1:
pg_relpages( REGCLASS ) RETURNS BIGINT
-
формат 2:
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
и суперпользователь.Пример использования функции:
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=sqlversion | 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=sqlpg_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 можно получить по ссылке.