Reduce CPU utilisation of WALSender process. Process was using 10% CPU
authorSimon Riggs <simon@2ndQuadrant.com>
Wed, 24 Mar 2010 20:11:12 +0000 (20:11 +0000)
committerSimon Riggs <simon@2ndQuadrant.com>
Wed, 24 Mar 2010 20:11:12 +0000 (20:11 +0000)
doing nothing, caused by naptime specified in milliseconds yet units of
pg_usleep() parameter is microseconds. Correctly specifying units
reduces call frequency by 1000. Reduction in CPU consumption verified.

src/backend/replication/walsender.c

index 0a648e72e1792fbb70c7c204c7a4b8265ed3c395..fa0b363054c7148ea0926c95e3db0bc43d14e521 100644 (file)
@@ -30,7 +30,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/replication/walsender.c,v 1.10 2010/03/16 09:09:55 heikki Exp $
+ *   $PostgreSQL: pgsql/src/backend/replication/walsender.c,v 1.11 2010/03/24 20:11:12 sriggs Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -67,7 +67,7 @@ bool      am_walsender = false;       /* Am I a walsender process ? */
 int            MaxWalSenders = 0;  /* the maximum number of concurrent walsenders */
 int            WalSndDelay = 200;  /* max sleep time between some actions */
 
-#define NAPTIME_PER_CYCLE 100  /* max sleep time between cycles (100ms) */
+#define NAPTIME_PER_CYCLE 100000L  /* max sleep time between cycles (100ms) */
 
 /*
  * These variables are used similarly to openLogFile/Id/Seg/Off,
@@ -396,7 +396,7 @@ WalSndLoop(void)
         * sleep into NAPTIME_PER_CYCLE (ms) increments, and check for
         * interrupts after each nap.
         */
-       remain = WalSndDelay;
+       remain = WalSndDelay * 1000L;
        while (remain > 0)
        {
            if (got_SIGHUP || shutdown_requested || ready_to_stop)