F.44. pg_freespacemap — просмотр карты свободного пространства #
Модуль pg_freespacemap
предоставляет средства для исследования карты свободного пространства (FSM). В нём реализована функция pg_freespace
, точнее, две перегруженных функции. Эти функции показывают значение, записанное в карте свободного пространства для данной страницы, либо для всех страниц отношения.
По умолчанию его использование разрешено только суперпользователям и ролям с правами роли pg_stat_scan_tables
. Дать доступ другим можно с помощью GRANT
.
F.44.1. Функции #
-
pg_freespace(rel regclass IN, blkno bigint IN) returns int2
Возвращает объём свободного пространства на странице для отношения, заданного параметром
blkno
, согласно FSM.-
pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)
Выдаёт объём свободного пространства на каждой странице отношения, согласно FSM. Возвращается набор кортежей
(blkno bigint, avail int2)
, по одному кортежу для каждой страницы в отношении.-
pg_freespace_relation_logical_blocks(
relation
regclass
[,fork
text
]) returns bigint Вычисляет объём, который занимает на диске один слой заданного отношения в блоках (страницах). Название интересующего слоя можно указать в параметре
fork
. Возможные значения:main
возвращает размер основного слоя данных отношения.fsm
возвращает размер карты свободного места (см. Раздел 74.3), связанной с отношением.vm
возвращает размер карты видимости (см. Раздел 74.4), связанной с отношением.
Примечание
Значение
init
всегда возвращает0
, поскольку слойinit
не связан с диском.Если параметр
fork
опущен, функция вернёт размер основного слоя данных отношения.Данная функция возвращает корректные результаты как для сжатых, так и для несжатых таблиц.
Значения, хранимые в карте свободного пространства, не являются точными. Они округляются до 1/256 величины BLCKSZ
(до 32 байт со значением BLCKSZ
по умолчанию) и не поддерживаются в актуальном состоянии при каждом добавлении и изменении кортежей.
Для индексов отслеживаются полностью неиспользованные страницы, а не свободное пространство в страницах. Таким образом, эти значения отражают только то, что страница используется или свободна.
F.44.2. Пример вывода #
postgres=# SELECT * FROM pg_freespace('foo'); blkno | avail -------+------- 0 | 0 1 | 0 2 | 0 3 | 32 4 | 704 5 | 704 6 | 704 7 | 1216 8 | 704 9 | 704 10 | 704 11 | 704 12 | 704 13 | 704 14 | 704 15 | 704 16 | 704 17 | 704 18 | 704 19 | 3648 (20 rows) postgres=# SELECT * FROM pg_freespace('foo', 7); pg_freespace -------------- 1216 (1 row)
F.44.3. Автор #
Исходную версию разработал Марк Кирквуд <markir@paradise.net.nz>
. Для версии 8.4 с новой реализацией FSM код адаптировал Хейкки Линнакангас <heikki@enterprisedb.com>