Skip to content

This is the multi-page printable view of this section. .

Return to the regular view of this page.

IPC waits

PostgreSQL processes waiting for peers, workers, barriers, queues, or phase changes.

IPC is coordination: this process has reached a point that depends on another PostgreSQL process or execution participant. The peer may be a parallel worker, WAL receiver, checkpointer, archiver, replication process, or another backend in a shared-memory protocol.

Find the missing peer or phase

The waiter is often healthy. Ask which participant is expected to signal it and inspect that participant’s state. Parallel-query events should be read as a phase diagram; replication events as a sender/receiver pipeline; checkpoint events as a cluster-wide barrier.

  • Normal: brief rendezvous in parallel plans, checkpoint start/completion, worker startup, or synchronous replication.
  • Watch: a foreground waiter remains in the same phase across three samples while its peer makes no visible progress.
  • Urgent: the peer has exited or is blocked, a queue cannot drain, replication/failover is stalled, or many sessions depend on one stuck coordinator.

Events to recognize

Event Peer or phase
BufferIo Another backend performing I/O for the shared buffer
ExecuteGather Child processes feeding a Gather node
ParallelFinish Parallel workers reaching plan completion
CheckpointDone Checkpointer completing a requested checkpoint
SyncRep Remote synchronous standby acknowledgement
WalReceiverWaitStart Startup process waiting for streaming data
MessageQueueReceive Shared-memory message queue producer
RecoveryPause Recovery intentionally paused by operator policy

Common misreads

  • Killing the waiter does not repair a dead or blocked peer.
  • IPC/SyncRep is acknowledgement latency; LWLock/SyncRep is contention on shared queue/state metadata.
  • Many parallel wait names are expected barriers. The question is whether every participant eventually advances.
  • RecoveryPause can be entirely intentional; check pg_is_wal_replay_paused() before treating it as failure.

1 - IPC: AppendReady

Waiting for subplan nodes of an Append plan node to be ready
PostgreSQL wait event dossier
ClassIPC EventAppendReady VersionsPG 14-18 Evidence2 source location(s)

Official description

Waiting for subplan nodes of an Append plan node to be ready

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_APPEND_READY at src/backend/executor/nodeAppend.c:1079 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:106. The instrumented operation is: Waiting for subplan nodes of an Append plan node to be ready. The AppendReady path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/AppendReady
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'AppendReady'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'AppendReady'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

2 - IPC: ArchiveCleanupCommand

Waiting for archive_cleanup_command to complete
PostgreSQL wait event dossier
ClassIPC EventArchiveCleanupCommand VersionsPG 15-18 Evidence2 source location(s)

Official description

Waiting for archive_cleanup_command to complete

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_ARCHIVE_CLEANUP_COMMAND at src/backend/access/transam/xlog.c:7885 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:107. The instrumented operation is: Waiting for archive_cleanup_command to complete. The ArchiveCleanupCommand path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/ArchiveCleanupCommand
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'ArchiveCleanupCommand'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'ArchiveCleanupCommand'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

3 - IPC: ArchiveCommand

Waiting for archive_command to complete
PostgreSQL wait event dossier
ClassIPC EventArchiveCommand VersionsPG 15-18 Evidence2 source location(s)

Official description

Waiting for archive_command to complete

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_ARCHIVE_COMMAND at src/backend/archive/shell_archive.c:79 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:108. The instrumented operation is: Waiting for archive_command to complete. The ArchiveCommand path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/ArchiveCommand
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'ArchiveCommand'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'ArchiveCommand'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

4 - IPC: BackendTermination

Waiting for the termination of another backend
PostgreSQL wait event dossier
ClassIPC EventBackendTermination VersionsPG 14-18 Evidence2 source location(s)

Official description

Waiting for the termination of another backend

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_BACKEND_TERMINATION at src/backend/storage/ipc/signalfuncs.c:210 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:109. The instrumented operation is: Waiting for the termination of another backend. The BackendTermination path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/BackendTermination
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'BackendTermination'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'BackendTermination'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

5 - IPC: BackupWaitWalArchive

Waiting for WAL files required for a backup to be successfully archived
PostgreSQL wait event dossier
ClassIPC EventBackupWaitWalArchive VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for WAL files required for a backup to be successfully archived

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE at src/backend/access/transam/xlog.c:9405 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:110. The instrumented operation is: Waiting for WAL files required for a backup to be successfully archived. The BackupWaitWalArchive path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/BackupWaitWalArchive
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'BackupWaitWalArchive'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'BackupWaitWalArchive'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

