Make the 'wal_debug' GUC variable a boolean (rather than an integer), and
hide it behind #ifdef WAL_DEBUG blocks.
This commit is contained in:
parent
b0c4a50bbb
commit
bc028beb16
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$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
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -172,7 +172,7 @@ SHOW ALL;
|
|||||||
.
|
.
|
||||||
.
|
.
|
||||||
.
|
.
|
||||||
wal_debug | 0
|
wal_debug | off
|
||||||
wal_sync_method | fdatasync
|
wal_sync_method | fdatasync
|
||||||
(94 rows)
|
(94 rows)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$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">
|
<Chapter Id="runtime">
|
||||||
@ -2667,10 +2667,13 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'
|
|||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>wal_debug</varname> (<type>integer</type>)</term>
|
<term><varname>wal_debug</varname> (<type>boolean</type>)</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<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>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $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">
|
<chapter id="wal">
|
||||||
<title>Write-Ahead Logging (<acronym>WAL</acronym>)</title>
|
<title>Write-Ahead Logging (<acronym>WAL</acronym>)</title>
|
||||||
@ -19,10 +19,10 @@
|
|||||||
transaction processing. Briefly, <acronym>WAL</acronym>'s central
|
transaction processing. Briefly, <acronym>WAL</acronym>'s central
|
||||||
concept is that changes to data files (where tables and indexes
|
concept is that changes to data files (where tables and indexes
|
||||||
reside) must be written only after those changes have been logged,
|
reside) must be written only after those changes have been logged,
|
||||||
that is, when log records have been flushed to permanent
|
that is, when log records describing the changes have been flushed
|
||||||
storage. If we follow this procedure, we do not need to flush
|
to permanent storage. If we follow this procedure, we do not need
|
||||||
data pages to disk on every transaction commit, because we know
|
to flush data pages to disk on every transaction commit, because we
|
||||||
that in the event of a crash we will be able to recover the
|
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
|
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
|
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
|
roll-forward recovery, also known as REDO) and then changes made by
|
||||||
@ -187,7 +187,7 @@
|
|||||||
<para>
|
<para>
|
||||||
There will be at least one 16 MB segment file, and will normally
|
There will be at least one 16 MB segment file, and will normally
|
||||||
not be more than 2 * <varname>checkpoint_segments</varname> + 1
|
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
|
Ordinarily, when old log segment files are no longer needed, they
|
||||||
are recycled (renamed to become the next segments in the numbered
|
are recycled (renamed to become the next segments in the numbered
|
||||||
sequence). If, due to a short-term peak of log output rate, there
|
sequence). If, due to a short-term peak of log output rate, there
|
||||||
@ -254,7 +254,7 @@
|
|||||||
<para>
|
<para>
|
||||||
The <varname>wal_sync_method</varname> parameter determines how
|
The <varname>wal_sync_method</varname> parameter determines how
|
||||||
<productname>PostgreSQL</productname> will ask the kernel to force
|
<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,
|
All the options should be the same as far as reliability goes,
|
||||||
but it's quite platform-specific which one will be the fastest.
|
but it's quite platform-specific which one will be the fastest.
|
||||||
Note that this parameter is irrelevant if <varname>fsync</varname>
|
Note that this parameter is irrelevant if <varname>fsync</varname>
|
||||||
@ -262,11 +262,10 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Setting the <varname>wal_debug</varname> parameter to any nonzero
|
Enabling the <varname>wal_debug</varname> configuration parameter
|
||||||
value will result in each <function>LogInsert</function> and
|
will result in each <function>LogInsert</function> and
|
||||||
<function>LogFlush</function> <acronym>WAL</acronym> call being
|
<function>LogFlush</function> <acronym>WAL</acronym> call being
|
||||||
logged to the server log. At present, it makes no difference what
|
logged to the server log. This option may be replaced by a more
|
||||||
the nonzero value is. This option may be replaced by a more
|
|
||||||
general mechanism in the future.
|
general mechanism in the future.
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* 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 $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -86,12 +86,15 @@
|
|||||||
/* User-settable parameters */
|
/* User-settable parameters */
|
||||||
int CheckPointSegments = 3;
|
int CheckPointSegments = 3;
|
||||||
int XLOGbuffers = 8;
|
int XLOGbuffers = 8;
|
||||||
int XLOG_DEBUG = 0;
|
|
||||||
char *XLOG_sync_method = NULL;
|
char *XLOG_sync_method = NULL;
|
||||||
const char XLOG_sync_method_default[] = DEFAULT_SYNC_METHOD_STR;
|
const char XLOG_sync_method_default[] = DEFAULT_SYNC_METHOD_STR;
|
||||||
char XLOG_archive_dir[MAXPGPATH]; /* null string means
|
char XLOG_archive_dir[MAXPGPATH]; /* null string means
|
||||||
* delete 'em */
|
* delete 'em */
|
||||||
|
|
||||||
|
#ifdef WAL_DEBUG
|
||||||
|
bool XLOG_DEBUG = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XLOGfileslop is used in the code as the allowed "fuzz" in the number of
|
* 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
|
* preallocated XLOG segments --- we try to have at least XLOGfiles advance
|
||||||
@ -766,6 +769,7 @@ begin:;
|
|||||||
MyProc->logRec = RecPtr;
|
MyProc->logRec = RecPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WAL_DEBUG
|
||||||
if (XLOG_DEBUG)
|
if (XLOG_DEBUG)
|
||||||
{
|
{
|
||||||
char buf[8192];
|
char buf[8192];
|
||||||
@ -779,6 +783,7 @@ begin:;
|
|||||||
}
|
}
|
||||||
elog(LOG, "%s", buf);
|
elog(LOG, "%s", buf);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Record begin of record in appropriate places */
|
/* Record begin of record in appropriate places */
|
||||||
if (!no_tran)
|
if (!no_tran)
|
||||||
@ -1074,8 +1079,10 @@ XLogWrite(XLogwrtRqst WriteRqst)
|
|||||||
openLogSeg >= (RedoRecPtr.xrecoff / XLogSegSize) +
|
openLogSeg >= (RedoRecPtr.xrecoff / XLogSegSize) +
|
||||||
(uint32) CheckPointSegments))
|
(uint32) CheckPointSegments))
|
||||||
{
|
{
|
||||||
|
#ifdef WAL_DEBUG
|
||||||
if (XLOG_DEBUG)
|
if (XLOG_DEBUG)
|
||||||
elog(LOG, "time for a checkpoint, signaling postmaster");
|
elog(LOG, "time for a checkpoint, signaling postmaster");
|
||||||
|
#endif
|
||||||
SendPostmasterSignal(PMSIGNAL_DO_CHECKPOINT);
|
SendPostmasterSignal(PMSIGNAL_DO_CHECKPOINT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1214,11 +1221,13 @@ XLogFlush(XLogRecPtr record)
|
|||||||
if (XLByteLE(record, LogwrtResult.Flush))
|
if (XLByteLE(record, LogwrtResult.Flush))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
#ifdef WAL_DEBUG
|
||||||
if (XLOG_DEBUG)
|
if (XLOG_DEBUG)
|
||||||
elog(LOG, "xlog flush request %X/%X; write %X/%X; flush %X/%X",
|
elog(LOG, "xlog flush request %X/%X; write %X/%X; flush %X/%X",
|
||||||
record.xlogid, record.xrecoff,
|
record.xlogid, record.xrecoff,
|
||||||
LogwrtResult.Write.xlogid, LogwrtResult.Write.xrecoff,
|
LogwrtResult.Write.xlogid, LogwrtResult.Write.xrecoff,
|
||||||
LogwrtResult.Flush.xlogid, LogwrtResult.Flush.xrecoff);
|
LogwrtResult.Flush.xlogid, LogwrtResult.Flush.xrecoff);
|
||||||
|
#endif
|
||||||
|
|
||||||
START_CRIT_SECTION();
|
START_CRIT_SECTION();
|
||||||
|
|
||||||
@ -2613,8 +2622,10 @@ StartupXLOG(void)
|
|||||||
|
|
||||||
/* This is just to allow attaching to startup process with a debugger */
|
/* This is just to allow attaching to startup process with a debugger */
|
||||||
#ifdef XLOG_REPLAY_DELAY
|
#ifdef XLOG_REPLAY_DELAY
|
||||||
|
#ifdef WAL_DEBUG
|
||||||
if (XLOG_DEBUG && ControlFile->state != DB_SHUTDOWNED)
|
if (XLOG_DEBUG && ControlFile->state != DB_SHUTDOWNED)
|
||||||
sleep(60);
|
sleep(60);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2742,6 +2753,8 @@ StartupXLOG(void)
|
|||||||
ShmemVariableCache->nextXid = record->xl_xid;
|
ShmemVariableCache->nextXid = record->xl_xid;
|
||||||
TransactionIdAdvance(ShmemVariableCache->nextXid);
|
TransactionIdAdvance(ShmemVariableCache->nextXid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WAL_DEBUG
|
||||||
if (XLOG_DEBUG)
|
if (XLOG_DEBUG)
|
||||||
{
|
{
|
||||||
char buf[8192];
|
char buf[8192];
|
||||||
@ -2755,6 +2768,7 @@ StartupXLOG(void)
|
|||||||
record->xl_info, XLogRecGetData(record));
|
record->xl_info, XLogRecGetData(record));
|
||||||
elog(LOG, "%s", buf);
|
elog(LOG, "%s", buf);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (record->xl_info & XLR_BKP_BLOCK_MASK)
|
if (record->xl_info & XLR_BKP_BLOCK_MASK)
|
||||||
RestoreBkpBlocks(record, EndRecPtr);
|
RestoreBkpBlocks(record, EndRecPtr);
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
* Written by Peter Eisentraut <peter_e@gmx.net>.
|
* Written by Peter Eisentraut <peter_e@gmx.net>.
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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 $
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------
|
*--------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -336,17 +336,18 @@ const char *const config_type_names[] =
|
|||||||
* TO ADD AN OPTION:
|
* TO ADD AN OPTION:
|
||||||
*
|
*
|
||||||
* 1. Declare a global variable of type bool, int, double, or char*
|
* 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
|
* 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
|
* 3. Decide on a name, a default value, upper and lower bounds (if
|
||||||
* applicable), etc.
|
* applicable), etc.
|
||||||
*
|
*
|
||||||
* 4. Add a record below.
|
* 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.
|
* 6. Add it to src/bin/psql/tab-complete.c, if it's a USERSET option.
|
||||||
*
|
*
|
||||||
@ -862,6 +863,18 @@ static struct config_bool ConfigureNamesBool[] =
|
|||||||
#endif
|
#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 */
|
/* End-of-list marker */
|
||||||
{
|
{
|
||||||
{NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL
|
{NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL
|
||||||
@ -1171,16 +1184,6 @@ static struct config_int ConfigureNamesInt[] =
|
|||||||
8, 4, INT_MAX, NULL, NULL
|
8, 4, INT_MAX, 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,
|
{"commit_delay", PGC_USERSET, WAL_CHECKPOINTS,
|
||||||
gettext_noop("Sets the delay in microseconds between transaction commit and "
|
gettext_noop("Sets the delay in microseconds between transaction commit and "
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* 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
|
#ifndef XLOG_H
|
||||||
#define XLOG_H
|
#define XLOG_H
|
||||||
@ -189,10 +189,12 @@ extern XLogRecPtr ProcLastRecEnd;
|
|||||||
extern int CheckPointSegments;
|
extern int CheckPointSegments;
|
||||||
extern int CheckPointWarning;
|
extern int CheckPointWarning;
|
||||||
extern int XLOGbuffers;
|
extern int XLOGbuffers;
|
||||||
extern int XLOG_DEBUG;
|
|
||||||
extern char *XLOG_sync_method;
|
extern char *XLOG_sync_method;
|
||||||
extern const char XLOG_sync_method_default[];
|
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 XLogRecPtr XLogInsert(RmgrId rmid, uint8 info, XLogRecData *rdata);
|
||||||
extern void XLogFlush(XLogRecPtr RecPtr);
|
extern void XLogFlush(XLogRecPtr RecPtr);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
* for developers. If you edit any of these, be sure to do a *full*
|
* for developers. If you edit any of these, be sure to do a *full*
|
||||||
* rebuild (and an initdb if noted).
|
* 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 $
|
||||||
*------------------------------------------------------------------------
|
*------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -224,6 +224,12 @@
|
|||||||
*/
|
*/
|
||||||
/* #define LOCK_DEBUG */
|
/* #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?)
|
* Other debug #defines (documentation, anyone?)
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user