aboutsummaryrefslogtreecommitdiff
path: root/doc/src/sgml/pgstattuple.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/pgstattuple.sgml')
-rw-r--r--doc/src/sgml/pgstattuple.sgml272
1 files changed, 194 insertions, 78 deletions
diff --git a/doc/src/sgml/pgstattuple.sgml b/doc/src/sgml/pgstattuple.sgml
index eaa3a547035..ad52dcd4420 100644
--- a/doc/src/sgml/pgstattuple.sgml
+++ b/doc/src/sgml/pgstattuple.sgml
@@ -1,29 +1,35 @@
+<!-- $PostgreSQL: pgsql/doc/src/sgml/pgstattuple.sgml,v 1.3 2007/12/10 05:32:51 tgl Exp $ -->
<sect1 id="pgstattuple">
<title>pgstattuple</title>
-
+
<indexterm zone="pgstattuple">
<primary>pgstattuple</primary>
</indexterm>
<para>
- <literal>pgstattuple</literal> modules provides various functions to obtain
- tuple statistics.
+ The <filename>pgstattuple</filename> module provides various functions to
+ obtain tuple-level statistics.
</para>
<sect2>
<title>Functions</title>
- <itemizedlist>
- <listitem>
- <para>
- <literal>pgstattuple()</literal> returns the relation length, percentage
- of the "dead" tuples of a relation and other info. This may help users to
- determine whether vacuum is necessary or not. Here is an example session:
- </para>
- <programlisting>
-test=> \x
-Expanded display is on.
+ <variablelist>
+ <varlistentry>
+ <term>
+ <function>pgstattuple(text) returns record</>
+ </term>
+
+ <listitem>
+ <para>
+ <function>pgstattuple</function> returns a relation's physical length,
+ percentage of <quote>dead</> tuples, and other info. This may help users
+ to determine whether vacuum is necessary or not. The argument is the
+ target relation's name (optionally schema-qualified).
+ For example:
+ </para>
+ <programlisting>
test=> SELECT * FROM pgstattuple('pg_catalog.pg_proc');
-[ RECORD 1 ]------+-------
table_len | 458752
@@ -35,86 +41,111 @@ dead_tuple_len | 3157
dead_tuple_percent | 0.69
free_space | 8932
free_percent | 1.95
- </programlisting>
+ </programlisting>
+
<para>
- Here are explanations for each column:
+ The output columns are:
</para>
-
+
<table>
- <title><literal>pgstattuple()</literal> column descriptions</title>
- <tgroup cols="2">
+ <title><function>pgstattuple</function> output columns</title>
+ <tgroup cols="3">
<thead>
<row>
<entry>Column</entry>
+ <entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
+
<tbody>
<row>
- <entry>table_len</entry>
- <entry>physical relation length in bytes</entry>
+ <entry><structfield>table_len</structfield></entry>
+ <entry><type>bigint</type></entry>
+ <entry>Physical relation length in bytes</entry>
+ </row>
+ <row>
+ <entry><structfield>tuple_count</structfield></entry>
+ <entry><type>bigint</type></entry>
+ <entry>Number of live tuples</entry>
</row>
<row>
- <entry>tuple_count</entry>
- <entry>number of live tuples</entry>
+ <entry><structfield>tuple_len</structfield></entry>
+ <entry><type>bigint</type></entry>
+ <entry>Total length of live tuples in bytes</entry>
</row>
<row>
- <entry>tuple_len</entry>
- <entry>total tuples length in bytes</entry>
+ <entry><structfield>tuple_percent</structfield></entry>
+ <entry><type>float8</type></entry>
+ <entry>Percentage of live tuples</entry>
</row>
<row>
- <entry>tuple_percent</entry>
- <entry>live tuples in %</entry>
+ <entry><structfield>dead_tuple_count</structfield></entry>
+ <entry><type>bigint</type></entry>
+ <entry>Number of dead tuples</entry>
</row>
<row>
- <entry>dead_tuple_len</entry>
- <entry>total dead tuples length in bytes</entry>
+ <entry><structfield>dead_tuple_len</structfield></entry>
+ <entry><type>bigint</type></entry>
+ <entry>Total length of dead tuples in bytes</entry>
</row>
<row>
- <entry>dead_tuple_percent</entry>
- <entry>dead tuples in %</entry>
+ <entry><structfield>dead_tuple_percent</structfield></entry>
+ <entry><type>float8</type></entry>
+ <entry>Percentage of dead tuples</entry>
</row>
<row>
- <entry>free_space</entry>
- <entry>free space in bytes</entry>
+ <entry><structfield>free_space</structfield></entry>
+ <entry><type>bigint</type></entry>
+ <entry>Total free space in bytes</entry>
</row>
<row>
- <entry>free_percent</entry>
- <entry>free space in %</entry>
+ <entry><structfield>free_percent</structfield></entry>
+ <entry><type>float8</type></entry>
+ <entry>Percentage of free space</entry>
</row>
+
</tbody>
</tgroup>
</table>
- <para>
- <note>
- <para>
- <literal>pgstattuple</literal> acquires only a read lock on the relation. So
- concurrent update may affect the result.
- </para>
- </note>
- <note>
- <para>
- <literal>pgstattuple</literal> judges a tuple is "dead" if HeapTupleSatisfiesNow()
- returns false.
- </para>
- </note>
- </para>
- </listitem>
-
- <listitem>
<para>
- <literal>pg_relpages()</literal> returns the number of pages in the relation.
+ <function>pgstattuple</function> acquires only a read lock on the
+ relation. So the results do not reflect an instantaneous snapshot;
+ concurrent updates will affect them.
</para>
- </listitem>
- <listitem>
<para>
- <literal>pgstatindex()</literal> returns an array showing the information about an index:
+ <function>pgstattuple</function> judges a tuple is <quote>dead</> if
+ <function>HeapTupleSatisfiesNow</> returns false.
</para>
- <programlisting>
-test=> \x
-Expanded display is on.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <function>pgstattuple(oid) returns record</>
+ </term>
+
+ <listitem>
+ <para>
+ This is the same as <function>pgstattuple(text)</function>, except
+ that the target relation is specified by OID.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <function>pgstatindex(text) returns record</>
+ </term>
+
+ <listitem>
+ <para>
+ <function>pgstatindex</function> returns a record showing information
+ about a btree index. For example:
+ </para>
+ <programlisting>
test=> SELECT * FROM pgstatindex('pg_cast_oid_index');
-[ RECORD 1 ]------+------
version | 2
@@ -128,31 +159,116 @@ deleted_pages | 0
avg_leaf_density | 50.27
leaf_fragmentation | 0
</programlisting>
- </listitem>
- </itemizedlist>
+
+ <para>
+ The output columns are:
+ </para>
+
+ <table>
+ <title><function>pgstatindex</function> output columns</title>
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Column</entry>
+ <entry>Type</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><structfield>version</structfield></entry>
+ <entry><type>integer</type></entry>
+ <entry>Btree version number</entry>
+ </row>
+
+ <row>
+ <entry><structfield>tree_level</structfield></entry>
+ <entry><type>integer</type></entry>
+ <entry>Tree level of the root page</entry>
+ </row>
+
+ <row>
+ <entry><structfield>index_size</structfield></entry>
+ <entry><type>integer</type></entry>
+ <entry>Total number of pages in index</entry>
+ </row>
+
+ <row>
+ <entry><structfield>root_block_no</structfield></entry>
+ <entry><type>integer</type></entry>
+ <entry>Location of root block</entry>
+ </row>
+
+ <row>
+ <entry><structfield>internal_pages</structfield></entry>
+ <entry><type>integer</type></entry>
+ <entry>Number of <quote>internal</> (upper-level) pages</entry>
+ </row>
+
+ <row>
+ <entry><structfield>leaf_pages</structfield></entry>
+ <entry><type>integer</type></entry>
+ <entry>Number of leaf pages</entry>
+ </row>
+
+ <row>
+ <entry><structfield>empty_pages</structfield></entry>
+ <entry><type>integer</type></entry>
+ <entry>Number of empty pages</entry>
+ </row>
+
+ <row>
+ <entry><structfield>deleted_pages</structfield></entry>
+ <entry><type>integer</type></entry>
+ <entry>Number of deleted pages</entry>
+ </row>
+
+ <row>
+ <entry><structfield>avg_leaf_density</structfield></entry>
+ <entry><type>float8</type></entry>
+ <entry>Average density of leaf pages</entry>
+ </row>
+
+ <row>
+ <entry><structfield>leaf_fragmentation</structfield></entry>
+ <entry><type>float8</type></entry>
+ <entry>Leaf page fragmentation</entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>
+ As with <function>pgstattuple</>, the results are accumulated
+ page-by-page, and should not be expected to represent an
+ instantaneous snapshot of the whole index.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <function>pg_relpages(text) returns integer</>
+ </term>
+
+ <listitem>
+ <para>
+ <function>pg_relpages</function> returns the number of pages in the
+ relation.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
</sect2>
<sect2>
- <title>Usage</title>
- <para>
- <literal>pgstattuple</literal> may be called as a relation function and is
- defined as follows:
- </para>
- <programlisting>
- CREATE OR REPLACE FUNCTION pgstattuple(text) RETURNS pgstattuple_type
- AS 'MODULE_PATHNAME', 'pgstattuple'
- LANGUAGE C STRICT;
-
- CREATE OR REPLACE FUNCTION pgstattuple(oid) RETURNS pgstattuple_type
- AS 'MODULE_PATHNAME', 'pgstattuplebyid'
- LANGUAGE C STRICT;
- </programlisting>
+ <title>Author</title>
+
<para>
- The argument is the relation name (optionally it may be qualified)
- or the OID of the relation. Note that pgstattuple only returns
- one row.
+ Tatsuo Ishii
</para>
</sect2>
</sect1>
-