6 - IPC: BgworkerShutdown

Waiting for background worker to shut down
PostgreSQL wait event dossier
ClassIPC EventBgworkerShutdown VersionsPG 17-18 Evidence4 source location(s)

Official description

Waiting for background worker to shut down

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Earlier names: IPC/BgWorkerShutdown (PG 13-16)

Trigger mechanism

WAIT_EVENT_BGWORKER_SHUTDOWN at src/backend/postmaster/bgworker.c:1188 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event.c:329. The instrumented operation is: Waiting for background worker to shut down. The BgworkerShutdown path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/BgworkerShutdown
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'BgworkerShutdown'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'BgworkerShutdown'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

7 - IPC: BgworkerStartup

Waiting for background worker to start up
PostgreSQL wait event dossier
ClassIPC EventBgworkerStartup VersionsPG 17-18 Evidence4 source location(s)

Official description

Waiting for background worker to start up

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Earlier names: IPC/BgWorkerStartup (PG 13-16)

Trigger mechanism

WAIT_EVENT_BGWORKER_STARTUP at src/backend/access/transam/parallel.c:771 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event.c:332. The instrumented operation is: Waiting for background worker to start up. The BgworkerStartup path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/BgworkerStartup
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'BgworkerStartup'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'BgworkerStartup'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

8 - IPC: BtreePage

Waiting for the page number needed to continue a parallel B-tree scan to become available
PostgreSQL wait event dossier
ClassIPC EventBtreePage VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for the page number needed to continue a parallel B-tree scan to become available

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_BTREE_PAGE at src/backend/access/nbtree/nbtree.c:927 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:113. The instrumented operation is: Waiting for the page number needed to continue a parallel B-tree scan to become available. The BtreePage path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/BtreePage
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'BtreePage'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'BtreePage'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

9 - IPC: BufferIo

Waiting for buffer I/O to complete
PostgreSQL wait event dossier
ClassIPC EventBufferIo VersionsPG 17-18 Evidence7 source location(s)

Official description

Waiting for buffer I/O to complete

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Earlier names: IPC/BufferIO (PG 14-16), LWLock/BufferIO (PG 13)

Trigger mechanism

pgstat_report_wait_start at src/backend/storage/lmgr/lwlock.c:765 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/access/transam/xact.c:2627. The instrumented operation is: Waiting for buffer I/O to complete. The BufferIo path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/BufferIo
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'BufferIo'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'BufferIo'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

10 - IPC: CheckpointDelayComplete

Waiting for a backend that blocks a checkpoint from completing
PostgreSQL wait event dossier
ClassIPC EventCheckpointDelayComplete VersionsPG 17-18 Evidence2 source location(s)

Official description

Waiting for a backend that blocks a checkpoint from completing

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_CHECKPOINT_DELAY_COMPLETE at src/backend/access/transam/xlog.c:7228 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:115. The instrumented operation is: Waiting for a backend that blocks a checkpoint from completing. The CheckpointDelayComplete path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/CheckpointDelayComplete
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'CheckpointDelayComplete'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'CheckpointDelayComplete'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

11 - IPC: CheckpointDelayStart

Waiting for a backend that blocks a checkpoint from starting
PostgreSQL wait event dossier
ClassIPC EventCheckpointDelayStart VersionsPG 17-18 Evidence2 source location(s)

Official description

Waiting for a backend that blocks a checkpoint from starting

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_CHECKPOINT_DELAY_START at src/backend/access/transam/xlog.c:7211 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:116. The instrumented operation is: Waiting for a backend that blocks a checkpoint from starting. The CheckpointDelayStart path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/CheckpointDelayStart
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'CheckpointDelayStart'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'CheckpointDelayStart'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

12 - IPC: CheckpointDone

Waiting for a checkpoint to complete
PostgreSQL wait event dossier
ClassIPC EventCheckpointDone VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for a checkpoint to complete

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_CHECKPOINT_DONE at src/backend/postmaster/checkpointer.c:1121 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:117. The instrumented operation is: Waiting for a checkpoint to complete. The CheckpointDone path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/CheckpointDone
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'CheckpointDone'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'CheckpointDone'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

13 - IPC: CheckpointStart

Waiting for a checkpoint to start
PostgreSQL wait event dossier
ClassIPC EventCheckpointStart VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for a checkpoint to start

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_CHECKPOINT_START at src/backend/postmaster/checkpointer.c:1100 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:118. The instrumented operation is: Waiting for a checkpoint to start. The CheckpointStart path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/CheckpointStart
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'CheckpointStart'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'CheckpointStart'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

