WIP archive_timeout.
All we need to do is add LWLock support to archiver.
Thoughts/ideas/hints welcome.
This is a patch-on-patch atop the xswitch.patch recently posted.
--
Simon Riggs
EnterpriseDB http://www.enterprisedb.com
Index: doc/src/sgml/backup.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/backup.sgml,v
retrieving revision 2.81
diff -c -r2.81 backup.sgml
*** doc/src/sgml/backup.sgml 18 Jun 2006 15:38:35 -0000 2.81
--- doc/src/sgml/backup.sgml 31 Jul 2006 20:34:25 -0000
***************
*** 573,600 ****
the <filename>pg_xlog/</> directory will contain large numbers of
not-yet-archived segment files, which could eventually exceed available
disk space. You are advised to monitor the archiving process to ensure that
! it is working as you intend.
</para>
<para>
! If you are concerned about being able to recover right up to the
! current instant, you may want to take additional steps to ensure that
! the current, partially-filled WAL segment is also copied someplace.
! This is particularly important if your server generates only little WAL
! traffic (or has slack periods where it does so), since it could take a
! long time before a WAL segment file is completely filled and ready to
! archive. One possible way to handle this is to set up a
! <application>cron</> job that periodically (once a minute, perhaps)
! identifies the current WAL segment file and saves it someplace safe.
! Then the combination of the archived WAL segments and the saved current
! segment will be enough to ensure you can always restore to within a
! minute of current time. This behavior is not presently built into
! <productname>PostgreSQL</> because we did not want to complicate the
! definition of the <xref linkend="guc-archive-command"> by requiring it
! to keep track of successively archived, but different, copies of the
! same WAL file. The <xref linkend="guc-archive-command"> is only
! invoked on completed WAL segments. Except in the case of retrying a
! failure, it will be called only once for any given file name.
</para>
<para>
--- 573,593 ----
the <filename>pg_xlog/</> directory will contain large numbers of
not-yet-archived segment files, which could eventually exceed available
disk space. You are advised to monitor the archiving process to ensure that
! it is working as you intend.
</para>
<para>
! The <xref linkend="guc-archive-command"> is only invoked on completed
! WAL segments. This could lead to delays in producing the next archive
! if your server generates only little WAL traffic (or has slack periods
! where it does so). To ensure regular archives are produced you can
! specify an <xref linkend="guc-archive-timeout"> which will automatically
! switch to a new WAL segment file during quieter periods. Archived files
! produced in this way are still the same length as completely full files,
! though entries made after the final processing instruction can be ignored.
! Switching to a new WAL segment file can be performed manually using
! <function>pg_switch_xlog</>. A variety of other utility functions are
! also available, listed in <xref linkend="functions-admin-backup-table">
</para>
<para>
Index: doc/src/sgml/config.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/config.sgml,v
retrieving revision 1.71
diff -c -r1.71 config.sgml
*** doc/src/sgml/config.sgml 27 Jul 2006 08:30:41 -0000 1.71
--- doc/src/sgml/config.sgml 31 Jul 2006 20:34:31 -0000
***************
*** 1586,1591 ****
--- 1586,1614 ----
</listitem>
</varlistentry>
+ <varlistentry id="guc-archive-timeout" xreflabel="archive_timeout">
+ <term><varname>archive_timeout</varname> (<type>string</type>)</term>
+ <indexterm>
+ <primary><varname>archive_timeout</> configuration parameter</primary>
+ </indexterm>
+ <listitem>
+ <para>
+ The <xref linkend="guc-archive-command"> is only invoked on completed
+ WAL segments. This could lead to delays in producing the next archive
+ if your server generates only little WAL traffic (or has slack periods
+ where it does so). This parameter provides regular archiving by
+ making sure that no more than <xref linkend="guc-archive-command">
+ go by before a new WAL segment file is produced for archiving, even
+ if that means we archive a partially filled file. Zero disables this
+ feature, which is the default Valid values are from 1 to 60 seconds.
+ This parameter can only be set in the <filename>postgresql.conf</>
+ file or on the server command line. Be careful to set
+ <varname>checkpoint_segments</> sufficiently high that you do not
+ inadvertently increase the rate at which checkpoints occur.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</sect2>
</sect1>
Index: src/backend/access/transam/xlog.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/xlog.c,v
retrieving revision 1.244
diff -c -r1.244 xlog.c
*** src/backend/access/transam/xlog.c 14 Jul 2006 14:52:17 -0000 1.244
--- src/backend/access/transam/xlog.c 31 Jul 2006 20:34:50 -0000
***************
*** 127,132 ****
--- 127,133 ----
/* User-settable parameters */
int CheckPointSegments = 3;
int XLOGbuffers = 8;
+ int XLogArchiveTimeout = 0;
char *XLogArchiveCommand = NULL;
char *XLOG_sync_method = NULL;
const char XLOG_sync_method_default[] = DEFAULT_SYNC_METHOD_STR;
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.333
diff -c -r1.333 guc.c
*** src/backend/utils/misc/guc.c 29 Jul 2006 03:02:56 -0000 1.333
--- src/backend/utils/misc/guc.c 31 Jul 2006 20:34:57 -0000
***************
*** 1020,1025 ****
--- 1020,1034 ----
static struct config_int ConfigureNamesInt[] =
{
{
+ {"archive_timeout", PGC_SIGHUP, WAL_SETTINGS,
+ gettext_noop("Will force a switch to the next xlog file if a new file has not "
+ "been started within N seconds."),
+ gettext_noop("This allows regular continuous archiving to take place.")
+ },
+ &XLogArchiveTimeout,
+ 0, 0, 60, NULL, NULL
+ },
+ {
{"post_auth_delay", PGC_BACKEND, DEVELOPER_OPTIONS,
gettext_noop("Waits N seconds on connection startup after authentication."),
gettext_noop("This allows attaching a debugger to the process."),
Index: src/backend/utils/misc/postgresql.conf.sample
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/misc/postgresql.conf.sample,v
retrieving revision 1.184
diff -c -r1.184 postgresql.conf.sample
*** src/backend/utils/misc/postgresql.conf.sample 25 Jul 2006 03:51:21 -0000 1.184
--- src/backend/utils/misc/postgresql.conf.sample 31 Jul 2006 20:34:57 -0000
***************
*** 167,174 ****
# - Archiving -
! #archive_command = '' # command to use to archive a logfile
! # segment
#---------------------------------------------------------------------------
--- 167,176 ----
# - Archiving -
! # command to use to archive a logfile segment
! #archive_command = ''
! #archive_timeout = 0 # automatic xlog switch gives regular archiving
! # range 0-60 in seconds, 0 is off
#---------------------------------------------------------------------------
Index: src/include/access/xlog.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/access/xlog.h,v
retrieving revision 1.72
diff -c -r1.72 xlog.h
*** src/include/access/xlog.h 13 Jul 2006 16:49:19 -0000 1.72
--- src/include/access/xlog.h 31 Jul 2006 20:34:58 -0000
***************
*** 139,144 ****
--- 139,145 ----
extern int CheckPointSegments;
extern int XLOGbuffers;
extern char *XLogArchiveCommand;
+ extern int XLogArchiveTimeout;
extern char *XLOG_sync_method;
extern const char XLOG_sync_method_default[];
---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly