diff options
-rw-r--r-- | doc/src/sgml/ref/show.sgml | 4 | ||||
-rw-r--r-- | doc/src/sgml/runtime.sgml | 9 | ||||
-rw-r--r-- | doc/src/sgml/wal.sgml | 21 | ||||
-rw-r--r-- | src/backend/access/transam/xlog.c | 18 | ||||
-rw-r--r-- | src/backend/utils/misc/guc.c | 33 | ||||
-rw-r--r-- | src/include/access/xlog.h | 6 | ||||
-rw-r--r-- | src/include/pg_config_manual.h | 8 |
7 files changed, 63 insertions, 36 deletions
diff --git a/doc/src/sgml/ref/show.sgml b/doc/src/sgml/ref/show.sgml index 3087c92d9e6..85dbfdcedcc 100644 --- a/doc/src/sgml/ref/show.sgml +++ b/doc/src/sgml/ref/show.sgml @@ -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 --> @@ -172,7 +172,7 @@ SHOW ALL; . . . - wal_debug | 0 + wal_debug | off wal_sync_method | fdatasync (94 rows) </programlisting> diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index 6caf5dd93ac..5ec155d24d9 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -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"> @@ -2667,10 +2667,13 @@ dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir' </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> diff --git a/doc/src/sgml/wal.sgml b/doc/src/sgml/wal.sgml index 0883f202422..8d0127b9f94 100644 --- a/doc/src/sgml/wal.sgml +++ b/doc/src/sgml/wal.sgml @@ -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"> <title>Write-Ahead Logging (<acronym>WAL</acronym>)</title> @@ -19,10 +19,10 @@ 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 @@ -187,7 +187,7 @@ <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 @@ -254,7 +254,7 @@ <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> @@ -262,11 +262,10 @@ </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> diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 1f8eb50795a..f630fca7d7e 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * 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 $ * *------------------------------------------------------------------------- */ @@ -86,12 +86,15 @@ /* 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 @@ -766,6 +769,7 @@ begin:; MyProc->logRec = RecPtr; } +#ifdef WAL_DEBUG if (XLOG_DEBUG) { char buf[8192]; @@ -779,6 +783,7 @@ begin:; } elog(LOG, "%s", buf); } +#endif /* Record begin of record in appropriate places */ if (!no_tran) @@ -1074,8 +1079,10 @@ XLogWrite(XLogwrtRqst WriteRqst) 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); } } @@ -1214,11 +1221,13 @@ XLogFlush(XLogRecPtr record) 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(); @@ -2613,9 +2622,11 @@ StartupXLOG(void) /* 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 @@ -2742,6 +2753,8 @@ StartupXLOG(void) ShmemVariableCache->nextXid = record->xl_xid; TransactionIdAdvance(ShmemVariableCache->nextXid); } + +#ifdef WAL_DEBUG if (XLOG_DEBUG) { char buf[8192]; @@ -2755,6 +2768,7 @@ StartupXLOG(void) record->xl_info, XLogRecGetData(record)); elog(LOG, "%s", buf); } +#endif if (record->xl_info & XLR_BKP_BLOCK_MASK) RestoreBkpBlocks(record, EndRecPtr); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 705dd166e4a..f0a0a88dd60 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * 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 $ * *-------------------------------------------------------------------- */ @@ -336,17 +336,18 @@ const char *const config_type_names[] = * 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. * @@ -862,6 +863,18 @@ static struct config_bool ConfigureNamesBool[] = #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 @@ -1172,16 +1185,6 @@ static struct config_int ConfigureNamesInt[] = }, { - {"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."), diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 751e8803202..e4f5b7182c2 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -6,7 +6,7 @@ * 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 @@ -189,10 +189,12 @@ extern XLogRecPtr ProcLastRecEnd; 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); diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h index be80abfdc4a..3722798ccee 100644 --- a/src/include/pg_config_manual.h +++ b/src/include/pg_config_manual.h @@ -6,7 +6,7 @@ * 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 $ *------------------------------------------------------------------------ */ @@ -225,6 +225,12 @@ /* #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 */ |