diff --git a/doc/src/sgml/backup.sgml b/doc/src/sgml/backup.sgml index ccb76d8..0f20253 100644 --- a/doc/src/sgml/backup.sgml +++ b/doc/src/sgml/backup.sgml @@ -582,7 +582,7 @@ tar -cf backup.tar /usr/local/pgsql/data To enable WAL archiving, set the - configuration parameter to archive (or hot_standby), + configuration parameter to hot_standby, to on, and specify the shell command to use in the configuration parameter. In practice @@ -1246,7 +1246,7 @@ restore_command = 'cp /mnt/server/archivedir/%f %p' If more flexibility in copying the backup files is needed, a lower level process can be used for standalone hot backups as well. To prepare for low level standalone hot backups, set wal_level to - archive (or hot_standby), archive_mode to + hot_standby, archive_mode to on, and set up an archive_command that performs archiving only when a switch file exists. For example: diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 77a9303..2c6a022 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -1606,10 +1606,9 @@ include 'filename' wal_level determines how much information is written to the WAL. The default value is minimal, which writes only the information needed to recover from a crash or immediate - shutdown. archive adds logging required for WAL archiving, - and hot_standby further adds information required to run - read-only queries on a standby server. - This parameter can only be set at server start. + shutdown. hot_standby adds logging required for WAL + archiving and information required to run read-only queries on a + standby server. This parameter can only be set at server start. In minimal level, WAL-logging of some bulk @@ -1625,22 +1624,17 @@ include 'filename' But minimal WAL does not contain enough information to reconstruct the data from a base backup and the - WAL logs, so either archive or hot_standby - level must be used to enable + WAL logs hot_standby level must be used to enable WAL archiving () and streaming replication. - In hot_standby level, the same information is logged as - with archive, plus information needed to reconstruct - the status of running transactions from the WAL. To enable read-only - queries on a standby server, wal_level must be set to - hot_standby on the primary, and - must be enabled in the standby. It is - thought that there is - little measurable difference in performance between using - hot_standby and archive levels, so feedback - is welcome if any production impacts are noticeable. + In hot_standby level, necessary information is logged + to reconstruct the status of running transactions from the WAL and + to enable read-only queries on a standby server. Note that + wal_level must be set to hot_standby on + the primary, and must be enabled + in the standby. @@ -2198,8 +2192,8 @@ include 'filename' of connections, so the parameter cannot be set higher than . This parameter can only be set at server start. wal_level must be set - to archive or hot_standby to allow - connections from standby servers. + to hot_standby to allow connections from standby + servers. diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index f407753..3333af4 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -630,7 +630,7 @@ _bt_getbuf(Relation rel, BlockNumber blkno, int access) * WAL record that will allow us to conflict with queries * running on standby. */ - if (XLogStandbyInfoActive()) + if (XLogIsNeeded()) { BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page); diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 073190f..81f7c75 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -826,7 +826,7 @@ btvacuumscan(IndexVacuumInfo *info, IndexBulkDeleteResult *stats, * take care to issue the record for last actual block and not for the * last block that was scanned. Ignore empty indexes. */ - if (XLogStandbyInfoActive() && + if (XLogIsNeeded() && num_pages > 1 && vstate.lastBlockVacuumed < (num_pages - 1)) { Buffer buf; diff --git a/src/backend/access/rmgrdesc/xlogdesc.c b/src/backend/access/rmgrdesc/xlogdesc.c index 1b36f9a..4735cfb 100644 --- a/src/backend/access/rmgrdesc/xlogdesc.c +++ b/src/backend/access/rmgrdesc/xlogdesc.c @@ -26,7 +26,6 @@ */ const struct config_enum_entry wal_level_options[] = { {"minimal", WAL_LEVEL_MINIMAL, false}, - {"archive", WAL_LEVEL_ARCHIVE, false}, {"hot_standby", WAL_LEVEL_HOT_STANDBY, false}, {NULL, 0, false} }; diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 0591f3f..75e87f9 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -520,7 +520,7 @@ AssignTransactionId(TransactionState s) * recovery only because aborted subtransactions are separately WAL * logged. */ - if (isSubXact && XLogStandbyInfoActive()) + if (isSubXact && XLogIsNeeded()) { unreportedXids[nUnreportedXids] = s->transactionId; nUnreportedXids++; @@ -969,7 +969,7 @@ RecordTransactionCommit(void) /* Get data needed for commit record */ nrels = smgrGetPendingDeletes(true, &rels); nchildren = xactGetCommittedChildren(&children); - if (XLogStandbyInfoActive()) + if (XLogIsNeeded()) nmsgs = xactGetCommittedInvalidationMessages(&invalMessages, &RelcacheInitFileInval); wrote_xlog = (XactLastRecEnd != 0); diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 06f5eb0..61d28e5 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7994,7 +7994,7 @@ CreateCheckPoint(int flags) * pointer. This allows us to begin accumulating changes to assemble our * starting snapshot of locks and transactions. */ - if (!shutdown && XLogStandbyInfoActive()) + if (!shutdown && XLogIsNeeded()) checkPoint.oldestActiveXid = GetOldestActiveTransactionId(); else checkPoint.oldestActiveXid = InvalidTransactionId; @@ -8189,7 +8189,7 @@ CreateCheckPoint(int flags) * If we are shutting down, or Startup process is completing crash * recovery we don't need to write running xact data. */ - if (!shutdown && XLogStandbyInfoActive()) + if (!shutdown && XLogIsNeeded()) LogStandbySnapshot(); START_CRIT_SECTION(); @@ -8990,7 +8990,7 @@ UpdateFullPageWrites(void) * Write an XLOG_FPW_CHANGE record. This allows us to keep track of * full_page_writes during archive recovery, if required. */ - if (XLogStandbyInfoActive() && !RecoveryInProgress()) + if (XLogIsNeeded() && !RecoveryInProgress()) { XLogRecData rdata; diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index c704412..6fd8988 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -753,7 +753,7 @@ StandbyReleaseOldLocks(int nxids, TransactionId *xids) * -------------------------------------------------------------------- * Recovery handling for Rmgr RM_STANDBY_ID * - * These record types will only be created if XLogStandbyInfoActive() + * These record types will only be created if XLogIsNeeded() * -------------------------------------------------------------------- */ @@ -861,7 +861,7 @@ LogStandbySnapshot(void) xl_standby_lock *locks; int nlocks; - Assert(XLogStandbyInfoActive()); + Assert(XLogIsNeeded()); /* * Get details of any AccessExclusiveLocks being held at the moment. diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index f4f32e9..5cc8c0e 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -800,7 +800,7 @@ LockAcquireExtended(const LOCKTAG *locktag, if (lockmode >= AccessExclusiveLock && locktag->locktag_type == LOCKTAG_RELATION && !RecoveryInProgress() && - XLogStandbyInfoActive()) + XLogIsNeeded()) { LogAccessExclusiveLockPrepare(); log_lock = true; diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c index fde483a..655b0b5 100644 --- a/src/bin/pg_controldata/pg_controldata.c +++ b/src/bin/pg_controldata/pg_controldata.c @@ -73,8 +73,6 @@ wal_level_str(WalLevel wal_level) { case WAL_LEVEL_MINIMAL: return "minimal"; - case WAL_LEVEL_ARCHIVE: - return "archive"; case WAL_LEVEL_HOT_STANDBY: return "hot_standby"; } diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 002862c..1a89034 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -196,22 +196,18 @@ extern int num_xloginsert_slots; typedef enum WalLevel { WAL_LEVEL_MINIMAL = 0, - WAL_LEVEL_ARCHIVE, WAL_LEVEL_HOT_STANDBY } WalLevel; extern int wal_level; -#define XLogArchivingActive() (XLogArchiveMode && wal_level >= WAL_LEVEL_ARCHIVE) +#define XLogArchivingActive() (XLogArchiveMode && wal_level >= WAL_LEVEL_HOT_STANDBY) #define XLogArchiveCommandSet() (XLogArchiveCommand[0] != '\0') /* - * Is WAL-logging necessary for archival or log-shipping, or can we skip - * WAL-logging if we fsync() the data before committing instead? + * Is WAL-logging necessary for log-shipping, or can we skip WAL-logging if we + * fsync() the data before committing instead? */ -#define XLogIsNeeded() (wal_level >= WAL_LEVEL_ARCHIVE) - -/* Do we need to WAL-log information required only for Hot Standby? */ -#define XLogStandbyInfoActive() (wal_level >= WAL_LEVEL_HOT_STANDBY) +#define XLogIsNeeded() (wal_level >= WAL_LEVEL_HOT_STANDBY) #ifdef WAL_DEBUG extern bool XLOG_DEBUG;