1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Allow VACUUM to be run with index cleanup disabled.

This commit adds a new reloption, vacuum_index_cleanup, which
controls whether index cleanup is performed for a particular
relation by default.  It also adds a new option to the VACUUM
command, INDEX_CLEANUP, which can be used to override the
reloption.  If neither the reloption nor the VACUUM option is
used, the default is true, as before.

Masahiko Sawada, reviewed and tested by Nathan Bossart, Alvaro
Herrera, Kyotaro Horiguchi, Darafei Praliaskouski, and me.
The wording of the documentation is mostly due to me.

Discussion: http://postgr.es/m/CAD21AoAt5R3DNUZSjOoXDUY=naYPUOuffVsRzuTYMz29yLzQCA@mail.gmail.com
This commit is contained in:
Robert Haas
2019-04-04 14:58:53 -04:00
parent 74eb2176bf
commit a96c41feec
11 changed files with 193 additions and 25 deletions

View File

@ -1389,6 +1389,21 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
</listitem>
</varlistentry>
<varlistentry>
<term><literal>vacuum_index_cleanup</literal> (<type>boolean</type>)</term>
<listitem>
<para>
Enables or disables index cleanup when <command>VACUUM</command> is
run on this table. The default value is <literal>true</literal>.
Disabling index cleanup can speed up <command>VACUUM</command> very
significantly, but may also lead to severely bloated indexes if table
modifications are frequent. The <literal>INDEX_CLEANUP</literal>
parameter to <xref linkend="sql-vacuum"/>, if specified, overrides
the value of this option.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>autovacuum_vacuum_threshold</literal>, <literal>toast.autovacuum_vacuum_threshold</literal> (<type>integer</type>)</term>
<listitem>

View File

@ -32,6 +32,7 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ <replaceable class="paramet
ANALYZE [ <replaceable class="parameter">boolean</replaceable> ]
DISABLE_PAGE_SKIPPING [ <replaceable class="parameter">boolean</replaceable> ]
SKIP_LOCKED [ <replaceable class="parameter">boolean</replaceable> ]
INDEX_CLEANUP [ <replaceable class="parameter">boolean</replaceable> ]
<phrase>and <replaceable class="parameter">table_and_columns</replaceable> is:</phrase>
@ -181,6 +182,28 @@ VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ ANALYZE ] [ <replaceable class="paramet
</listitem>
</varlistentry>
<varlistentry>
<term><literal>INDEX_CLEANUP</literal></term>
<listitem>
<para>
Specifies that <command>VACUUM</command> should attempt to remove
index entries pointing to dead tuples. This is normally the desired
behavior and is the default unless the
<literal>vacuum_index_cleanup</literal> option has been set to false
for the table to be vacuumed. Setting this option to false may be
useful when it is necessary to make vacuum run as quickly as possible,
for example to avoid imminent transaction ID wraparound
(see <xref linkend="vacuum-for-wraparound"/>). However, if index
cleanup is not performed regularly, performance may suffer, because
as the table is modified, indexes will accumulate dead tuples
and the table itself will accumulate dead line pointers that cannot be
removed until index cleanup is completed. This option has no effect
for tables that do not have an index and is ignored if the
<literal>FULL</literal> is used.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable class="parameter">boolean</replaceable></term>
<listitem>