14 - IPC: ExecuteGather

Waiting for activity from a child process while executing a Gather plan node
PostgreSQL wait event dossier
ClassIPC EventExecuteGather VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for activity from a child process while executing a Gather plan node

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_EXECUTE_GATHER at src/backend/executor/nodeGather.c:386 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:119. The instrumented operation is: Waiting for activity from a child process while executing a Gather plan node. The ExecuteGather path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/ExecuteGather
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'ExecuteGather'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'ExecuteGather'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

15 - IPC: HashBatchAllocate

Waiting for an elected Parallel Hash participant to allocate a hash table
PostgreSQL wait event dossier
ClassIPC EventHashBatchAllocate VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for an elected Parallel Hash participant to allocate a hash table

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_BATCH_ALLOCATE at src/backend/executor/nodeHashjoin.c:1321 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:120. The instrumented operation is: Waiting for an elected Parallel Hash participant to allocate a hash table. The HashBatchAllocate path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashBatchAllocate
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashBatchAllocate'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashBatchAllocate'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

16 - IPC: HashBatchElect

Waiting to elect a Parallel Hash participant to allocate a hash table
PostgreSQL wait event dossier
ClassIPC EventHashBatchElect VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting to elect a Parallel Hash participant to allocate a hash table

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_BATCH_ELECT at src/backend/executor/nodeHashjoin.c:1314 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:121. The instrumented operation is: Waiting to elect a Parallel Hash participant to allocate a hash table. The HashBatchElect path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashBatchElect
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashBatchElect'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashBatchElect'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

17 - IPC: HashBatchLoad

Waiting for other Parallel Hash participants to finish loading a hash table
PostgreSQL wait event dossier
ClassIPC EventHashBatchLoad VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for other Parallel Hash participants to finish loading a hash table

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_BATCH_LOAD at src/backend/executor/nodeHashjoin.c:1341 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:122. The instrumented operation is: Waiting for other Parallel Hash participants to finish loading a hash table. The HashBatchLoad path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashBatchLoad
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashBatchLoad'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashBatchLoad'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

18 - IPC: HashBuildAllocate

Waiting for an elected Parallel Hash participant to allocate the initial hash table
PostgreSQL wait event dossier
ClassIPC EventHashBuildAllocate VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for an elected Parallel Hash participant to allocate the initial hash table

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_BUILD_ALLOCATE at src/backend/executor/nodeHash.c:261 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:123. The instrumented operation is: Waiting for an elected Parallel Hash participant to allocate the initial hash table. The HashBuildAllocate path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashBuildAllocate
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashBuildAllocate'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashBuildAllocate'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

19 - IPC: HashBuildElect

Waiting to elect a Parallel Hash participant to allocate the initial hash table
PostgreSQL wait event dossier
ClassIPC EventHashBuildElect VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting to elect a Parallel Hash participant to allocate the initial hash table

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_BUILD_ELECT at src/backend/executor/nodeHash.c:598 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:124. The instrumented operation is: Waiting to elect a Parallel Hash participant to allocate the initial hash table. The HashBuildElect path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashBuildElect
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashBuildElect'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashBuildElect'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

20 - IPC: HashBuildHashInner

Waiting for other Parallel Hash participants to finish hashing the inner relation
PostgreSQL wait event dossier
ClassIPC EventHashBuildHashInner VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for other Parallel Hash participants to finish hashing the inner relation

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_BUILD_HASH_INNER at src/backend/executor/nodeHash.c:324 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:125. The instrumented operation is: Waiting for other Parallel Hash participants to finish hashing the inner relation. The HashBuildHashInner path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashBuildHashInner
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashBuildHashInner'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashBuildHashInner'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

21 - IPC: HashBuildHashOuter

Waiting for other Parallel Hash participants to finish partitioning the outer relation
PostgreSQL wait event dossier
ClassIPC EventHashBuildHashOuter VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for other Parallel Hash participants to finish partitioning the outer relation

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_BUILD_HASH_OUTER at src/backend/executor/nodeHashjoin.c:397 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:126. The instrumented operation is: Waiting for other Parallel Hash participants to finish partitioning the outer relation. The HashBuildHashOuter path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashBuildHashOuter
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashBuildHashOuter'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashBuildHashOuter'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

22 - IPC: HashGrowBatchesDecide

