summaryrefslogtreecommitdiff
path: root/doc/src
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src')
-rw-r--r--doc/src/sgml/indexam.sgml11
-rw-r--r--doc/src/sgml/maintenance.sgml58
-rw-r--r--doc/src/sgml/ref/vacuum.sgml45
-rw-r--r--doc/src/sgml/ref/vacuumdb.sgml32
4 files changed, 52 insertions, 94 deletions
diff --git a/doc/src/sgml/indexam.sgml b/doc/src/sgml/indexam.sgml
index 97af5464456..93f3411a2d0 100644
--- a/doc/src/sgml/indexam.sgml
+++ b/doc/src/sgml/indexam.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/indexam.sgml,v 2.32 2010/01/01 21:53:49 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/indexam.sgml,v 2.33 2010/02/08 04:33:51 tgl Exp $ -->
<chapter id="indexam">
<title>Index Access Method Interface Definition</title>
@@ -577,11 +577,10 @@ amrestrpos (IndexScanDesc scan);
The core <productname>PostgreSQL</productname> system obtains
<literal>AccessShareLock</> on the index during an index scan, and
<literal>RowExclusiveLock</> when updating the index (including plain
- <command>VACUUM</>). Since these lock
- types do not conflict, the access method is responsible for handling any
- fine-grained locking it might need. An exclusive lock on the index as a whole
- will be taken only during index creation, destruction,
- <command>REINDEX</>, or <command>VACUUM FULL</>.
+ <command>VACUUM</>). Since these lock types do not conflict, the access
+ method is responsible for handling any fine-grained locking it might need.
+ An exclusive lock on the index as a whole will be taken only during index
+ creation, destruction, or <command>REINDEX</>.
</para>
<para>
diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml
index e6c9d9cc4a9..ecec84cc2d9 100644
--- a/doc/src/sgml/maintenance.sgml
+++ b/doc/src/sgml/maintenance.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/maintenance.sgml,v 1.98 2010/02/03 17:25:05 momjian Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/maintenance.sgml,v 1.99 2010/02/08 04:33:51 tgl Exp $ -->
<chapter id="maintenance">
<title>Routine Database Maintenance Tasks</title>
@@ -123,9 +123,7 @@
<command>ALTER TABLE</command> while it is being vacuumed.)
<command>VACUUM FULL</> requires exclusive lock on the table it is
working on, and therefore cannot be done in parallel with other use
- of the table. Another disadvantage of <command>VACUUM FULL</> is that
- while it reduces table size, it does not reduce index size proportionally;
- in fact it can make indexes <emphasis>larger</>. Generally, therefore,
+ of the table. Generally, therefore,
administrators should strive to use standard <command>VACUUM</> and
avoid <command>VACUUM FULL</>.
</para>
@@ -166,13 +164,10 @@
system, except in the special case where one or more pages at the
end of a table become entirely free and an exclusive table lock can be
easily obtained. In contrast, <command>VACUUM FULL</> actively compacts
- tables by moving row versions to earlier pages. It is thus able to
- force pages at the end of the table to become entirely free, whereupon
- it will return them to the operating system. However, if many rows
- must be moved, this can take a long time. Also, moving a row requires
- transiently making duplicate index entries for it (the entry pointing
- to its new location must be made before the old entry can be removed);
- so moving a lot of rows this way causes severe index bloat.
+ tables by writing a complete new version of the table file with no dead
+ space. This minimizes the size of the table, but can take a long time.
+ It also requires extra disk space for the new copy of the table, until
+ the operation completes.
</para>
<para>
@@ -220,20 +215,19 @@
<tip>
<para>
- Neither form of <command>VACUUM</> is entirely satisfactory when
+ Plain <command>VACUUM</> may not be satisfactory when
a table contains large numbers of dead row versions as a result of
massive update or delete activity. If you have such a table and
- you need to reclaim the excess disk space it occupies, the best
- way is to use <xref linkend="sql-cluster" endterm="sql-cluster-title">
+ you need to reclaim the excess disk space it occupies, you will need
+ to use <command>VACUUM FULL</>, or alternatively
+ <xref linkend="sql-cluster" endterm="sql-cluster-title">
or one of the table-rewriting variants of
<xref linkend="sql-altertable" endterm="sql-altertable-title">.
These commands rewrite an entire new copy of the table and build
- new indexes for it. Like <command>VACUUM FULL</>, they require
- exclusive lock. Note that they also temporarily use extra disk
- space, since the old copies of the table and indexes can't be
- released until the new ones are complete. In the worst case where
- your disk is nearly full, <command>VACUUM FULL</> may be the only
- workable alternative.
+ new indexes for it. All these options require exclusive lock. Note that
+ they also temporarily use extra disk space approximately equal to the size
+ of the table, since the old copies of the table and indexes can't be
+ released until the new ones are complete.
</para>
</tip>
@@ -579,22 +573,22 @@ HINT: Stop the postmaster and use a standalone backend to VACUUM in "mydb".
<firstterm>autovacuum launcher</firstterm>, which is in charge of starting
<firstterm>autovacuum worker</firstterm> processes for all databases. The
launcher will distribute the work across time, attempting to start one
- worker on each database every <xref linkend="guc-autovacuum-naptime">
- seconds. One worker will be launched for each database, with a maximum
- of <xref linkend="guc-autovacuum-max-workers"> processes running at the
- same time. If there are more than
- <xref linkend="guc-autovacuum-max-workers"> databases to be processed,
+ worker within each database every <xref linkend="guc-autovacuum-naptime">
+ seconds. (Therefore, if the installation has <replaceable>N</> databases,
+ a new worker will be launched every
+ <varname>autovacuum_naptime</>/<replaceable>N</> seconds.)
+ A maximum of <xref linkend="guc-autovacuum-max-workers"> worker processes
+ are allowed to run at the same time. If there are more than
+ <varname>autovacuum_max_workers</> databases to be processed,
the next database will be processed as soon as the first worker finishes.
Each worker process will check each table within its database and
execute <command>VACUUM</> and/or <command>ANALYZE</> as needed.
</para>
<para>
- The <xref linkend="guc-autovacuum-max-workers"> setting limits how many
- workers may be running at any time. If several large tables all become
- eligible for vacuuming in a short amount of time, all autovacuum workers
- might become occupied with vacuuming those tables for a long period.
- This would result
+ If several large tables all become eligible for vacuuming in a short
+ amount of time, all autovacuum workers might become occupied with
+ vacuuming those tables for a long period. This would result
in other tables and databases not being vacuumed until a worker became
available. There is no limit on how many workers might be in a
single database, but workers do try to avoid repeating work that has
@@ -700,8 +694,8 @@ analyze threshold = analyze base threshold + analyze scale factor * number of tu
</para>
<para>
- Index pages that have become
- completely empty are reclaimed for re-use. However, here is still the possibility
+ B-tree index pages that have become completely empty are reclaimed for
+ re-use. However, there is still a possibility
of inefficient use of space: if all but a few index keys on a page have
been deleted, the page remains allocated. Therefore, a usage
pattern in which most, but not all, keys in each range are eventually
diff --git a/doc/src/sgml/ref/vacuum.sgml b/doc/src/sgml/ref/vacuum.sgml
index 07559e38c42..64b6f5e23e6 100644
--- a/doc/src/sgml/ref/vacuum.sgml
+++ b/doc/src/sgml/ref/vacuum.sgml
@@ -1,5 +1,5 @@
<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/vacuum.sgml,v 1.57 2010/01/06 05:31:13 itagaki Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/vacuum.sgml,v 1.58 2010/02/08 04:33:51 tgl Exp $
PostgreSQL documentation
-->
@@ -21,7 +21,7 @@ PostgreSQL documentation
<refsynopsisdiv>
<synopsis>
-VACUUM [ ( { FULL [ INPLACE ] | FREEZE | VERBOSE | ANALYZE } [, ...] ) ] [ <replaceable class="PARAMETER">table</replaceable> [ (<replaceable class="PARAMETER">column</replaceable> [, ...] ) ] ]
+VACUUM [ ( { FULL | FREEZE | VERBOSE | ANALYZE } [, ...] ) ] [ <replaceable class="PARAMETER">table</replaceable> [ (<replaceable class="PARAMETER">column</replaceable> [, ...] ) ] ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ <replaceable class="PARAMETER">table</replaceable> ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ <replaceable class="PARAMETER">table</replaceable> [ (<replaceable class="PARAMETER">column</replaceable> [, ...] ) ] ]
</synopsis>
@@ -58,11 +58,12 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ <replaceable class="PARAMETER">
space and makes it
available for re-use. This form of the command can operate in parallel
with normal reading and writing of the table, as an exclusive lock
- is not obtained. <command>VACUUM
- FULL</command> does more extensive processing, including moving of tuples
- across blocks to try to compact the table to the minimum number of disk
- blocks. This form is much slower and requires an exclusive lock on each
- table while it is being processed.
+ is not obtained. However, extra space is not returned to the operating
+ system (in most cases); it's just kept available for re-use within the
+ same table. <command>VACUUM FULL</command> rewrites the entire contents
+ of the table into a new disk file with no extra space, allowing unused
+ space to be returned to the operating system. This form is much slower and
+ requires an exclusive lock on each table while it is being processed.
</para>
<para>
@@ -85,27 +86,10 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ <replaceable class="PARAMETER">
<para>
Selects <quote>full</quote> vacuum, which can reclaim more
space, but takes much longer and exclusively locks the table.
- </para>
- <para>
- For user tables, all table data and indexes are rewritten. This
- method requires extra disk space in which to write the new data,
- and is generally useful when a significant amount of space needs
- to be reclaimed from within the table.
- </para>
- <para>
- For system tables, all table data and indexes are modified in
- place to reclaim space. This method may require less disk space
- for the table data than <command>VACUUM FULL</command> on a
- comparable user table, but the indexes will grow which may
- counteract that benefit. Additionally, the operation is often
- slower than <command>VACUUM FULL</command> on a comparable user
- table.
- </para>
- <para>
- If <literal>FULL INPLACE</literal> is specified, the space is
- reclaimed in the same manner as a system table, even if it is a
- user table. Specifying <literal>INPLACE</literal> explicitly is
- rarely useful.
+ This method also requires extra disk space, since it writes a
+ new copy of the table and doesn't release the old copy until
+ the operation is complete. Usually this should only be used when a
+ significant amount of space needs to be reclaimed from within the table.
</para>
</listitem>
</varlistentry>
@@ -217,10 +201,7 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ <replaceable class="PARAMETER">
or updated most of the rows in a table and would like the table to
physically shrink to occupy less disk space and allow faster table
scans. <command>VACUUM FULL</command> will usually shrink the table
- more than a plain <command>VACUUM</command> would. The
- <option>FULL</option> option does not shrink indexes; a periodic
- <command>REINDEX</> is still recommended. In fact, it is often faster
- to drop all indexes, <command>VACUUM FULL</>, and recreate the indexes.
+ more than a plain <command>VACUUM</command> would.
</para>
<para>
diff --git a/doc/src/sgml/ref/vacuumdb.sgml b/doc/src/sgml/ref/vacuumdb.sgml
index b276c5df006..20fb233a4c6 100644
--- a/doc/src/sgml/ref/vacuumdb.sgml
+++ b/doc/src/sgml/ref/vacuumdb.sgml
@@ -1,5 +1,5 @@
<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/vacuumdb.sgml,v 1.49 2010/01/07 14:35:44 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/vacuumdb.sgml,v 1.50 2010/02/08 04:33:51 tgl Exp $
PostgreSQL documentation
-->
@@ -24,7 +24,6 @@ PostgreSQL documentation
<command>vacuumdb</command>
<arg rep="repeat"><replaceable>connection-option</replaceable></arg>
<group><arg>--full</arg><arg>-f</arg></group>
- <group><arg>--inplace</arg><arg>-i</arg></group>
<group><arg>--freeze</arg><arg>-F</arg></group>
<group><arg>--verbose</arg><arg>-v</arg></group>
<group><arg>--analyze</arg><arg>-z</arg></group>
@@ -38,14 +37,12 @@ PostgreSQL documentation
<arg rep="repeat"><replaceable>connection-options</replaceable></arg>
<group><arg>--all</arg><arg>-a</arg></group>
<group><arg>--full</arg><arg>-f</arg></group>
- <group><arg>--inplace</arg><arg>-i</arg></group>
<group><arg>--freeze</arg><arg>-F</arg></group>
<group><arg>--verbose</arg><arg>-v</arg></group>
<group><arg>--analyze</arg><arg>-z</arg></group>
<group><arg>--analyze-only</arg><arg>-Z</arg></group>
</cmdsynopsis>
</refsynopsisdiv>
-
<refsect1>
<title>Description</title>
@@ -60,8 +57,8 @@ PostgreSQL documentation
<para>
<application>vacuumdb</application> is a wrapper around the SQL
command <xref linkend="SQL-VACUUM" endterm="SQL-VACUUM-title">.
- There is no effective difference between vacuuming and analyzing
- databases via this utility and via other methods for accessing the
+ There is no effective difference between vacuuming and analyzing
+ databases via this utility and via other methods for accessing the
server.
</para>
@@ -73,7 +70,6 @@ PostgreSQL documentation
<para>
<application>vacuumdb</application> accepts the following command-line arguments:
-
<variablelist>
<varlistentry>
<term><option>-a</option></term>
@@ -132,16 +128,6 @@ PostgreSQL documentation
</varlistentry>
<varlistentry>
- <term><option>-i</option></term>
- <term><option>--inplace</option></term>
- <listitem>
- <para>
- Perform <quote>full inplace</quote> vacuuming.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
<term><option>-Z</option></term>
<term><option>--analyze-only</option></term>
<listitem>
@@ -203,18 +189,16 @@ PostgreSQL documentation
</para>
<para>
- <application>vacuumdb</application> also accepts
+ <application>vacuumdb</application> also accepts
the following command-line arguments for connection parameters:
-
<variablelist>
<varlistentry>
<term><option>-h <replaceable class="parameter">host</replaceable></></term>
<term><option>--host <replaceable class="parameter">host</replaceable></></term>
<listitem>
<para>
- Specifies the host name of the machine on which the
- server
- is running. If the value begins with a slash, it is used
+ Specifies the host name of the machine on which the server
+ is running. If the value begins with a slash, it is used
as the directory for the Unix domain socket.
</para>
</listitem>
@@ -225,7 +209,7 @@ PostgreSQL documentation
<term><option>--port <replaceable class="parameter">port</replaceable></></term>
<listitem>
<para>
- Specifies the TCP port or local Unix domain socket file
+ Specifies the TCP port or local Unix domain socket file
extension on which the server
is listening for connections.
</para>
@@ -263,7 +247,7 @@ PostgreSQL documentation
<listitem>
<para>
Force <application>vacuumdb</application> to prompt for a
- password before connecting to a database.
+ password before connecting to a database.
</para>
<para>