pg_freespacemap
モジュールは、空き領域マップ(FSM)を検査する手法を提供します。
pg_freespace
と呼ばれる関数、正確に言うと、二つの多重定義された関数を提供します。
これらの関数は、指定されたページ、あるいはリレーションのすべてのページについての、空き領域マップに記録されている値を表示します。
デフォルトでは、使用はスーパーユーザとpg_stat_scan_tables
ロールの権限を持つロールに限定されています。
GRANT
を使って他人にアクセス権を付与できます。
空き領域マップに格納された値は、正確ではありません。
これらの値はBLCKSZ
の1/256(デフォルトBLCKSZ
では32バイト)の精度で丸められ、また、タプルが挿入や更新されるのと同時に完全に最新に保たれているというわけではありません。
インデックスでは、ページ内の空き領域ではなく、完全に未使用のページが追跡されます。 したがって、その値には意味がなく、単にページが一杯か空かを表します。
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)
オリジナルバージョンは Mark Kirkwood <markir@paradise.net.nz>
によるものです。
バージョン8.4では、Heikki Linnakangas <heikki@enterprisedb.com>
により、新しいFSM実装に合うよう書き直されました。