F.50. pgstattuple#
F.50. pgstattuple
Модуль pgstattuple предоставляет различные функции для получения статистики на уровне кортежей.
Поскольку эти функции возвращают подробную информацию на уровне страницы, доступ к ним ограничен по умолчанию. По умолчанию только роль pg_stat_scan_tables имеет привилегию EXECUTE. Конечно, суперпользователи обходят это ограничение. После установки расширения пользователи могут использовать команды GRANT для изменения привилегий на функции, чтобы разрешить другим их выполнение. Однако, возможно, предпочтительнее добавить этих пользователей в роль pg_stat_scan_tables.
F.50.1. Функции
-
pgstattuple(regclass) returns record pgstattupleвозвращает физическую длину отношения, процент "мертвых" кортежей и другую информацию. Это может помочь пользователям определить, нужно ли выполнять очистку или нет. Аргументом является имя целевого отношения (опционально с указанием схемы) или OID. Например:test=> SELECT * FROM pgstattuple('pg_catalog.pg_proc'); -[ RECORD 1 ]------+------- table_len | 458752 tuple_count | 1470 tuple_len | 438896 tuple_percent | 95.67 dead_tuple_count | 11 dead_tuple_len | 3157 dead_tuple_percent | 0.69 free_space | 8932 free_percent | 1.95Выходные столбцы описаны в Таблица F.22.
Таблица F.22. Выходные столбцы
pgstattupleСтолбец Тип Описание table_lenbigintФизическая длина отношения в байтах tuple_countbigintКоличество активных кортежей tuple_lenbigintОбщая длина активных кортежей в байтах tuple_percentfloat8Процент живых кортежей dead_tuple_countbigintКоличество удаленных кортежей dead_tuple_lenbigintОбщая длина удаленных кортежей в байтах dead_tuple_percentfloat8Процент мертвых кортежей free_spacebigintОбщее количество свободного места в байтах free_percentfloat8Процент свободного пространства Примечание
Всегда
table_lenбудет больше суммыtuple_len,dead_tuple_lenиfree_space. Разница учитывается фиксированными издержками на страницу, таблицей указателей на кортежи на каждой странице и заполнением для обеспечения правильного выравнивания кортежей.pgstattupleприобретает только чтение блокировки на отношение. Поэтому результаты не отражают мгновенный снимок; одновременные обновления повлияют на них.pgstattupleсудит, что кортеж является “мертвым”, еслиHeapTupleSatisfiesDirtyвозвращает false.-
pgstattuple(text) returns record Это то же самое, что и
pgstattuple(regclass), за исключением того, что целевое отношение указывается как TEXT. Эта функция сохраняется из-за обратной совместимости на данный момент и будет устаревать в будущих версиях.-
pgstatindex(regclass) returns record pgstatindexвозвращает запись, содержащую информацию о B-дереве индекса. Например:test=> 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Выходные столбцы:
Столбец Тип Описание versionintegerНомер версии B-дерева tree_levelintegerУровень дерева корневой страницы index_sizebigintОбщий размер индекса в байтах root_block_nobigintМестоположение корневой страницы (ноль, если отсутствует) internal_pagesbigintКоличество “внутренних” (верхних) страниц leaf_pagesbigintКоличество листовых страниц empty_pagesbigintКоличество пустых страниц deleted_pagesbigintКоличество удаленных страниц avg_leaf_densityfloat8Средняя плотность листовых страниц leaf_fragmentationfloat8Фрагментация страницы листа Сообщаемый размер индекса
index_sizeобычно соответствует на одну страницу больше, чем учитывается страницамиinternal_pages + leaf_pages + empty_pages + deleted_pages, потому что он также включает метастраницу индекса.Как и с
pgstattuple, результаты накапливаются постранично и не следует ожидать, что они представляют мгновенный снимок всего индекса.-
pgstatindex(text) returns record Это то же самое, что и
pgstatindex(regclass), за исключением того, что целевой индекс указывается как TEXT. Эта функция сохраняется из-за обратной совместимости на данный момент и будет устаревать в будущих версиях.-
pgstatginindex(regclass) returns record pgstatginindexвозвращает запись, содержащую информацию о GIN-индексе. Например:test=> SELECT * FROM pgstatginindex('test_gin_index'); -[ RECORD 1 ]--+-- version | 1 pending_pages | 0 pending_tuples | 0Выходные столбцы:
Столбец Тип Описание versionintegerНомер версии GIN pending_pagesintegerКоличество страниц в списке ожидания pending_tuplesbigintКоличество кортежей в списке ожидающих -
pgstathashindex(regclass) returns record pgstathashindexвозвращает запись, содержащую информацию о HASH-индексе. Например:test=> 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Выходные столбцы:
Столбец Тип Описание versionintegerномер версии HASH bucket_pagesbigintКоличество страниц ведер overflow_pagesbigintКоличество страниц переполнения bitmap_pagesbigintКоличество страниц битовой карты unused_pagesbigintКоличество неиспользуемых страниц live_itemsbigintКоличество активных кортежей dead_tuplesbigintКоличество удаленных кортежей free_percentfloatПроцент свободного пространства -
pg_relpages(regclass) returns bigint pg_relpagesвозвращает количество страниц в отношении.-
pg_relpages(text) returns bigint Это то же самое, что и
pg_relpages(regclass), за исключением того, что целевое отношение указывается как TEXT. Эта функция сохраняется из-за обратной совместимости на данный момент и будет устаревать в будущих версиях.-
pgstattuple_approx(regclass) returns record pgstattuple_approx- это более быстрый альтернативный вариантpgstattuple, который возвращает приблизительные результаты. Аргументом является имя или OID целевого отношения. Например:test=> SELECT * FROM pgstattuple_approx('pg_catalog.pg_proc'::regclass); -[ RECORD 1 ]--------+------- table_len | 573440 scanned_percent | 2 approx_tuple_count | 2740 approx_tuple_len | 561210 approx_tuple_percent | 97.87 dead_tuple_count | 0 dead_tuple_len | 0 dead_tuple_percent | 0 approx_free_space | 11996 approx_free_percent | 2.09Выходные столбцы описаны в Таблица F.23.
Где
pgstattupleвсегда выполняет полное сканирование таблицы и возвращает точное количество живых и мертвых кортежей (и их размеры) и свободное пространство,pgstattuple_approxпытается избежать полного сканирования таблицы и возвращает точную статистику мертвых кортежей вместе с приближенным количеством и размером живых кортежей и свободным пространством.Он делает это, пропуская страницы, которые содержат только видимые кортежи согласно карте видимости (если у страницы установлен соответствующий бит VM, то предполагается, что она не содержит удаленных кортежей). Для таких страниц он вычисляет значение свободного пространства из карты свободного пространства и предполагает, что остальное пространство на странице занято живыми кортежами.
Для страниц, которые нельзя пропустить, сканируется каждый кортеж, записывается его присутствие и размер в соответствующие счетчики, и суммируется свободное место на странице. В конце оценивается общее количество активных кортежей на основе количества просканированных страниц и кортежей (так же, как VACUUM оценивает pg_class.reltuples).
Таблица F.23.
pgstattuple_approxOutput ColumnsСтолбец Тип Описание table_lenbigintФизическая длина отношения в байтах (точная) scanned_percentfloat8Процент сканирования таблицы approx_tuple_countbigintКоличество живых кортежей (приблизительно) approx_tuple_lenbigintОбщая длина активных кортежей в байтах (приблизительно) approx_tuple_percentfloat8Процент живых кортежей dead_tuple_countbigintКоличество удаленных кортежей (точное) dead_tuple_lenbigintОбщая длина удаленных кортежей в байтах (точная) dead_tuple_percentfloat8Процент мертвых кортежей approx_free_spacebigintОбщий объем свободного пространства в байтах (приблизительный) approx_free_percentfloat8Процент свободного пространства В вышеприведенном выводе цифры свободного пространства могут не совпадать точно с выводом функции
pgstattuple, поскольку карта свободного пространства дает нам точное значение, но не гарантирует точность до байта.
F.50.2. Авторы
Tatsuo Ishii, Satoshi Nagayasu и Abhijit Menon-Sen