Fix inadequacies in recently added wait events
authorAlvaro Herrera
Tue, 8 Aug 2017 19:37:44 +0000 (15:37 -0400)
committerAlvaro Herrera
Tue, 8 Aug 2017 19:37:44 +0000 (15:37 -0400)
In commit 9915de6c1cb2, we introduced a new wait point for replication
slots and incorrectly labelled it as wait event PG_WAIT_LOCK.  That's
wrong, so invent an appropriate new wait event instead, and document it
properly.

While at it, fix numerous other problems in the vicinity:
- two different walreceiver wait events were being mixed up in a single
  wait event (which wasn't documented either); split it out so that they
  can be distinguished, and document the new events properly.

- ParallelBitmapPopulate was documented but didn't exist.

- ParallelBitmapScan was not documented (I think this should be called
  "ParallelBitmapScanInit" instead.)

- Logical replication wait events weren't documented

- various symbols had been added in dartboard order in various places.
  Put them in alphabetical order instead, as was originally intended.

Discussion: https://postgr.es/m/20170808181131[email protected]

doc/src/sgml/monitoring.sgml
src/backend/postmaster/pgstat.c
src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
src/backend/replication/slot.c
src/include/pgstat.h

index be3dc672bcceb2e37df2eda6992ce575b2396e0e..eb20c9c543b9a96fd165d64d791673586791e4fd 100644 (file)
@@ -1175,6 +1175,14 @@ postgres   27093  0.0  0.0  30096  2752 ?        Ss   11:34   0:00 postgres: ser
          CheckpointerMain
          Waiting in main loop of checkpointer process.
         
+        
+         LogicalLauncherMain
+         Waiting in main loop of logical launcher process.
+        
+        
+         LogicalApplyMain
+         Waiting in main loop of logical apply process.
+        
         
          PgStatMain
          Waiting in main loop of the statistics collector process.
@@ -1212,6 +1220,14 @@ postgres   27093  0.0  0.0  30096  2752 ?        Ss   11:34   0:00 postgres: ser
          ClientWrite
          Waiting to write data from the client.
         
+        
+         LibPQWalReceiverConnect
+         Waiting in WAL receiver to establish connection to remote server.
+        
+        
+         LibPQWalReceiverReceive
+         Waiting in WAL receiver to receive data from remote server.
+        
         
          SSLOpenServer
          Waiting for SSL while attempting connection.
@@ -1250,6 +1266,14 @@ postgres   27093  0.0  0.0  30096  2752 ?        Ss   11:34   0:00 postgres: ser
          ExecuteGather
          Waiting for activity from child process when executing Gather node.
         
+        
+         LogicalSyncData
+         Waiting for logical replication remote server to send data for initial table synchronization.
+        
+        
+         LogicalSyncStateChange
+         Waiting for logical replication remote server to change state.
+        
         
          MessageQueueInternal
          Waiting for other process to be attached in shared message queue.
@@ -1271,13 +1295,17 @@ postgres   27093  0.0  0.0  30096  2752 ?        Ss   11:34   0:00 postgres: ser
          Waiting for parallel workers to finish computing.
         
         
-         ParallelBitmapPopulate
-         Waiting for the leader to populate the TidBitmap.
+         ParallelBitmapScan
+         Waiting for parallel bitmap scan to become initialized.
         
         
          ProcArrayGroupUpdate
          Waiting for group leader to clear transaction id at transaction end.
         
+        
+         ReplicationSlotDrop
+         Waiting for a replication slot to become inactive to be dropped.
+        
         
          SafeSnapshot
          Waiting for a snapshot for a READ ONLY DEFERRABLE transaction.
index a0b0eecbd5e9caa80264483b104940bcb9aea85d..3f5fb796a5eecef91d6b6865a0e30433c556c190 100644 (file)
@@ -3481,6 +3481,12 @@ pgstat_get_wait_activity(WaitEventActivity w)
        case WAIT_EVENT_CHECKPOINTER_MAIN:
            event_name = "CheckpointerMain";
            break;
+       case WAIT_EVENT_LOGICAL_LAUNCHER_MAIN:
+           event_name = "LogicalLauncherMain";
+           break;
+       case WAIT_EVENT_LOGICAL_APPLY_MAIN:
+           event_name = "LogicalApplyMain";
+           break;
        case WAIT_EVENT_PGSTAT_MAIN:
            event_name = "PgStatMain";
            break;
@@ -3502,12 +3508,6 @@ pgstat_get_wait_activity(WaitEventActivity w)
        case WAIT_EVENT_WAL_WRITER_MAIN:
            event_name = "WalWriterMain";
            break;
-       case WAIT_EVENT_LOGICAL_LAUNCHER_MAIN:
-           event_name = "LogicalLauncherMain";
-           break;
-       case WAIT_EVENT_LOGICAL_APPLY_MAIN:
-           event_name = "LogicalApplyMain";
-           break;
            /* no default case, so that compiler will warn */
    }
 
