postgresql/doc/src/sgml/pgfreespacemap.sgml

122 lines
3.2 KiB
Plaintext

<!-- doc/src/sgml/pgfreespacemap.sgml -->
<sect1 id="pgfreespacemap" xreflabel="pg_freespacemap">
<title>pg_freespacemap &mdash; examine the free space map</title>
<indexterm zone="pgfreespacemap">
<primary>pg_freespacemap</primary>
</indexterm>
<para>
The <filename>pg_freespacemap</filename> module provides a means for examining the
<link linkend="storage-fsm">free space map</link> (<acronym>FSM</acronym>).
It provides a function called <function>pg_freespace</function>, or two
overloaded functions, to be precise. The functions show the value recorded in
the free space map for a given page, or for all pages in the relation.
</para>
<para>
By default use is restricted to superusers and roles with privileges of the
<literal>pg_stat_scan_tables</literal> role. Access may be granted to others
using <command>GRANT</command>.
</para>
<sect2 id="pgfreespacemap-funcs">
<title>Functions</title>
<variablelist>
<varlistentry>
<term>
<function>pg_freespace(rel regclass IN, blkno bigint IN) returns int2</function>
<indexterm>
<primary>pg_freespace</primary>
</indexterm>
</term>
<listitem>
<para>
Returns the amount of free space on the page of the relation, specified
by <literal>blkno</literal>, according to the <acronym>FSM</acronym>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<function>pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)</function>
</term>
<listitem>
<para>
Displays the amount of free space on each page of the relation,
according to the <acronym>FSM</acronym>. A set of
<literal>(blkno bigint, avail int2)</literal>
tuples is returned, one tuple for each page in the relation.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
The values stored in the free space map are not exact. They're rounded
to precision of 1/256th of <symbol>BLCKSZ</symbol> (32 bytes with default <symbol>BLCKSZ</symbol>), and
they're not kept fully up-to-date as tuples are inserted and updated.
</para>
<para>
For indexes, what is tracked is entirely-unused pages, rather than free
space within pages. Therefore, the values are not meaningful, just
whether a page is full or empty.
</para>
</sect2>
<sect2 id="pgfreespacemap-sample-output">
<title>Sample Output</title>
<screen>
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)
</screen>
</sect2>
<sect2 id="pgfreespacemap-author">
<title>Author</title>
<para>
Original version by Mark Kirkwood <email>markir@paradise.net.nz</email>.
Rewritten in version 8.4 to suit new <acronym>FSM</acronym> implementation
by Heikki Linnakangas <email>heikki@enterprisedb.com</email>
</para>
</sect2>
</sect1>