Перейти к основному содержимому

Карта свободного пространства

Каждое отношение кучи и индекса, за исключением хэш-индексов, имеет карту свободного пространства (FSM), которая отслеживает свободное место в отношении. Она хранится вместе с основными данными отношения в отдельном форке отношения, названном по номеру файлового узла отношения плюс суффикс _fsm. Например, если файловый узел отношения равен 12345, то FSM хранится в файле с именем 12345_fsm в том же каталоге, что и основной файл отношения.

Карта свободного пространства организована в виде дерева страниц FSM. Страницы FSM нижнего уровня хранят информацию о свободном пространстве, доступном на каждой странице кучи (или индекса), используя один байт для представления каждой такой страницы. Верхние уровни агрегируют информацию с нижних уровней.

Внутри каждой страницы FSM находится двоичное дерево, хранящееся в массиве с одним байтом на узел. Каждый листовой узел представляет страницу кучи или страницу FSM более низкого уровня. В каждом нелистовом узле хранится большее из значений его дочерних узлов. Поэтому максимальное значение в узлах листа хранится в корне.

Дополнительные сведения о структуре FSM, ее обновлении и поиске см. в src/backend/storage/freespace/README. Модуль pg_freespacemap можно использовать для изучения информации, хранящейся в картах свободного пространства.