@@ -3533,15 +3533,18 @@ pgstat_get_wait_client(WaitEventClient w)
        case WAIT_EVENT_CLIENT_WRITE:
            event_name = "ClientWrite";
            break;
+       case WAIT_EVENT_LIBPQWALRECEIVER_CONNECT:
+           event_name = "LibPQWalReceiverConnect";
+           break;
+       case WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE:
+           event_name = "LibPQWalReceiverReceive";
+           break;
        case WAIT_EVENT_SSL_OPEN_SERVER:
            event_name = "SSLOpenServer";
            break;
        case WAIT_EVENT_WAL_RECEIVER_WAIT_START:
            event_name = "WalReceiverWaitStart";
            break;
-       case WAIT_EVENT_LIBPQWALRECEIVER:
-           event_name = "LibPQWalReceiver";
-           break;
        case WAIT_EVENT_WAL_SENDER_WAIT_WAL:
            event_name = "WalSenderWaitForWAL";
            break;
@@ -3579,6 +3582,12 @@ pgstat_get_wait_ipc(WaitEventIPC w)
        case WAIT_EVENT_EXECUTE_GATHER:
            event_name = "ExecuteGather";
            break;
+       case WAIT_EVENT_LOGICAL_SYNC_DATA:
+           event_name = "LogicalSyncData";
+           break;
+       case WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE:
+           event_name = "LogicalSyncStateChange";
+           break;
        case WAIT_EVENT_MQ_INTERNAL:
            event_name = "MessageQueueInternal";
            break;
@@ -3600,18 +3609,15 @@ pgstat_get_wait_ipc(WaitEventIPC w)
        case WAIT_EVENT_PROCARRAY_GROUP_UPDATE:
            event_name = "ProcArrayGroupUpdate";
            break;
+       case WAIT_EVENT_REPLICATION_SLOT_DROP:
+           event_name = "ReplicationSlotDrop";
+           break;
        case WAIT_EVENT_SAFE_SNAPSHOT:
            event_name = "SafeSnapshot";
            break;
        case WAIT_EVENT_SYNC_REP:
            event_name = "SyncRep";
            break;
-       case WAIT_EVENT_LOGICAL_SYNC_DATA:
-           event_name = "LogicalSyncData";
-           break;
-       case WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE:
-           event_name = "LogicalSyncStateChange";
-           break;
            /* no default case, so that compiler will warn */
    }
 
index 93dd7b5c176959b8f916433a1e7712a5b34c2c48..de03362c91ccb22e38417f540e60e89918c040ca 100644 (file)
@@ -181,7 +181,7 @@ libpqrcv_connect(const char *conninfo, bool logical, const char *appname,
                               WL_LATCH_SET | io_flag,
                               PQsocket(conn->streamConn),
                               0,
-                              WAIT_EVENT_LIBPQWALRECEIVER);
+                              WAIT_EVENT_LIBPQWALRECEIVER_CONNECT);
 
        /* Emergency bailout? */
        if (rc & WL_POSTMASTER_DEATH)