Waiting to elect a Parallel Hash participant to decide on future batch growth
PostgreSQL wait event dossier
ClassIPC EventHashGrowBatchesDecide VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting to elect a Parallel Hash participant to decide on future batch growth

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_GROW_BATCHES_DECIDE at src/backend/executor/nodeHash.c:1363 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:127. The instrumented operation is: Waiting to elect a Parallel Hash participant to decide on future batch growth. The HashGrowBatchesDecide path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashGrowBatchesDecide
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashGrowBatchesDecide'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashGrowBatchesDecide'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

23 - IPC: HashGrowBatchesElect

Waiting to elect a Parallel Hash participant to allocate more batches
PostgreSQL wait event dossier
ClassIPC EventHashGrowBatchesElect VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting to elect a Parallel Hash participant to allocate more batches

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_GROW_BATCHES_ELECT at src/backend/executor/nodeHash.c:1220 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:128. The instrumented operation is: Waiting to elect a Parallel Hash participant to allocate more batches. The HashGrowBatchesElect path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashGrowBatchesElect
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashGrowBatchesElect'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashGrowBatchesElect'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

24 - IPC: HashGrowBatchesFinish

Waiting for an elected Parallel Hash participant to decide on future batch growth
PostgreSQL wait event dossier
ClassIPC EventHashGrowBatchesFinish VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for an elected Parallel Hash participant to decide on future batch growth

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_GROW_BATCHES_FINISH at src/backend/executor/nodeHash.c:1420 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:129. The instrumented operation is: Waiting for an elected Parallel Hash participant to decide on future batch growth. The HashGrowBatchesFinish path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashGrowBatchesFinish
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashGrowBatchesFinish'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashGrowBatchesFinish'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

25 - IPC: HashGrowBatchesReallocate

Waiting for an elected Parallel Hash participant to allocate more batches
PostgreSQL wait event dossier
ClassIPC EventHashGrowBatchesReallocate VersionsPG 16-18 Evidence4 source location(s)

Official description

Waiting for an elected Parallel Hash participant to allocate more batches

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Earlier names: IPC/HashGrowBatchesAllocate (PG 13-15)

Trigger mechanism

WAIT_EVENT_HASH_GROW_BATCHES_ALLOCATE at src/backend/executor/nodeHash.c:1229 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event.c:368. The instrumented operation is: Waiting for an elected Parallel Hash participant to allocate more batches. The HashGrowBatchesReallocate path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashGrowBatchesReallocate
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashGrowBatchesReallocate'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashGrowBatchesReallocate'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

26 - IPC: HashGrowBatchesRepartition

Waiting for other Parallel Hash participants to finish repartitioning
PostgreSQL wait event dossier
ClassIPC EventHashGrowBatchesRepartition VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for other Parallel Hash participants to finish repartitioning

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_GROW_BATCHES_REPARTITION at src/backend/executor/nodeHash.c:1352 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:131. The instrumented operation is: Waiting for other Parallel Hash participants to finish repartitioning. The HashGrowBatchesRepartition path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashGrowBatchesRepartition
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashGrowBatchesRepartition'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashGrowBatchesRepartition'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

27 - IPC: HashGrowBucketsElect

Waiting to elect a Parallel Hash participant to allocate more buckets
PostgreSQL wait event dossier
ClassIPC EventHashGrowBucketsElect VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting to elect a Parallel Hash participant to allocate more buckets

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_GROW_BUCKETS_ELECT at src/backend/executor/nodeHash.c:1669 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:132. The instrumented operation is: Waiting to elect a Parallel Hash participant to allocate more buckets. The HashGrowBucketsElect path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashGrowBucketsElect
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashGrowBucketsElect'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashGrowBucketsElect'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

28 - IPC: HashGrowBucketsReallocate

Waiting for an elected Parallel Hash participant to finish allocating more buckets
PostgreSQL wait event dossier
ClassIPC EventHashGrowBucketsReallocate VersionsPG 16-18 Evidence4 source location(s)

Official description

Waiting for an elected Parallel Hash participant to finish allocating more buckets

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Earlier names: IPC/HashGrowBucketsAllocate (PG 13-15)

Trigger mechanism

WAIT_EVENT_HASH_GROW_BUCKETS_ALLOCATE at src/backend/executor/nodeHash.c:1588 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event.c:383. The instrumented operation is: Waiting for an elected Parallel Hash participant to finish allocating more buckets. The HashGrowBucketsReallocate path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashGrowBucketsReallocate
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashGrowBucketsReallocate'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashGrowBucketsReallocate'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

29 - IPC: HashGrowBucketsReinsert

