F.39. pg_freespacemap
Модуль pg_freespacemap предоставляет средства для исследования карты свободного пространства (FSM). В нём реализована функция pg_freespace, точнее, две перегруженных функции. Эти функции показывают значение, записанное в карте свободного пространства для данной страницы, либо для всех страниц отношения.
По умолчанию его использование разрешено только суперпользователям и членам роли pg_stat_scan_tables. Дать доступ другим можно с помощью GRANT.
F.39.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(relationregclass[,forktext]) returns bigint Вычисляет объём, который занимает на диске один слой заданного отношения в блоках (страницах). Название интересующего слоя можно указать в параметре
fork. Возможные значения:mainвозвращает размер основного слоя данных отношения.fsmвозвращает размер карты свободного места (см. Раздел 70.3), связанной с отношением.vmвозвращает размер карты видимости (см. Раздел 70.4), связанной с отношением.
Примечание
Значение
initвсегда возвращает0, поскольку слойinitне связан с диском.Если параметр
forkопущен, функция вернёт размер основного слоя данных отношения.Данная функция возвращает корректные результаты как для сжатых, так и для несжатых таблиц.
Значения, хранимые в карте свободного пространства, не являются точными. Они округляются до 1/256 величины BLCKSZ (до 32 байт со значением BLCKSZ по умолчанию) и не поддерживаются в актуальном состоянии при каждом добавлении и изменении кортежей.
Для индексов отслеживаются полностью неиспользованные страницы, а не свободное пространство в страницах. Таким образом, эти значения отражают только то, что страница используется или свободна.
F.39.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.39.3. Автор
Исходную версию разработал Марк Кирквуд <markir@paradise.net.nz>. Для версии 8.4 с новой реализацией FSM код адаптировал Хейкки Линнакангас <heikki@enterprisedb.com>