@@ -582,7 +582,7 @@ libpqrcv_PQexec(PGconn *streamConn, const char *query)
                                   WL_LATCH_SET,
                                   PQsocket(streamConn),
                                   0,
-                                  WAIT_EVENT_LIBPQWALRECEIVER);
+                                  WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE);
 
            /* Emergency bailout? */
            if (rc & WL_POSTMASTER_DEATH)
index 08c0b1b285f931b31032c488d23ec9174d17d18b..63e1aaa910276095636140798ddf4b71a6aaed11 100644 (file)
@@ -391,7 +391,8 @@ retry:
                            name, active_pid)));
 
        /* Wait here until we get signaled, and then restart */
-       ConditionVariableSleep(&slot->active_cv, PG_WAIT_LOCK);
+       ConditionVariableSleep(&slot->active_cv,
+                              WAIT_EVENT_REPLICATION_SLOT_DROP);
        ConditionVariableCancelSleep();
        goto retry;
    }
index 6bffe63ad6badaed8bcddab1342632aa2f45067d..43ea55e9eb60f377e831226788c8df3d88ef5e50 100644 (file)
@@ -759,15 +759,15 @@ typedef enum
    WAIT_EVENT_BGWRITER_HIBERNATE,
    WAIT_EVENT_BGWRITER_MAIN,
    WAIT_EVENT_CHECKPOINTER_MAIN,
+   WAIT_EVENT_LOGICAL_LAUNCHER_MAIN,
+   WAIT_EVENT_LOGICAL_APPLY_MAIN,
    WAIT_EVENT_PGSTAT_MAIN,
    WAIT_EVENT_RECOVERY_WAL_ALL,
    WAIT_EVENT_RECOVERY_WAL_STREAM,
    WAIT_EVENT_SYSLOGGER_MAIN,
    WAIT_EVENT_WAL_RECEIVER_MAIN,
    WAIT_EVENT_WAL_SENDER_MAIN,
-   WAIT_EVENT_WAL_WRITER_MAIN,
-   WAIT_EVENT_LOGICAL_LAUNCHER_MAIN,
-   WAIT_EVENT_LOGICAL_APPLY_MAIN
+   WAIT_EVENT_WAL_WRITER_MAIN
 } WaitEventActivity;
 
 /* ----------
@@ -782,9 +782,10 @@ typedef enum
 {
    WAIT_EVENT_CLIENT_READ = PG_WAIT_CLIENT,
    WAIT_EVENT_CLIENT_WRITE,
+   WAIT_EVENT_LIBPQWALRECEIVER_CONNECT,
+   WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE,
    WAIT_EVENT_SSL_OPEN_SERVER,
    WAIT_EVENT_WAL_RECEIVER_WAIT_START,
-   WAIT_EVENT_LIBPQWALRECEIVER,
    WAIT_EVENT_WAL_SENDER_WAIT_WAL,
    WAIT_EVENT_WAL_SENDER_WRITE_DATA
 } WaitEventClient;
@@ -802,6 +803,8 @@ typedef enum
    WAIT_EVENT_BGWORKER_STARTUP,
    WAIT_EVENT_BTREE_PAGE,
    WAIT_EVENT_EXECUTE_GATHER,
+   WAIT_EVENT_LOGICAL_SYNC_DATA,
+   WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE,
    WAIT_EVENT_MQ_INTERNAL,
    WAIT_EVENT_MQ_PUT_MESSAGE,
    WAIT_EVENT_MQ_RECEIVE,
@@ -809,10 +812,9 @@ typedef enum
    WAIT_EVENT_PARALLEL_FINISH,
    WAIT_EVENT_PARALLEL_BITMAP_SCAN,
    WAIT_EVENT_PROCARRAY_GROUP_UPDATE,
+   WAIT_EVENT_REPLICATION_SLOT_DROP,
    WAIT_EVENT_SAFE_SNAPSHOT,
-   WAIT_EVENT_SYNC_REP,
-   WAIT_EVENT_LOGICAL_SYNC_DATA,
-   WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE
+   WAIT_EVENT_SYNC_REP
 } WaitEventIPC;
 
 /* ----------