Waiting for other Parallel Hash participants to finish inserting tuples into new buckets
PostgreSQL wait event dossier
ClassIPC EventHashGrowBucketsReinsert VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for other Parallel Hash participants to finish inserting tuples into new buckets

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_HASH_GROW_BUCKETS_REINSERT at src/backend/executor/nodeHash.c:1733 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:134. The instrumented operation is: Waiting for other Parallel Hash participants to finish inserting tuples into new buckets. The HashGrowBucketsReinsert path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/HashGrowBucketsReinsert
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'HashGrowBucketsReinsert'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'HashGrowBucketsReinsert'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

30 - IPC: LogicalApplySendData

Waiting for a logical replication leader apply process to send data to a parallel apply process
PostgreSQL wait event dossier
ClassIPC EventLogicalApplySendData VersionsPG 16-18 Evidence2 source location(s)

Official description

Waiting for a logical replication leader apply process to send data to a parallel apply process

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_LOGICAL_APPLY_SEND_DATA at src/backend/replication/logical/applyparallelworker.c:1204 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:135. The instrumented operation is: Waiting for a logical replication leader apply process to send data to a parallel apply process. The LogicalApplySendData path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/LogicalApplySendData
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'LogicalApplySendData'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'LogicalApplySendData'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

31 - IPC: LogicalParallelApplyStateChange

Waiting for a logical replication parallel apply process to change state
PostgreSQL wait event dossier
ClassIPC EventLogicalParallelApplyStateChange VersionsPG 16-18 Evidence2 source location(s)

Official description

Waiting for a logical replication parallel apply process to change state

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_LOGICAL_PARALLEL_APPLY_STATE_CHANGE at src/backend/replication/logical/applyparallelworker.c:1276 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:136. The instrumented operation is: Waiting for a logical replication parallel apply process to change state. The LogicalParallelApplyStateChange path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/LogicalParallelApplyStateChange
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'LogicalParallelApplyStateChange'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'LogicalParallelApplyStateChange'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

32 - IPC: LogicalSyncData

Waiting for a logical replication remote server to send data for initial table synchronization
PostgreSQL wait event dossier
ClassIPC EventLogicalSyncData VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for a logical replication remote server to send data for initial table synchronization

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_LOGICAL_SYNC_DATA at src/backend/replication/logical/tablesync.c:807 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:137. The instrumented operation is: Waiting for a logical replication remote server to send data for initial table synchronization. The LogicalSyncData path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/LogicalSyncData
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'LogicalSyncData'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'LogicalSyncData'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

33 - IPC: LogicalSyncStateChange

Waiting for a logical replication remote server to change state
PostgreSQL wait event dossier
ClassIPC EventLogicalSyncStateChange VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for a logical replication remote server to change state

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE at src/backend/replication/logical/tablesync.c:214 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:138. The instrumented operation is: Waiting for a logical replication remote server to change state. The LogicalSyncStateChange path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/LogicalSyncStateChange
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'LogicalSyncStateChange'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'LogicalSyncStateChange'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

34 - IPC: MessageQueueInternal

Waiting for another process to be attached to a shared message queue
PostgreSQL wait event dossier
ClassIPC EventMessageQueueInternal VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for another process to be attached to a shared message queue

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_MESSAGE_QUEUE_INTERNAL at src/backend/storage/ipc/shm_mq.c:1254 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:139. The instrumented operation is: Waiting for another process to be attached to a shared message queue. The MessageQueueInternal path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/MessageQueueInternal
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'MessageQueueInternal'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'MessageQueueInternal'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

35 - IPC: MessageQueuePutMessage

Waiting to write a protocol message to a shared message queue
PostgreSQL wait event dossier
ClassIPC EventMessageQueuePutMessage VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting to write a protocol message to a shared message queue

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_MESSAGE_QUEUE_PUT_MESSAGE at src/backend/libpq/pqmq.c:185 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:140. The instrumented operation is: Waiting to write a protocol message to a shared message queue. The MessageQueuePutMessage path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/MessageQueuePutMessage
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'MessageQueuePutMessage'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'MessageQueuePutMessage'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

36 - IPC: MessageQueueReceive

Waiting to receive bytes from a shared message queue
PostgreSQL wait event dossier
ClassIPC EventMessageQueueReceive VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting to receive bytes from a shared message queue

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_MESSAGE_QUEUE_RECEIVE at src/backend/storage/ipc/shm_mq.c:1165 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:141. The instrumented operation is: Waiting to receive bytes from a shared message queue. The MessageQueueReceive path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/MessageQueueReceive
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'MessageQueueReceive'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'MessageQueueReceive'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

