71.3. Карта свободного пространства (Free space map)#

71.3. Карта свободного пространства (Free space map)

71.3. Карта свободного пространства (Free space map)

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

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

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

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