Перейти к основному содержимому

pg_freespacemap. Исследование карты свободного пространства (FSM)

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Модуль pg_freespacemap предоставляет средства для исследования карты свободного пространства (FSM, Free Space Map). В нем реализованы две перегруженные функции pg_freespace. Эти функции показывают значение, записанное в карте свободного пространства для данной страницы либо для всех страниц отношения.

ТипИмяВходные переменные функцииВыходные переменные функцииОписание
Функцияpg_freespacerel regclass IN, blkno bigint INint2Возвращает объем свободного пространства на странице для отношения, заданного параметром blkno, согласно FSM
Функцияpg_freespacerel regclass IN, blkno OUT bigint, avail OUT int2Набор кортежей blkno bigint, avail int2, по одному кортежу для каждой страницы в отношенииВыдает объем свободного пространства на каждой странице отношения, согласно FSM

Значения, хранимые в карте свободного пространства, не являются точными. Эти значения округляются до 1/256 величины BLCKSZ (до 32 байт со значением BLCKSZ по умолчанию) и не поддерживаются в актуальном состоянии при каждом добавлении и изменении кортежей.

Для индексов отслеживаются только полностью неиспользованные страницы. Вместо оценки объема несвободного пространства, значения отражают, занята страница в целом или свободна.

Доработка

Доработка не проводилась.

Ограничения

По умолчанию использование модуля разрешено только суперпользователям и членам роли pg_stat_scan_tables. Дать доступ другим можно с помощью GRANT.

Установка

При наличии прав администратора СУБД включение модуля выполняется запросом:

CREATE EXTENSION pg_freespacemap SCHEMA ext;

Настройка

Настройка не требуется.

Использование модуля

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)
SELECT * FROM pg_freespace('foo', 7);

Пример вывода результата запроса:

 pg_freespace 
--------------
1216
(1 row)

Ссылки на документацию разработчика

Исходная документация PosgreSQL по модулю pg_freespacemap: https://www.postgresql.org/docs/15/pgfreespacemap.html