37 - IPC: MessageQueueSend

Waiting to send bytes to a shared message queue
PostgreSQL wait event dossier
ClassIPC EventMessageQueueSend VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting to send bytes to a shared message queue

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_MESSAGE_QUEUE_SEND at src/backend/storage/ipc/shm_mq.c:1019 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:142. The instrumented operation is: Waiting to send bytes to a shared message queue. The MessageQueueSend path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/MessageQueueSend
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'MessageQueueSend'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'MessageQueueSend'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

38 - IPC: MultixactCreation

Waiting for a multixact creation to complete
PostgreSQL wait event dossier
ClassIPC EventMultixactCreation VersionsPG 17-18 Evidence1 source location(s)

Official description

Waiting for a multixact creation to complete

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

The catalog identity is present, but source audit found no live reporter in 17.8+, 18.2+. Known active ranges: 17.0-17.7, 18.0-18.1. The definition location below is retained as negative evidence; this exact release cannot emit the event from a core code path. Evidence: PostgreSQL 17.8 release note, PostgreSQL 18.2 release note.

Normal or trouble?

  • Normal: No live core occurrence is expected on the audited release.
  • Investigate: If telemetry shows it, verify the exact patch version, extension origin, and whether the sample is stale or came from a different server.

Diagnostic SQL

Sessions waiting on IPC/MultixactCreation
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'MultixactCreation'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'MultixactCreation'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

39 - IPC: ParallelBitmapScan

Waiting for parallel bitmap scan to become initialized
PostgreSQL wait event dossier
ClassIPC EventParallelBitmapScan VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for parallel bitmap scan to become initialized

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_PARALLEL_BITMAP_SCAN at src/backend/executor/nodeBitmapHeapscan.c:437 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:144. The instrumented operation is: Waiting for parallel bitmap scan to become initialized. The ParallelBitmapScan path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/ParallelBitmapScan
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'ParallelBitmapScan'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'ParallelBitmapScan'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

40 - IPC: ParallelCreateIndexScan

Waiting for parallel CREATE INDEX workers to finish heap scan
PostgreSQL wait event dossier
ClassIPC EventParallelCreateIndexScan VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for parallel CREATE INDEX workers to finish heap scan

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_PARALLEL_CREATE_INDEX_SCAN at src/backend/access/brin/brin.c:2600 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:145. The instrumented operation is: Waiting for parallel CREATE INDEX workers to finish heap scan. The ParallelCreateIndexScan path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/ParallelCreateIndexScan
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'ParallelCreateIndexScan'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'ParallelCreateIndexScan'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

41 - IPC: ParallelFinish

Waiting for parallel workers to finish computing
PostgreSQL wait event dossier
ClassIPC EventParallelFinish VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for parallel workers to finish computing

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_PARALLEL_FINISH at src/backend/access/transam/parallel.c:894 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:146. The instrumented operation is: Waiting for parallel workers to finish computing. The ParallelFinish path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/ParallelFinish
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'ParallelFinish'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'ParallelFinish'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

42 - IPC: ProcSignalBarrier

Waiting for a barrier event to be processed by all backends
PostgreSQL wait event dossier
ClassIPC EventProcSignalBarrier VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for a barrier event to be processed by all backends

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_PROC_SIGNAL_BARRIER at src/backend/storage/ipc/procsignal.c:458 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:148. The instrumented operation is: Waiting for a barrier event to be processed by all backends. The ProcSignalBarrier path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/ProcSignalBarrier
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'ProcSignalBarrier'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'ProcSignalBarrier'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

43 - IPC: ProcarrayGroupUpdate

Waiting for the group leader to clear the transaction ID at transaction end
PostgreSQL wait event dossier
ClassIPC EventProcarrayGroupUpdate VersionsPG 17-18 Evidence4 source location(s)

Official description

Waiting for the group leader to clear the transaction ID at transaction end

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Earlier names: IPC/ProcArrayGroupUpdate (PG 13-16)

Trigger mechanism

WAIT_EVENT_PROCARRAY_GROUP_UPDATE at src/backend/storage/ipc/procarray.c:829 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event.c:428. The instrumented operation is: Waiting for the group leader to clear the transaction ID at transaction end. The ProcarrayGroupUpdate path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/ProcarrayGroupUpdate
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'ProcarrayGroupUpdate'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'ProcarrayGroupUpdate'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

44 - IPC: Promote

Waiting for standby promotion
PostgreSQL wait event dossier
ClassIPC EventPromote VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for standby promotion

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_PROMOTE at src/backend/access/transam/xlogfuncs.c:731 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:149. The instrumented operation is: Waiting for standby promotion. The Promote path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/Promote
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'Promote'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'Promote'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

