Hackers,
I have prepared some docs for autovacuum. I attach the patch. Comments
on grammar, style etc. are welcome.
I will not apply it yet because it conflicts with Neil's runtime-config
restructuring, so I'll wait until he applies his patch.
--
Alvaro Herrera -- Valdivia, Chile Architect, www.EnterpriseDB.com
www.google.com: interfaz de lĂnea de comando para la web.
Index: catalogs.sgml
===================================================================
RCS file: /home/alvherre/cvs/pgsql/doc/src/sgml/catalogs.sgml,v
retrieving revision 2.113
diff -c -r2.113 catalogs.sgml
*** catalogs.sgml 8 Sep 2005 20:07:41 -0000 2.113
--- catalogs.sgml 12 Sep 2005 13:56:35 -0000
***************
*** 1137,1145 ****
<primary>pg_autovacuum</primary>
</indexterm>
<para>
The catalog <structname>pg_autovacuum</structname> stores optional
! per-relation configuration parameters for <quote>autovacuum</>.
If there is an entry here for a particular relation, the given
parameters will be used for autovacuuming that table. If no entry
is present, the system-wide defaults will be used.
--- 1137,1150 ----
<primary>pg_autovacuum</primary>
</indexterm>
+ <indexterm zone="catalog-pg-autovacuum">
+ <primary>autovacuum</primary>
+ <secondary>table-specific configuration</secondary>
+ </indexterm>
+
<para>
The catalog <structname>pg_autovacuum</structname> stores optional
! per-relation configuration parameters for <xref linkend="autovacuum"
endterm="autovacuum-title">.
If there is an entry here for a particular relation, the given
parameters will be used for autovacuuming that table. If no entry
is present, the system-wide defaults will be used.
Index: maintenance.sgml
===================================================================
RCS file: /home/alvherre/cvs/pgsql/doc/src/sgml/maintenance.sgml,v
retrieving revision 1.45
diff -c -r1.45 maintenance.sgml
*** maintenance.sgml 22 Jun 2005 21:14:28 -0000 1.45
--- maintenance.sgml 12 Sep 2005 14:10:17 -0000
***************
*** 99,104 ****
--- 99,110 ----
<xref linkend="runtime-config-resource-vacuum-cost">.
</para>
+ <para>
+ An automated mechanism for performing the necessary <command>VACUUM</>
+ operations has been added in <productname>PostgreSQL</productname> 8.1.
+ See <xref linkend="autovacuum" endterm="autovacuum-title">.
+ </para>
+
<sect2 id="vacuum-for-space-recovery">
<title>Recovering disk space</title>
***************
*** 177,189 ****
the program <filename>vacuumdb</> may be helpful.
</para>
- <tip>
- <para>
- The <filename>contrib/pg_autovacuum</> program can be useful for
- automating high-frequency vacuuming operations.
- </para>
- </tip>
-
<para>
<command>VACUUM FULL</> is recommended for cases where you know
you have deleted the majority of rows in a table, so that the
--- 183,188 ----
***************
*** 456,461 ****
--- 455,551 ----
</para>
</warning>
</sect2>
+
+ <sect2 id="autovacuum">
+ <title id="autovacuum-title">The Auto-Vacuum Daemon</title>
+
+ <indexterm>
+ <primary>autovacuum</primary>
+ <secondary>general information</secondary>
+ </indexterm>
+ <para>
+ Beginning in <productname>PostgreSQL </productname> 8.1, there is a
+ separate optional server process called the <firstterm>autovacuum
+ daemon</firstterm>, whose purpose is to automate the issuance of
+ <command>VACUUM</command> and <command>ANALYZE </command> commands.
+ When enabled, the autovacuum daemon runs periodically and checks for
+ tables that have had a large number of inserted, updated or deleted
+ tuples. These checks use the row-level statistics collection facility;
+ therefore, the autovacuum daemon cannot be used unless <xref
+ linkend="guc-stats-start-collector"> and <xref
+ linkend="guc-stats-row-level"> are set <literal>true</literal>. Also,
it's
+ important to allow a slot for the autovacuum process when choosing the
+ value of <xref linkend="guc-superuser-reserved-connections">.
+ </para>
+
+ <para>
+ The autovacuum daemon, when enabled, runs every <xref
+ linkend="guc-autovacuum-naptime"> seconds and determines which database
+ to process. Any database which is close to transaction ID wraparound
+ is immediately processed. In this case, autovacuum issues a
+ database-wide <command>VACUUM</command> call, or <command>VACUUM
+ FREEZE</command> if it's a template database, and then terminates. If
+ no database fulfills this criterion, the one that was least recently
+ processed by autovacuum itself is chosen. In this mode, each table in
+ the database is checked for new and obsolete tuples, according to the
+ applicable autovacuum parameters. If a <link
linkend="catalog-pg-autovacuum">
+ <structname>pg_autovacuum</structname></link> tuple is found for this
+ table, these settings are applied; otherwise the global values in
+ <filename>postgresql.conf</filename> are used. See <xref
linkend="runtime-config-autovacuum">
+ for more details on the global settings. Note that the autovacuum
+ daemon can be instructed to skip particular tables, by setting the
+ <structname>pg_autovacuum</>.<structfield>enabled</> field to
<literal>false</literal>.
+ </para>
+
+ <para>
+ For each table, two conditions are used to determine which operation to
+ apply. If the number of obsolete tuples since the last
+ <command>VACUUM</command> exceeds the <quote>vacuum threshold</quote>, the
+ table is vacuumed and analyzed. The vacuum threshold is defined as:
+ <programlisting>
+ vacuum threshold = vacuum base threshold + vacuum scale factor * number of
tuples
+ </programlisting>
+ where the vacuum base threshold is
+
<structname>pg_autovacuum</structname>.<structfield>vac_base_thresh</structfield>,
+ the vacuum scale factor is
+
<structname>pg_autovacuum</structname>.<structfield>vac_scale_factor</structfield>
+ and the number of tuples is
+ <structname>pg_class</structname>.<structfield>reltuples</structfield>.
+ The number of obsolete tuples is taken from the statistics
+ collector, which is a semi-accurate count updated by each
+ <command>UPDATE</command> and <command>DELETE</command> operation. (It
+ is only semi-accurate because some information may be lost under heavy
+ load.) For analyze, a similar condition is used: the threshold,
calculated
+ by an equivalent equation to that above, is compared to the number of
+ new tuples, that is, those created by the <command>INSERT</command> and
+ <command>COPY</command> commands.
+ </para>
+
+ <para>
+ Note that if any of the values in <structname>pg_autovacuum</structname>
+ is set to a negative number, or if a tuple is not present at all in
+ <structname>pg_autovacuum</structname> for any particular table, the
+ equivalent value from <filename>postgresql.conf</filename> is used.
+ </para>
+
+ <para>
+ Additionally to the base threshold values and scale factors, there are
+ two parameters that can be set for each table in
<structname>pg_autovacuum</structname>:
+ the vacuum cost delay
+
(<structname>pg_autovacuum</structname>.<structfield>vac_cost_delay</structfield>)
+ and the vacuum cost limit
+
(<structname>pg_autovacuum</structname>.<structfield>vac_cost_limit</structfield>).
+ They are used to set table-specific values for the
+ <xref linkend="runtime-config-resource-vacuum-cost"
endterm="runtime-config-resource-vacuum-cost-title">
+ feature. The above note about negative values also applies here, but
+ also note that if the <filename>postgresql.conf</filename> variables
+ <varname>autovacuum_vacuum_cost_limit</varname> and
+ <varname>autovacuum_vacuum_cost_delay</varname> are also set to negative
+ values, the <varname>vacuum_cost_limit</varname> and
+ <varname>vacuum_cost_delay</varname> values will be used instead.
+ </para>
+
+ </sect2>
</sect1>
Index: runtime.sgml
===================================================================
RCS file: /home/alvherre/cvs/pgsql/doc/src/sgml/runtime.sgml,v
retrieving revision 1.352
diff -c -r1.352 runtime.sgml
*** runtime.sgml 30 Aug 2005 15:48:28 -0000 1.352
--- runtime.sgml 12 Sep 2005 13:55:25 -0000
***************
*** 3344,3361 ****
<sect2 id="runtime-config-autovacuum">
<title>Automatic Vacuuming</title>
<para>
! Beginning in <productname>PostgreSQL</> 8.1, there is an optional server
! process called the <firstterm>autovacuum daemon</>, whose purpose is
! to automate the issuance of periodic <command>VACUUM</> and
! <command>ANALYZE</> commands. When enabled, the autovacuum daemon
! runs periodically and checks for tables that have had a large number
! of updated or deleted tuples. This check uses the row-level statistics
! collection facility; therefore, the autovacuum daemon cannot be used
! unless <xref linkend="guc-stats-start-collector"> and
! <xref linkend="guc-stats-row-level"> are set TRUE. Also, it's
! important to allow a slot for the autovacuum process when choosing
! the value of <xref linkend="guc-superuser-reserved-connections">.
</para>
<variablelist>
--- 3344,3358 ----
<sect2 id="runtime-config-autovacuum">
<title>Automatic Vacuuming</title>
+ <indexterm>
+ <primary>autovacuum</primary>
+ <secondary>global configuration parameters</secondary>
+ </indexterm>
+
<para>
! These settings control the default behavior for the
<firstterm>autovacuum
! daemon</firstterm>. Please refer to <xref linkend="autovacuum"> for
! more information.
</para>
<variablelist>
***************
*** 3470,3477 ****
<command>VACUUM</> operations. If -1 is specified (which is the
default), the regular
<xref linkend="guc-vacuum-cost-delay"> value will be used.
- This setting can be overridden for individual tables by entries in
- <structname>pg_autovacuum</>.
</para>
</listitem>
</varlistentry>
--- 3467,3472 ----
***************
*** 3487,3494 ****
<command>VACUUM</> operations. If -1 is specified (which is the
default), the regular
<xref linkend="guc-vacuum-cost-limit"> value will be used.
- This setting can be overridden for individual tables by entries in
- <structname>pg_autovacuum</>.
</para>
</listitem>
</varlistentry>
--- 3482,3487 ----
---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?
http://archives.postgresql.org