1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

Minor improvements in backup and recovery:

- create a separate archive_mode GUC, on which archive_command is dependent

- %r option in recovery.conf sends last restartpoint to recovery command

- %r used in pg_standby, updated README

- minor other code cleanup in pg_standby

- doc on Warm Standby now mentions pg_standby and %r

- log_restartpoints recovery option emits LOG message at each restartpoint

- end of recovery now displays last transaction end time, as requested
  by Warren Little; also shown at each restartpoint

- restart archiver if needed to carry away WAL files at shutdown

Simon Riggs
This commit is contained in:
Tom Lane
2007-09-26 22:36:30 +00:00
parent 80963144ad
commit f18dfc4835
12 changed files with 356 additions and 118 deletions

View File

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/backup.sgml,v 2.101 2007/09/14 13:26:22 momjian Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/backup.sgml,v 2.102 2007/09/26 22:36:30 tgl Exp $ -->
<chapter id="backup">
<title>Backup and Restore</title>
@ -518,10 +518,13 @@ tar -cf backup.tar /usr/local/pgsql/data
</para>
<para>
The shell command to use is specified by the <xref
linkend="guc-archive-command"> configuration parameter, which in practice
will always be placed in the <filename>postgresql.conf</filename> file.
In this string,
To enable WAL archiving, set the <xref
linkend="guc-archive-mode"> configuration parameter to <literal>on</>,
and specify the shell command to use in the <xref
linkend="guc-archive-command"> configuration parameter. In practice
these settings will always be placed in the
<filename>postgresql.conf</filename> file.
In <varname>archive_command</>,
any <literal>%p</> is replaced by the path name of the file to
archive, while any <literal>%f</> is replaced by the file name only.
(The path name is relative to the working directory of the server,
@ -1030,8 +1033,15 @@ restore_command = 'cp /mnt/server/archivedir/%f %p'
it to on the server.
(The path name is relative to the working directory of the server,
i.e., the cluster's data directory.)
Any <literal>%r</> is replaced by the name of the file containing the
last valid restartpoint. That is the earliest file that must be kept
to allow a restore to be restartable, so this information can be used
to truncate the archive to just the minimum required to support
restart of the current restore. <literal>%r</> would only be used in a
warm-standby configuration (see <xref
linkend="warm-standby-planning">).
Write <literal>%%</> to embed an actual <literal>%</> character
in the command.
in the command.
</para>
<para>
It is important for the command to return a zero exit status if and
@ -1118,6 +1128,20 @@ restore_command = 'copy /mnt/server/archivedir/%f "%p"' # Windows
</listitem>
</varlistentry>
<varlistentry id="log-restartpoints"
xreflabel="log_restartpoints">
<term><varname>log_restartpoints</varname>
(<type>boolean</type>)
</term>
<listitem>
<para>
Specifies whether to log each restart point as it occurs. This
can be helpful to track the progress of a long recovery.
Default is <literal>false</>.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect3>
@ -1389,7 +1413,8 @@ restore_command = 'copy /mnt/server/archivedir/%f "%p"' # Windows
contact between the two database servers is the archive of WAL files
that both share: primary writing to the archive, standby reading from
the archive. Care must be taken to ensure that WAL archives for separate
primary servers do not become mixed together or confused.
primary servers do not become mixed together or confused. The archive
need not be large, if it is only required for the standby operation.
</para>
<para>
@ -1426,6 +1451,12 @@ if (!triggered)
</programlisting>
</para>
<para>
A working example of a waiting <varname>restore_command</> is provided
as a contrib module, named <application>pg_standby</>. This can be
extended as needed to support specific configurations or environments.
</para>
<para>
<productname>PostgreSQL</productname> does not provide the system
software required to identify a failure on the primary and notify
@ -1449,6 +1480,15 @@ if (!triggered)
as the explicit creation of a trigger file is less error prone, if
this can be arranged.
</para>
<para>
The size of the WAL archive can be minimized by using the <literal>%r</>
option of the <varname>restore_command</>. This option specifies the
last archive filename that needs to be kept to allow the recovery to
restart correctly. This can be used to truncate the archive once
files are no longer required, if the archive is writable from the
standby server.
</para>
</sect2>
<sect2 id="warm-standby-config">
@ -1468,8 +1508,10 @@ if (!triggered)
<listitem>
<para>
Set up continuous archiving from the primary to a WAL archive located
in a directory on the standby server. Ensure that <xref
linkend="guc-archive-command"> and <xref linkend="guc-archive-timeout">
in a directory on the standby server. Ensure that
<xref linkend="guc-archive-mode">,
<xref linkend="guc-archive-command"> and
<xref linkend="guc-archive-timeout">
are set appropriately on the primary
(see <xref linkend="backup-archiving-wal">).
</para>
@ -1631,7 +1673,8 @@ if (!triggered)
far back you need to keep WAL segment files to have a recoverable
backup. You can do this by running <application>pg_controldata</>
on the standby server to inspect the control file and determine the
current checkpoint WAL location.
current checkpoint WAL location, or by using the
<varname>log_restartpoints</> option to print values to the server log.
</para>
</sect2>
</sect1>

View File

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.147 2007/09/25 20:03:37 tgl Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.148 2007/09/26 22:36:30 tgl Exp $ -->
<chapter Id="runtime-config">
<title>Server Configuration</title>
@ -1620,6 +1620,24 @@ SET ENABLE_SEQSCAN TO OFF;
<title>Archiving</title>
<variablelist>
<varlistentry id="guc-archive-mode" xreflabel="archive_mode">
<term><varname>archive_mode</varname> (<type>boolean</type>)</term>
<indexterm>
<primary><varname>archive_mode</> configuration parameter</primary>
</indexterm>
<listitem>
<para>
When <varname>archive_mode</> is enabled, completed WAL segments
can be sent to archive storage by setting
<xref linkend="guc-archive-command">.
<varname>archive_mode</> and <varname>archive_command</> are
separate variables so that <varname>archive_command</> can be
changed without leaving archiving mode.
This parameter can only be set at server start.
</para>
</listitem>
</varlistentry>
<varlistentry id="guc-archive-command" xreflabel="archive_command">
<term><varname>archive_command</varname> (<type>string</type>)</term>
<indexterm>
@ -1628,8 +1646,7 @@ SET ENABLE_SEQSCAN TO OFF;
<listitem>
<para>
The shell command to execute to archive a completed segment of
the WAL file series. If this is an empty string (the default),
WAL archiving is disabled. Any <literal>%p</> in the string is
the WAL file series. Any <literal>%p</> in the string is
replaced by the path name of the file to archive, and any
<literal>%f</> is replaced by the file name only.
(The path name is relative to the working directory of the server,
@ -1638,7 +1655,12 @@ SET ENABLE_SEQSCAN TO OFF;
command. For more information see <xref
linkend="backup-archiving-wal">.
This parameter can only be set in the <filename>postgresql.conf</>
file or on the server command line.
file or on the server command line. It is ignored unless
<varname>archive_mode</> was enabled at server start.
If <varname>archive_command</> is an empty string (the default) while
<varname>archive_mode</> is enabled, then WAL archiving is temporarily
disabled, but the server continues to accumulate WAL segment files in
the expectation that a command will soon be provided.
</para>
<para>
It is important for the command to return a zero exit status if

View File

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/perform.sgml,v 1.64 2007/03/29 00:15:36 tgl Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/perform.sgml,v 1.65 2007/09/26 22:36:30 tgl Exp $ -->
<chapter id="performance-tips">
<title>Performance Tips</title>
@ -819,7 +819,7 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
needs to be written, because in case of an error, the files
containing the newly loaded data will be removed anyway.
However, this consideration does not apply when
<xref linkend="guc-archive-command"> is set, as all commands
<xref linkend="guc-archive-mode"> is set, as all commands
must write WAL in that case.
</para>
@ -892,22 +892,24 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
</sect2>
<sect2 id="populate-pitr">
<title>Turn off <varname>archive_command</varname></title>
<title>Turn off <varname>archive_mode</varname></title>
<para>
When loading large amounts of data into an installation that uses
WAL archiving, you might want to disable archiving (unset the
<xref linkend="guc-archive-command"> configuration variable)
WAL archiving, you might want to disable archiving (turn off the
<xref linkend="guc-archive-mode"> configuration variable)
while loading. It might be
faster to take a new base backup after the load has completed
than to process a large amount of incremental WAL data.
But note that turning <varname>archive_mode</varname> on or off
requires a server restart.
</para>
<para>
Aside from avoiding the time for the archiver to process the WAL data,
doing this will actually make certain commands faster, because they
are designed not to write WAL at all if <varname>archive_command</varname>
is unset. (They can guarantee crash safety more cheaply by doing an
are designed not to write WAL at all if <varname>archive_mode</varname>
is off. (They can guarantee crash safety more cheaply by doing an
<function>fsync</> at the end than by writing WAL.)
This applies to the following commands:
<itemizedlist>
@ -989,8 +991,8 @@ SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
<listitem>
<para>
If using WAL archiving, consider disabling it during the restore.
To do that, unset <varname>archive_command</varname> before loading the
dump script, and afterwards restore <varname>archive_command</varname>
To do that, turn off <varname>archive_mode</varname> before loading the
dump script, and afterwards turn it back on
and take a fresh base backup.
</para>
</listitem>

View File

@ -1,5 +1,5 @@
<!--
$PostgreSQL: pgsql/doc/src/sgml/ref/show.sgml,v 1.43 2007/09/11 00:06:41 tgl Exp $
$PostgreSQL: pgsql/doc/src/sgml/ref/show.sgml,v 1.44 2007/09/26 22:36:30 tgl Exp $
PostgreSQL documentation
-->
@ -171,7 +171,7 @@ SHOW ALL;
name | setting | description
--------------------------------+--------------------------------+----------------------------------------------------------------------------------------------
add_missing_from | off | Automatically adds missing table references to FROM clauses.
archive_command | unset | WAL archiving command.
allow_system_table_mods | off | Allows modifications of the structure of system tables.
.
.
.