Hi,

Since I had tweaked wal-skipping logic for SR before,
there were two additional changes about that;
http://archives.postgresql.org/pgsql-committers/2009-11/msg00018.php
http://archives.postgresql.org/pgsql-committers/2009-12/msg00167.php

The attached patch deals with those changes.

Also I found that XLogStandbyInfoActive() should use
XLogIsNeeded() instead of XLogArchivingMode. The patch
also does that.

Regards,

-- 
Fujii Masao
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center
*** a/src/backend/commands/tablecmds.c
--- b/src/backend/commands/tablecmds.c
***************
*** 2997,3003 **** ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap)
  	 * Prepare a BulkInsertState and options for heap_insert. Because
  	 * we're building a new heap, we can skip WAL-logging and fsync it
  	 * to disk at the end instead (unless WAL-logging is required for
! 	 * archiving). The FSM is empty too, so don't bother using it.
  	 */
  	if (newrel)
  	{
--- 2997,3004 ----
  	 * Prepare a BulkInsertState and options for heap_insert. Because
  	 * we're building a new heap, we can skip WAL-logging and fsync it
  	 * to disk at the end instead (unless WAL-logging is required for
! 	 * archiving or streaming replication). The FSM is empty too,
! 	 * so don't bother using it.
  	 */
  	if (newrel)
  	{
***************
*** 3005,3011 **** ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap)
  		bistate = GetBulkInsertState();
  
  		hi_options = HEAP_INSERT_SKIP_FSM;
! 		if (!XLogArchivingActive())
  			hi_options |= HEAP_INSERT_SKIP_WAL;
  	}
  	else
--- 3006,3012 ----
  		bistate = GetBulkInsertState();
  
  		hi_options = HEAP_INSERT_SKIP_FSM;
! 		if (!XLogIsNeeded())
  			hi_options |= HEAP_INSERT_SKIP_WAL;
  	}
  	else
*** a/src/backend/commands/vacuumlazy.c
--- b/src/backend/commands/vacuumlazy.c
***************
*** 288,294 **** vacuum_log_cleanup_info(Relation rel, LVRelStats *vacrelstats)
  	 * No need to log changes for temp tables, they do not contain
  	 * data visible on the standby server.
  	 */
! 	if (rel->rd_istemp || !XLogArchivingActive())
  		return;
  
  	(void) log_heap_cleanup_info(rel->rd_node, vacrelstats->latestRemovedXid);
--- 288,294 ----
  	 * No need to log changes for temp tables, they do not contain
  	 * data visible on the standby server.
  	 */
! 	if (rel->rd_istemp || !XLogIsNeeded())
  		return;
  
  	(void) log_heap_cleanup_info(rel->rd_node, vacrelstats->latestRemovedXid);
*** a/src/include/access/xlog.h
--- b/src/include/access/xlog.h
***************
*** 186,192 **** extern int MaxStandbyDelay;
  
  #define XLogArchivingActive()	(XLogArchiveMode)
  #define XLogArchiveCommandSet() (XLogArchiveCommand[0] != '\0')
- #define XLogStandbyInfoActive()	(XLogRequestRecoveryConnections && XLogArchiveMode)
  
  /*
   * This is in walsender.c, but declared here so that we don't need to include
--- 186,191 ----
***************
*** 200,205 **** extern int	MaxWalSenders;
--- 199,206 ----
   */
  #define XLogIsNeeded() (XLogArchivingActive() || (MaxWalSenders > 0))
  
+ #define XLogStandbyInfoActive()	(XLogRequestRecoveryConnections && XLogIsNeeded())
+ 
  #ifdef WAL_DEBUG
  extern bool XLOG_DEBUG;
  #endif
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to