45 - IPC: RecoveryConflictSnapshot

Waiting for recovery conflict resolution for a vacuum cleanup
PostgreSQL wait event dossier
ClassIPC EventRecoveryConflictSnapshot VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for recovery conflict resolution for a vacuum cleanup

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_RECOVERY_CONFLICT_SNAPSHOT at src/backend/storage/ipc/standby.c:493 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:150. The instrumented operation is: Waiting for recovery conflict resolution for a vacuum cleanup. The RecoveryConflictSnapshot path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/RecoveryConflictSnapshot
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'RecoveryConflictSnapshot'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'RecoveryConflictSnapshot'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

46 - IPC: RecoveryConflictTablespace

Waiting for recovery conflict resolution for dropping a tablespace
PostgreSQL wait event dossier
ClassIPC EventRecoveryConflictTablespace VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for recovery conflict resolution for dropping a tablespace

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_RECOVERY_CONFLICT_TABLESPACE at src/backend/storage/ipc/standby.c:564 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:151. The instrumented operation is: Waiting for recovery conflict resolution for dropping a tablespace. The RecoveryConflictTablespace path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/RecoveryConflictTablespace
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'RecoveryConflictTablespace'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'RecoveryConflictTablespace'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

47 - IPC: RecoveryEndCommand

Waiting for recovery_end_command to complete
PostgreSQL wait event dossier
ClassIPC EventRecoveryEndCommand VersionsPG 15-18 Evidence2 source location(s)

Official description

Waiting for recovery_end_command to complete

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_RECOVERY_END_COMMAND at src/backend/access/transam/xlog.c:5337 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:152. The instrumented operation is: Waiting for recovery_end_command to complete. The RecoveryEndCommand path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/RecoveryEndCommand
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'RecoveryEndCommand'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'RecoveryEndCommand'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

48 - IPC: RecoveryPause

Waiting for recovery to be resumed
PostgreSQL wait event dossier
ClassIPC EventRecoveryPause VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for recovery to be resumed

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_RECOVERY_PAUSE at src/backend/access/transam/xlogrecovery.c:2994 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:153. The instrumented operation is: Waiting for recovery to be resumed. The RecoveryPause path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/RecoveryPause
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'RecoveryPause'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'RecoveryPause'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

49 - IPC: ReplicationOriginDrop

Waiting for a replication origin to become inactive so it can be dropped
PostgreSQL wait event dossier
ClassIPC EventReplicationOriginDrop VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for a replication origin to become inactive so it can be dropped

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_REPLICATION_ORIGIN_DROP at src/backend/replication/logical/origin.c:408 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:154. The instrumented operation is: Waiting for a replication origin to become inactive so it can be dropped. The ReplicationOriginDrop path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/ReplicationOriginDrop
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'ReplicationOriginDrop'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'ReplicationOriginDrop'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

50 - IPC: ReplicationSlotDrop

Waiting for a replication slot to become inactive so it can be dropped
PostgreSQL wait event dossier
ClassIPC EventReplicationSlotDrop VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for a replication slot to become inactive so it can be dropped

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_REPLICATION_SLOT_DROP at src/backend/replication/slot.c:657 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:155. The instrumented operation is: Waiting for a replication slot to become inactive so it can be dropped. The ReplicationSlotDrop path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/ReplicationSlotDrop
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'ReplicationSlotDrop'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'ReplicationSlotDrop'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

51 - IPC: RestoreCommand

Waiting for restore_command to complete
PostgreSQL wait event dossier
ClassIPC EventRestoreCommand VersionsPG 15-18 Evidence2 source location(s)

Official description

Waiting for restore_command to complete

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_RESTORE_COMMAND at src/backend/access/transam/xlogarchive.c:162 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:156. The instrumented operation is: Waiting for restore_command to complete. The RestoreCommand path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/RestoreCommand
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'RestoreCommand'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'RestoreCommand'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

52 - IPC: SafeSnapshot

Waiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction
PostgreSQL wait event dossier
ClassIPC EventSafeSnapshot VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_SAFE_SNAPSHOT at src/backend/storage/lmgr/predicate.c:1589 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:157. The instrumented operation is: Waiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction. The SafeSnapshot path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/SafeSnapshot
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'SafeSnapshot'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'SafeSnapshot'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

53 - IPC: SyncRep

