hide it behind #ifdef WAL_DEBUG blocks.
<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/show.sgml,v 1.34 2003/11/29 19:51:39 pgsql Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/show.sgml,v 1.35 2004/01/06 17:26:23 neilc Exp $
PostgreSQL documentation
-->
.
.
.
- wal_debug | 0
+ wal_debug | off
wal_sync_method | fdatasync
(94 rows)
</programlisting>
<!--
-$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.228 2004/01/05 20:37:51 neilc Exp $
+$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.229 2004/01/06 17:26:22 neilc Exp $
-->
<Chapter Id="runtime">
</varlistentry>
<varlistentry>
- <term><varname>wal_debug</varname> (<type>integer</type>)</term>
+ <term><varname>wal_debug</varname> (<type>boolean</type>)</term>
<listitem>
<para>
- If nonzero, turn on WAL-related debugging output.
+ If true, emit WAL-related debugging output. This option is
+ only available if the <symbol>WAL_DEBUG</symbol> macro was
+ defined when <productname>PostgreSQL</productname> was
+ compiled.
</para>
</listitem>
</varlistentry>
-<!-- $PostgreSQL: pgsql/doc/src/sgml/wal.sgml,v 1.26 2003/11/29 19:51:38 pgsql Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/wal.sgml,v 1.27 2004/01/06 17:26:23 neilc Exp $ -->
<chapter id="wal">
<title>Write-Ahead Logging (<acronym>WAL</acronym>)</title>
transaction processing. Briefly, <acronym>WAL</acronym>'s central
concept is that changes to data files (where tables and indexes
reside) must be written only after those changes have been logged,
- that is, when log records have been flushed to permanent
- storage. If we follow this procedure, we do not need to flush
- data pages to disk on every transaction commit, because we know
- that in the event of a crash we will be able to recover the
+ that is, when log records describing the changes have been flushed
+ to permanent storage. If we follow this procedure, we do not need
+ to flush data pages to disk on every transaction commit, because we
+ know that in the event of a crash we will be able to recover the
database using the log: any changes that have not been applied to
the data pages will first be redone from the log records (this is
roll-forward recovery, also known as REDO) and then changes made by
<para>
There will be at least one 16 MB segment file, and will normally
not be more than 2 * <varname>checkpoint_segments</varname> + 1
- files. You can use this to estimate space requirements for WAL.
+ files. You can use this to estimate space requirements for <acronym>WAL</acronym>.
Ordinarily, when old log segment files are no longer needed, they
are recycled (renamed to become the next segments in the numbered
sequence). If, due to a short-term peak of log output rate, there
<para>
The <varname>wal_sync_method</varname> parameter determines how
<productname>PostgreSQL</productname> will ask the kernel to force
- WAL updates out to disk.
+ <acronym>WAL</acronym> updates out to disk.
All the options should be the same as far as reliability goes,
but it's quite platform-specific which one will be the fastest.
Note that this parameter is irrelevant if <varname>fsync</varname>
</para>
<para>
- Setting the <varname>wal_debug</varname> parameter to any nonzero
- value will result in each <function>LogInsert</function> and
+ Enabling the <varname>wal_debug</varname> configuration parameter
+ will result in each <function>LogInsert</function> and
<function>LogFlush</function> <acronym>WAL</acronym> call being
- logged to the server log. At present, it makes no difference what
- the nonzero value is. This option may be replaced by a more
+ logged to the server log. This option may be replaced by a more
general mechanism in the future.
</para>
</sect1>
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.129 2003/12/20 17:31:20 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.130 2004/01/06 17:26:23 neilc Exp $
*
*-------------------------------------------------------------------------
*/
/* User-settable parameters */
int CheckPointSegments = 3;
int XLOGbuffers = 8;
-int XLOG_DEBUG = 0;
char *XLOG_sync_method = NULL;
const char XLOG_sync_method_default[] = DEFAULT_SYNC_METHOD_STR;
char XLOG_archive_dir[MAXPGPATH]; /* null string means
* delete 'em */
+#ifdef WAL_DEBUG
+bool XLOG_DEBUG = false;
+#endif
+
/*
* XLOGfileslop is used in the code as the allowed "fuzz" in the number of
* preallocated XLOG segments --- we try to have at least XLOGfiles advance
MyProc->logRec = RecPtr;
}
+#ifdef WAL_DEBUG
if (XLOG_DEBUG)
{
char buf[8192];
}
elog(LOG, "%s", buf);
}
+#endif
/* Record begin of record in appropriate places */
if (!no_tran)
openLogSeg >= (RedoRecPtr.xrecoff / XLogSegSize) +
(uint32) CheckPointSegments))
{
+#ifdef WAL_DEBUG
if (XLOG_DEBUG)
elog(LOG, "time for a checkpoint, signaling postmaster");
+#endif
SendPostmasterSignal(PMSIGNAL_DO_CHECKPOINT);
}
}
if (XLByteLE(record, LogwrtResult.Flush))
return;
+#ifdef WAL_DEBUG
if (XLOG_DEBUG)
elog(LOG, "xlog flush request %X/%X; write %X/%X; flush %X/%X",
record.xlogid, record.xrecoff,
LogwrtResult.Write.xlogid, LogwrtResult.Write.xrecoff,
LogwrtResult.Flush.xlogid, LogwrtResult.Flush.xrecoff);
+#endif
START_CRIT_SECTION();
/* This is just to allow attaching to startup process with a debugger */
#ifdef XLOG_REPLAY_DELAY
+#ifdef WAL_DEBUG
if (XLOG_DEBUG && ControlFile->state != DB_SHUTDOWNED)
sleep(60);
#endif
+#endif
/*
* Get the last valid checkpoint record. If the latest one according
ShmemVariableCache->nextXid = record->xl_xid;
TransactionIdAdvance(ShmemVariableCache->nextXid);
}
+
+#ifdef WAL_DEBUG
if (XLOG_DEBUG)
{
char buf[8192];
record->xl_info, XLogRecGetData(record));
elog(LOG, "%s", buf);
}
+#endif
if (record->xl_info & XLR_BKP_BLOCK_MASK)
RestoreBkpBlocks(record, EndRecPtr);
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.175 2003/12/03 18:52:00 joe Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.176 2004/01/06 17:26:23 neilc Exp $
*
*--------------------------------------------------------------------
*/
* TO ADD AN OPTION:
*
* 1. Declare a global variable of type bool, int, double, or char*
- * and make use of it.
+ * and make use of it.
*
* 2. Decide at what times it's safe to set the option. See guc.h for
- * details.
+ * details.
*
* 3. Decide on a name, a default value, upper and lower bounds (if
- * applicable), etc.
+ * applicable), etc.
*
* 4. Add a record below.
*
- * 5. Add it to src/backend/utils/misc/postgresql.conf.sample.
+ * 5. Add it to src/backend/utils/misc/postgresql.conf.sample, if
+ * appropriate
*
* 6. Add it to src/bin/psql/tab-complete.c, if it's a USERSET option.
*
#endif
},
+#ifdef WAL_DEBUG
+ {
+ {"wal_debug", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("Emit WAL-related debugging output."),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &XLOG_DEBUG,
+ false, NULL, NULL
+ },
+#endif
+
/* End-of-list marker */
{
{NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL
},
{
- {"wal_debug", PGC_SUSET, DEVELOPER_OPTIONS,
- gettext_noop("If nonzero, WAL-related debugging output is logged."),
- NULL,
- GUC_NOT_IN_SAMPLE
- },
- &XLOG_DEBUG,
- 0, 0, 16, NULL, NULL
- },
-
- {
{"commit_delay", PGC_USERSET, WAL_CHECKPOINTS,
gettext_noop("Sets the delay in microseconds between transaction commit and "
"flushing WAL to disk."),
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.46 2003/12/12 18:45:10 petere Exp $
+ * $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.47 2004/01/06 17:26:23 neilc Exp $
*/
#ifndef XLOG_H
#define XLOG_H
extern int CheckPointSegments;
extern int CheckPointWarning;
extern int XLOGbuffers;
-extern int XLOG_DEBUG;
extern char *XLOG_sync_method;
extern const char XLOG_sync_method_default[];
+#ifdef WAL_DEBUG
+extern bool XLOG_DEBUG;
+#endif
extern XLogRecPtr XLogInsert(RmgrId rmid, uint8 info, XLogRecData *rdata);
extern void XLogFlush(XLogRecPtr RecPtr);
* for developers. If you edit any of these, be sure to do a *full*
* rebuild (and an initdb if noted).
*
- * $PostgreSQL: pgsql/src/include/pg_config_manual.h,v 1.8 2003/11/29 22:40:53 pgsql Exp $
+ * $PostgreSQL: pgsql/src/include/pg_config_manual.h,v 1.9 2004/01/06 17:26:23 neilc Exp $
*------------------------------------------------------------------------
*/
/* #define LOCK_DEBUG */
/*
+ * Enable debugging print statements for WAL-related operations; see
+ * also the wal_debug GUC var.
+ */
+/* #define WAL_DEBUG */
+
+/*
* Other debug #defines (documentation, anyone?)
*/
/* #define IPORTAL_DEBUG */