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

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

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

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

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

Тип

Имя

Входные переменные функции

Выходные переменные функции

Описание

Функция

pg_freespace

rel regclass IN, blkno bigint IN

int2

Возвращает объем свободного пространства на странице для отношения, заданного параметром blkno, согласно FSM

Функция

pg_freespace

rel 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