F.35. pg_freespacemap — исследовать карту свободного пространства#

F.35. pg_freespacemap — исследовать карту свободного пространства

F.35. pg_freespacemap — исследовать карту свободного пространства #

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

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

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

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

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

F.35.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.35.3. Автор #

Оригинальная версия от Марка Кирквуда . Переписана в версии 8.4 для новой реализации FSM от Хейкки Линнакангаса (Heikki Linnakangas)