{"Entry":{"collection":"waitevent","key":"activity/RecoveryWalStream","name":"RecoveryWalStream","aliases":["RecoveryWalStream"],"metadata":{"aliases":["RecoveryWalStream"],"changed_in":["13"],"changes":[{"from":"9.6","moved":null,"renamed":null,"reworded":null,"status":"added","to":"10"},{"from":"12","moved":null,"renamed":null,"reworded":{"from":"Waiting when WAL data is not available from any kind of sources (local, archive or stream) before trying again to retrieve WAL data, at recovery.","to":"Waiting in main loop of startup process for WAL to arrive, during streaming recovery."},"status":"changed","to":"13"}],"content_hash":"45aa8b78c1cffd1a7182cc7037eb71c757a127a265f9d63c8d6386a10f9a5810","dossier":{"actions":{"en":["Match the row to backend_type.","Inspect the process-specific backlog and last-progress timestamp.","Fix the missing work signal or stalled upstream phase; do not kill a normally idle worker."],"zh":["先与 backend_type 对照。","检查该进程专属的积压与最后进展时间。","修复缺失的工作信号或停滞的上游阶段，不要终止正常空闲的 worker。"]},"diagnostic_sql":[{"id":"sessions","min_version":"13","sql":"SELECT pid, backend_type, usename, datname, application_name,\n       state, now() - query_start AS query_age,\n       now() - xact_start AS xact_age,\n       wait_event_type, wait_event,\n       pg_blocking_pids(pid) AS blocking_pids,\n       left(query, 160) AS query\nFROM pg_stat_activity\nWHERE wait_event_type = 'Activity'\n  AND wait_event = 'RecoveryWalStream'\nORDER BY query_age DESC NULLS LAST;","title":"Sessions waiting on Activity/RecoveryWalStream","title_zh":"正在等待 Activity/RecoveryWalStream 的会话"},{"id":"cohort","min_version":"13","sql":"SELECT wait_event, count(*) AS waiting_sessions,\n       count(*) FILTER (WHERE state = 'active') AS active_waiters,\n       max(now() - query_start) AS oldest_query\nFROM pg_stat_activity\nWHERE wait_event_type = 'Activity'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布"},{"id":"lock_objects","min_version":"13","sql":"SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,\n       d.datname, n.nspname, c.relname,\n       l.page, l.tuple, l.virtualxid, l.transactionid,\n       l.classid, l.objid, l.objsubid\nFROM pg_stat_activity AS a\nLEFT JOIN pg_locks AS l ON l.pid = a.pid\nLEFT JOIN pg_database AS d ON d.oid = l.database\nLEFT JOIN pg_class AS c\n  ON c.oid = l.relation\n AND l.database = (\n       SELECT oid FROM pg_database WHERE datname = current_database()\n     )\nLEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace\nWHERE a.wait_event_type = 'Activity'\n  AND a.wait_event = 'RecoveryWalStream'\nORDER BY a.pid, l.granted, l.locktype, l.mode;","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文"}],"emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"incident_pattern":{"en":"","zh":""},"mechanism":{"en":"`WAIT_EVENT_RECOVERY_WAL_STREAM` at `src/backend/access/transam/xlogrecovery.c:4038` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:64`. The instrumented operation is: Waiting in main loop of startup process for WAL to arrive, during streaming recovery. The RecoveryWalStream background path reports this event around its latch wait when its main loop has no immediate work. A signal, timeout, or new work clears the sleep and the process loops again.","zh":"`WAIT_EVENT_RECOVERY_WAL_STREAM` 位于 `src/backend/access/transam/xlogrecovery.c:4038`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:64`。探针覆盖的操作是：流式恢复期间，在 startup 进程的主循环中等待 WAL 到达。RecoveryWalStream 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"official_descriptions":{"13":"Waiting in main loop of startup process for WAL to arrive, during streaming recovery.","14":"Waiting in main loop of startup process for WAL to arrive, during streaming recovery.","15":"Waiting in main loop of startup process for WAL to arrive, during streaming recovery.","16":"Waiting in main loop of startup process for WAL to arrive, during streaming recovery.","17":"Waiting in main loop of startup process for WAL to arrive, during streaming recovery","18":"Waiting in main loop of startup process for WAL to arrive, during streaming recovery"},"record_kind":"event","source_locations":[{"commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","excerpt":"WAIT_EVENT_RECOVERY_WAL_STREAM);","grep_pattern":"WAIT_EVENT_RECOVERY_WAL_STREAM","grep_verified":true,"kind":"trigger","line":4038,"major":18,"path":"src/backend/access/transam/xlogrecovery.c","status":"live_trigger","symbol":"WAIT_EVENT_RECOVERY_WAL_STREAM","tag":"REL_18_6","url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlogrecovery.c#L4038","version":"18.6"},{"commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","excerpt":"RECOVERY_WAL_STREAM\t\"Waiting in main loop of startup process for WAL to arrive, during streaming recovery.\"","grep_pattern":"RECOVERY_WAL_STREAM","grep_verified":true,"kind":"catalog_definition","line":64,"major":18,"path":"src/backend/utils/activity/wait_event_names.txt","status":"live_trigger","symbol":"RECOVERY_WAL_STREAM","tag":"REL_18_6","url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L64","version":"18.6"}],"source_status":"live_trigger","trouble":{"en":"Investigate only when queued work or a shutdown/failover deadline is not advancing while the process remains here, or when the event appears on an unexpected backend type.","zh":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"}},"first_version":"10","has_dossier":true,"imported_at":"2026-09-27T17:57:32.489261+08:00","key":"activity/recoverywalstream","last_version":"20","name":"RecoveryWalStream","position":12,"present_in":["10","11","12","13","14","15","16","17","18","19","20"],"slug":"recovery-wal-stream","source_rev":"english-manuals:9f4ee058b1fc831776446b37a8d3c57ab27542b3cac0aa2c33a9a352f763834b","summary":"Waiting in main loop of startup process for WAL to arrive, during streaming recovery.","summary_zh":"","type":"Activity","type_slug":"activity","type_variants":["Activity"]}},"Definition":{"Collection":"waitevent","Key":"activity/RecoveryWalStream","SourceDatabase":"center","Version":"18","SourceTable":"waitevent","SourceKey":"activity/recoverywalstream","SourceRevision":"english-manuals:9f4ee058b1fc831776446b37a8d3c57ab27542b3cac0aa2c33a9a352f763834b","Facts":{"description":"Waiting in main loop of startup process for WAL to arrive, during streaming recovery.","description_zh":"","doc":{"anchor":"WAIT-EVENT-ACTIVITY-TABLE","file":"monitoring-stats.html","lang":"en","sha256":"aa979eed08627fbf715a9d792094a162a73671db5af810f3ab2aad3e073d5722","slug":"18"},"lang":"en","name":"RecoveryWalStream","source":"english-manual","type":"Activity","zh_from":""},"ManualEvidence":{"doc":{"anchor":"WAIT-EVENT-ACTIVITY-TABLE","file":"monitoring-stats.html","lang":"en","sha256":"aa979eed08627fbf715a9d792094a162a73671db5af810f3ab2aad3e073d5722","slug":"18"}},"MeasuredEvidence":{}},"Text":{"Collection":"waitevent","Key":"activity/RecoveryWalStream","SourceDatabase":"pgweb","Version":"18","Locale":"zh-Hans","Title":"RecoveryWalStream","Summary":"在流恢复期间，在启动进程的主循环中等待 WAL 到达。","BodyHTML":"\u003cp\u003e在流恢复期间，在启动进程的主循环中等待 WAL 到达。\u003c/p\u003e","SourceRevision":"2026-08-31@34d13c8","ContentHash":"d040f46010aa3e2b7c353ded948bade360ba57bc19f78c61725dc02a0d5bb45e","Payload":{"description_zh":"在流恢复期间，在启动进程的主循环中等待 WAL 到达。","zh_from":"doc"}},"RequestedLocale":"zh-Hans","Fallback":false,"Versions":["10","11","12","13","14","15","16","17","18","19","20"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
