★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

56.3. 空き領域マップ

ヒープとハッシュインデックス以外のインデックスリレーションはそれぞれ、そのリレーション内で利用可能な領域を継続して追跡するために、空き領域マップ(FSM)を持ちます。 これは、個々のリレーションのフォーク内の主リレーションデータに沿って、リレーションのファイルノード番号に_fsmという接尾辞を付けた名前のファイルに格納されます。 例えばリレーションのファイルノードが12345であれば、FSMは主リレーションファイルと同じディレクトリ内の12345_fsmという名前のファイルに格納されます。

空き領域マップはFSMページのツリーとして編成されます。 最下位レベルのFSMページはすべてのヒープ(またはインデックス)ページで利用可能な空き領域を、各ページ毎に1バイト使用して格納します。 上位レベルは下位レベルからの情報を集約します。

FSMページの内部はノード当たり1バイトを持つ配列内に格納されたバイナリツリーです。 各リーフノードはヒープページ、または下位レベルのFSMページを表現します。 各非リーフノード内には、子の値より大きな値が格納されます。 したがってリーフノード内の最大値がルートに格納されます。

FSMがどのように構築されるか、そしてどのように更新、検索されるかに関する詳細はsrc/backend/storage/freespace/READMEを参照してください。 pg_freespacemapモジュールを使用して、空き領域マップに格納された情報を調べることができます。