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. Автор #
Оригинальная версия от Марка Кирквуда <markir@paradise.net.nz>
.
Переписана в версии 8.4 для новой реализации FSM
от Хейкки Линнакангаса (Heikki Linnakangas) <heikki@enterprisedb.com>