| Документация к PostgreSQL 9.5.12 | |||
|---|---|---|---|
| Пред. | Уровень выше | Приложение F. Дополнительно поставляемые модули | След. |
F.29. pgstattuple
Модуль pgstattuple предоставляет различные функции для получения статистики на уровне кортежей.
F.29.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-23.
Таблица F-23. Столбцы результата
pgstattupleСтолбец Тип Описание 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. Разница объясняется фиксированными издержками, внутристраничной таблицей указателей на кортежи и пропусками, добавляемыми для выравнивания кортежей.
Функция
pgstattupleполучает блокировку отношения только для чтения. Таким образом, её результаты отражают не мгновенный снимок; на них будут влиять параллельные изменения.pgstattupleсчитает кортеж "мёртвым", еслиHeapTupleSatisfiesDirtyвозвращает false.pgstattuple(text) returns recordЭта функция равнозначна функции
pgstattuple(regclass)за исключением того, что для неё целевое отношение задаётся в текстовом виде. Данная функция оставлена для обратной совместимости, в будущем она может перейти в разряд устаревших.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Столбцы результата:
Столбец Тип Описание version integer Номер версии B-дерева tree_level integer Уровень корневой страницы в дереве index_size bigint Общий объём индекса в байтах root_block_no bigint Расположение страницы корня (0, если её нет) internal_pages bigint Количество "внутренних" страниц (верхнего уровня) leaf_pages bigint Количество страниц на уровне листьев empty_pages bigint Количество пустых страниц deleted_pages bigint Количество удалённых страниц avg_leaf_density float8 Средняя плотность страниц на уровне листьев leaf_fragmentation float8 Фрагментация на уровне листьев Выдаваемый размер индекса (index_size) обычно вычисляется по формуле internal_pages + leaf_pages + empty_pages + deleted_pages плюс одна страница, так как в нём учитывается и метастраница индекса.
Как и
pgstattuple, эта функция собирает данные страница за страницей и не следует ожидать, что её результат представляет мгновенный снимок всего индекса.pgstatindex(text) returns recordЭта функция равнозначна функции
pgstatindex(regclass)за исключением того, что для неё целевое отношение задаётся в текстовом виде. Данная функция оставлена для обратной совместимости, в будущем она может перейти в разряд устаревших.pgstatginindex(regclass) returns recordФункция
pgstatginindexвозвращает запись с информацией об индексе типа GIN. Например:test=> SELECT * FROM pgstatginindex('test_gin_index'); -[ RECORD 1 ]--+-- version | 1 pending_pages | 0 pending_tuples | 0Столбцы результата:
pg_relpages(regclass) returns bigintФункция
pg_relpagesвозвращает число страниц в отношении.pg_relpages(text) returns bigintЭта функция равнозначна функции
pg_relpages(regclass)за исключением того, что для неё целевое отношение задаётся в текстовом виде. Данная функция оставлена для обратной совместимости, в будущем она может перейти в разряд устаревших.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-24.
Тогда как
pgstattupleвсегда производит полное сканирование таблицы и возвращает точное число живых и мёртвых кортежей (и их размер), а также точный объём свободного пространства, функцияpgstattuple_approxпытается избежать полного сканирования и возвращает точную статистику только по мёртвым кортежам, а количество и объём живых кортежей, как и объём свободного пространства определяет приблизительно.Она делает это, пропуская страницы, в которых, согласно карте видимости, есть только видимые кортежи (если для страницы установлен соответствующий бит, предполагается, что она не содержит мёртвых кортежей). Для таких страниц эта функция узнаёт объём свободного пространства из карты свободного пространства и предполагает, что остальное пространство на странице занято живыми кортежами.
На страницах, которые нельзя пропустить, она сканирует каждый кортеж, отражает его наличие и размер в соответствующих счётчиках и суммирует свободное пространство на странице. В конце она оценивает приблизительно общее число живых кортежей, исходя из числа просканированных страниц и кортежей (так же, как VACUUM рассчитывает значение pg_class.reltuples).
Таблица F-24. Столбцы результата
pgstattuple_approxСтолбец Тип Описание 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 Процент свободного пространства В показанном выше выводе показатели свободного пространства могут не соответствовать выводу
pgstattupleв точности, потому что карта свободного пространства показывает верное значение, но не гарантируется, что оно будет точным до байта.
F.29.2. Авторы
Тацуо Исии, Сатоши Нагаясу и Абхиджит Менон-Сен
| Пред. | Начало | След. |
| pg_stat_statements | Уровень выше | pg_trgm |
