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]
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.
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.
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.
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.
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;
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 */
}
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;
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;
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 */
}
WL_LATCH_SET | io_flag,
PQsocket(conn->streamConn),
0,
- WAIT_EVENT_LIBPQWALRECEIVER);
+ WAIT_EVENT_LIBPQWALRECEIVER_CONNECT);
/* Emergency bailout? */
if (rc & WL_POSTMASTER_DEATH)
WL_LATCH_SET,
PQsocket(streamConn),
0,
- WAIT_EVENT_LIBPQWALRECEIVER);
+ WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE);
/* Emergency bailout? */
if (rc & WL_POSTMASTER_DEATH)
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;
}
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;
/* ----------
{
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;
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,
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;
/* ----------