F.41. pg_freespacemap — просмотр карты свободного пространства #
Модуль pg_freespacemap
предоставляет средства для исследования карты свободного пространства (FSM). В нём реализована функция pg_freespace
, точнее, две перегруженных функции. Эти функции показывают значение, записанное в карте свободного пространства для данной страницы, либо для всех страниц отношения.
По умолчанию его использование разрешено только суперпользователям и ролям с правами роли pg_stat_scan_tables
. Дать доступ другим можно с помощью GRANT
.
F.41.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.41.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.41.3. Автор #
Исходную версию разработал Марк Кирквуд <markir@paradise.net.nz>
. Для версии 8.4 с новой реализацией FSM код адаптировал Хейкки Линнакангас <heikki@enterprisedb.com>