pg_freespacemap

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

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


Функции

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), по одному кортежу для каждой страницы в отношении.

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

Для индексов отслеживаются полностью неиспользованные страницы, а не свободное пространство в страницах. Как следствие, эти значения не имеют смысла, а лишь показывают, занята страница или свободна.


Пример вывода

qhb=# 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)

qhb=# SELECT * FROM pg_freespace('foo', 7);
 pg_freespace
--------------
         1216
(1 row)

Автор

Исходную версию разработал Марк Кирквуд (Mark Kirkwood), markir@paradise.net.nz. Для версии с новой реализацией FSM код адаптировал Хейкки Линнакангас (Heikki Linnakangas), heikki@enterprisedb.com.