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>