Waiting for confirmation from a remote server during synchronous replication
PostgreSQL wait event dossier
ClassIPC EventSyncRep VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for confirmation from a remote server during synchronous replication

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_SYNC_REP at src/backend/replication/syncrep.c:332 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:158. The instrumented operation is: Waiting for confirmation from a remote server during synchronous replication. The SyncRep path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/SyncRep
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'SyncRep'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'SyncRep'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

54 - IPC: WalReceiverExit

Waiting for the WAL receiver to exit
PostgreSQL wait event dossier
ClassIPC EventWalReceiverExit VersionsPG 14-18 Evidence2 source location(s)

Official description

Waiting for the WAL receiver to exit

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_WAL_RECEIVER_EXIT at src/backend/replication/walreceiverfuncs.c:228 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:159. The instrumented operation is: Waiting for the WAL receiver to exit. The WalReceiverExit path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/WalReceiverExit
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'WalReceiverExit'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'WalReceiverExit'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

55 - IPC: WalReceiverUpstreamCatchup

Waiting for upstream server WAL flush position to catch up to requested start point
PostgreSQL wait event dossier
ClassIPC EventWalReceiverUpstreamCatchup VersionsPG 17-18 Evidence2 source location(s)

Official description

Waiting for upstream server WAL flush position to catch up to requested start point

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18
Important

Patch-level availability: Observed in 17.11+ and 18.6+; it is absent from 17.10 and 18.4, so the major-only range is insufficient.

Trigger mechanism

WAIT_EVENT_WAL_RECEIVER_UPSTREAM_CATCHUP at src/backend/replication/walreceiver.c:398 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:165. The instrumented operation is: Waiting for upstream server WAL flush position to catch up to requested start point. The WalReceiverUpstreamCatchup path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/WalReceiverUpstreamCatchup
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'WalReceiverUpstreamCatchup'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'WalReceiverUpstreamCatchup'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

56 - IPC: WalReceiverWaitStart

Waiting for startup process to send initial data for streaming replication
PostgreSQL wait event dossier
ClassIPC EventWalReceiverWaitStart VersionsPG 14-18 Evidence4 source location(s)

Official description

Waiting for startup process to send initial data for streaming replication

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Earlier names: Client/WalReceiverWaitStart (PG 13)

Trigger mechanism

WAIT_EVENT_WAL_RECEIVER_WAIT_START at src/backend/postmaster/pgstat.c:3738 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/postmaster/pgstat.c:3739. The instrumented operation is: Waiting for startup process to send initial data for streaming replication. The WalReceiverWaitStart path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/WalReceiverWaitStart
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'WalReceiverWaitStart'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'WalReceiverWaitStart'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

57 - IPC: WalSummaryReady

Waiting for a new WAL summary to be generated
PostgreSQL wait event dossier
ClassIPC EventWalSummaryReady VersionsPG 17-18 Evidence2 source location(s)

Official description

Waiting for a new WAL summary to be generated

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_WAL_SUMMARY_READY at src/backend/postmaster/walsummarizer.c:821 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:161. The instrumented operation is: Waiting for a new WAL summary to be generated. The WalSummaryReady path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/WalSummaryReady
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'WalSummaryReady'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'WalSummaryReady'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence

58 - IPC: XactGroupUpdate

Waiting for the group leader to update transaction status at transaction end
PostgreSQL wait event dossier
ClassIPC EventXactGroupUpdate VersionsPG 13-18 Evidence2 source location(s)

Official description

Waiting for the group leader to update transaction status at transaction end

PG 13 PG 14 PG 15 PG 16 PG 17 PG 18

Trigger mechanism

WAIT_EVENT_XACT_GROUP_UPDATE at src/backend/access/transam/clog.c:535 is the grep-verified reporting path. The public identity/resource is mapped at src/backend/utils/activity/wait_event_names.txt:162. The instrumented operation is: Waiting for the group leader to update transaction status at transaction end. The XactGroupUpdate path has reached a process-coordination point and sleeps until a peer, worker, barrier, queue, or replication phase signals progress.

Normal or trouble?

  • Normal: Brief rendezvous is normal when every participant continues to advance.
  • Investigate: Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.

Diagnostic SQL

Sessions waiting on IPC/XactGroupUpdate
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
  AND wait_event = 'XactGroupUpdate'
ORDER BY query_age DESC NULLS LAST;
Current IPC cohort
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'IPC'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
Lock and relation context for these sessions
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'IPC'
  AND a.wait_event = 'XactGroupUpdate'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

Response

  1. Identify the peer or phase named by the event.
  2. Inspect that participant’s wait, error, and progress state.
  3. Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause.

Source evidence