{"schema_version":1,"record_kind":"event","id":"activity-archiver-main","type":"Activity","name":"ArchiverMain","slug":"archiver-main","url":"/activity/archiver-main/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting in main loop of archiver process.","14":"Waiting in main loop of archiver process.","15":"Waiting in main loop of archiver process.","16":"Waiting in main loop of archiver process.","17":"Waiting in main loop of archiver process","18":"Waiting in main loop of archiver process"},"official_description_zh":"在 archiver 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_ARCHIVER_MAIN` at `src/backend/postmaster/pgarch.c:362` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:54`. The instrumented operation is: Waiting in main loop of archiver process. The ArchiverMain 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_ARCHIVER_MAIN` 位于 `src/backend/postmaster/pgarch.c:362`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:54`。探针覆盖的操作是：在 archiver 进程的主循环中等待。ArchiverMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/ArchiverMain","title_zh":"正在等待 Activity/ArchiverMain 的会话","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 = 'ArchiverMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'ArchiverMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/pgarch.c","line":362,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_ARCHIVER_MAIN","excerpt":"WAIT_EVENT_ARCHIVER_MAIN);","grep_pattern":"WAIT_EVENT_ARCHIVER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/pgarch.c#L362"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":54,"kind":"catalog_definition","status":"live_trigger","symbol":"ARCHIVER_MAIN","excerpt":"ARCHIVER_MAIN\t\"Waiting in main loop of archiver process.\"","grep_pattern":"ARCHIVER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L54"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-autovacuum-main","type":"Activity","name":"AutovacuumMain","slug":"autovacuum-main","url":"/activity/autovacuum-main/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"Activity","name":"AutoVacuumMain","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting in main loop of autovacuum launcher process","18":"Waiting in main loop of autovacuum launcher process"},"official_description_zh":"在 autovacuum launcher 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_AUTOVACUUM_MAIN` at `src/backend/postmaster/autovacuum.c:667` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:216`. The instrumented operation is: Waiting in main loop of autovacuum launcher process. The AutovacuumMain 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_AUTOVACUUM_MAIN` 位于 `src/backend/postmaster/autovacuum.c:667`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:216`。探针覆盖的操作是：在 autovacuum launcher 进程的主循环中等待。AutovacuumMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/AutovacuumMain","title_zh":"正在等待 Activity/AutovacuumMain 的会话","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 = 'AutovacuumMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'AutovacuumMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/postmaster/autovacuum.c","line":667,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_AUTOVACUUM_MAIN","excerpt":"WAIT_EVENT_AUTOVACUUM_MAIN);","grep_pattern":"WAIT_EVENT_AUTOVACUUM_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/postmaster/autovacuum.c#L667"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":216,"kind":"catalog_definition","status":"live_trigger","symbol":"AutoVacuumMain","excerpt":"event_name = \"AutoVacuumMain\";","grep_pattern":"AutoVacuumMain","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L216"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/autovacuum.c","line":595,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_AUTOVACUUM_MAIN","excerpt":"WAIT_EVENT_AUTOVACUUM_MAIN);","grep_pattern":"WAIT_EVENT_AUTOVACUUM_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/autovacuum.c#L595"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":55,"kind":"catalog_definition","status":"live_trigger","symbol":"AUTOVACUUM_MAIN","excerpt":"AUTOVACUUM_MAIN\t\"Waiting in main loop of autovacuum launcher process.\"","grep_pattern":"AUTOVACUUM_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L55"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_naptime"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-bgwriter-hibernate","type":"Activity","name":"BgwriterHibernate","slug":"bgwriter-hibernate","url":"/activity/bgwriter-hibernate/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"Activity","name":"BgWriterHibernate","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting in background writer process, hibernating","18":"Waiting in background writer process, hibernating"},"official_description_zh":"在后台写入器进程休眠时等待。","mechanism":{"en":"`WAIT_EVENT_BGWRITER_HIBERNATE` at `src/backend/postmaster/bgwriter.c:339` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:219`. The instrumented operation is: Waiting in background writer process, hibernating. The BgwriterHibernate 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_BGWRITER_HIBERNATE` 位于 `src/backend/postmaster/bgwriter.c:339`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:219`。探针覆盖的操作是：在后台写入器进程休眠时等待。BgwriterHibernate 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/BgwriterHibernate","title_zh":"正在等待 Activity/BgwriterHibernate 的会话","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 = 'BgwriterHibernate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'BgwriterHibernate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/postmaster/bgwriter.c","line":339,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BGWRITER_HIBERNATE","excerpt":"WAIT_EVENT_BGWRITER_HIBERNATE);","grep_pattern":"WAIT_EVENT_BGWRITER_HIBERNATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/postmaster/bgwriter.c#L339"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":219,"kind":"catalog_definition","status":"live_trigger","symbol":"BgWriterHibernate","excerpt":"event_name = \"BgWriterHibernate\";","grep_pattern":"BgWriterHibernate","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L219"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/bgwriter.c","line":337,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BGWRITER_HIBERNATE","excerpt":"WAIT_EVENT_BGWRITER_HIBERNATE);","grep_pattern":"WAIT_EVENT_BGWRITER_HIBERNATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/bgwriter.c#L337"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":56,"kind":"catalog_definition","status":"live_trigger","symbol":"BGWRITER_HIBERNATE","excerpt":"BGWRITER_HIBERNATE\t\"Waiting in background writer process, hibernating.\"","grep_pattern":"BGWRITER_HIBERNATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L56"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-bgwriter-main","type":"Activity","name":"BgwriterMain","slug":"bgwriter-main","url":"/activity/bgwriter-main/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"Activity","name":"BgWriterMain","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting in main loop of background writer process","18":"Waiting in main loop of background writer process"},"official_description_zh":"在后台写入器进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_BGWRITER_MAIN` at `src/backend/postmaster/bgwriter.c:311` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:222`. The instrumented operation is: Waiting in main loop of background writer process. The BgwriterMain 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_BGWRITER_MAIN` 位于 `src/backend/postmaster/bgwriter.c:311`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:222`。探针覆盖的操作是：在后台写入器进程的主循环中等待。BgwriterMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/BgwriterMain","title_zh":"正在等待 Activity/BgwriterMain 的会话","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 = 'BgwriterMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'BgwriterMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/postmaster/bgwriter.c","line":311,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BGWRITER_MAIN","excerpt":"BgWriterDelay /* ms */ , WAIT_EVENT_BGWRITER_MAIN);","grep_pattern":"WAIT_EVENT_BGWRITER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/postmaster/bgwriter.c#L311"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":222,"kind":"catalog_definition","status":"live_trigger","symbol":"BgWriterMain","excerpt":"event_name = \"BgWriterMain\";","grep_pattern":"BgWriterMain","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L222"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/bgwriter.c","line":309,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BGWRITER_MAIN","excerpt":"BgWriterDelay /* ms */ , WAIT_EVENT_BGWRITER_MAIN);","grep_pattern":"WAIT_EVENT_BGWRITER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/bgwriter.c#L309"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":57,"kind":"catalog_definition","status":"live_trigger","symbol":"BGWRITER_MAIN","excerpt":"BGWRITER_MAIN\t\"Waiting in main loop of background writer process.\"","grep_pattern":"BGWRITER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L57"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-checkpointer-main","type":"Activity","name":"CheckpointerMain","slug":"checkpointer-main","url":"/activity/checkpointer-main/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting in main loop of checkpointer process.","14":"Waiting in main loop of checkpointer process.","15":"Waiting in main loop of checkpointer process.","16":"Waiting in main loop of checkpointer process.","17":"Waiting in main loop of checkpointer process","18":"Waiting in main loop of checkpointer process"},"official_description_zh":"在 checkpointer 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_CHECKPOINTER_MAIN` at `src/backend/postmaster/checkpointer.c:583` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:58`. The instrumented operation is: Waiting in main loop of checkpointer process. The CheckpointerMain 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_CHECKPOINTER_MAIN` 位于 `src/backend/postmaster/checkpointer.c:583`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:58`。探针覆盖的操作是：在 checkpointer 进程的主循环中等待。CheckpointerMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/CheckpointerMain","title_zh":"正在等待 Activity/CheckpointerMain 的会话","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 = 'CheckpointerMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'CheckpointerMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/checkpointer.c","line":583,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CHECKPOINTER_MAIN","excerpt":"WAIT_EVENT_CHECKPOINTER_MAIN);","grep_pattern":"WAIT_EVENT_CHECKPOINTER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/checkpointer.c#L583"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":58,"kind":"catalog_definition","status":"live_trigger","symbol":"CHECKPOINTER_MAIN","excerpt":"CHECKPOINTER_MAIN\t\"Waiting in main loop of checkpointer process.\"","grep_pattern":"CHECKPOINTER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L58"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","checkpoint_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-checkpointer-shutdown","type":"Activity","name":"CheckpointerShutdown","slug":"checkpointer-shutdown","url":"/activity/checkpointer-shutdown/","versions":[18],"version_range":"18","availability":{},"aliases":[],"official_descriptions":{"18":"Waiting for checkpointer process to be terminated"},"official_description_zh":"等待 checkpointer 进程终止。","mechanism":{"en":"`WAIT_EVENT_CHECKPOINTER_SHUTDOWN` at `src/backend/postmaster/checkpointer.c:631` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:59`. The instrumented operation is: Waiting for checkpointer process to be terminated. The CheckpointerShutdown 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_CHECKPOINTER_SHUTDOWN` 位于 `src/backend/postmaster/checkpointer.c:631`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:59`。探针覆盖的操作是：等待 checkpointer 进程终止。CheckpointerShutdown 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/CheckpointerShutdown","title_zh":"正在等待 Activity/CheckpointerShutdown 的会话","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 = 'CheckpointerShutdown'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'CheckpointerShutdown'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/checkpointer.c","line":631,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CHECKPOINTER_SHUTDOWN","excerpt":"WAIT_EVENT_CHECKPOINTER_SHUTDOWN);","grep_pattern":"WAIT_EVENT_CHECKPOINTER_SHUTDOWN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/checkpointer.c#L631"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":59,"kind":"catalog_definition","status":"live_trigger","symbol":"CHECKPOINTER_SHUTDOWN","excerpt":"CHECKPOINTER_SHUTDOWN\t\"Waiting for checkpointer process to be terminated.\"","grep_pattern":"CHECKPOINTER_SHUTDOWN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L59"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","checkpoint_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-io-worker-main","type":"Activity","name":"IoWorkerMain","slug":"io-worker-main","url":"/activity/io-worker-main/","versions":[18],"version_range":"18","availability":{},"aliases":[],"official_descriptions":{"18":"Waiting in main loop of IO Worker process"},"official_description_zh":"在 I/O worker 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_IO_WORKER_MAIN` at `src/backend/storage/aio/method_worker.c:573` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:60`. The instrumented operation is: Waiting in main loop of IO Worker process. The IoWorkerMain 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_IO_WORKER_MAIN` 位于 `src/backend/storage/aio/method_worker.c:573`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:60`。探针覆盖的操作是：在 I/O worker 进程的主循环中等待。IoWorkerMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/IoWorkerMain","title_zh":"正在等待 Activity/IoWorkerMain 的会话","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 = 'IoWorkerMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IoWorkerMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/aio/method_worker.c","line":573,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_IO_WORKER_MAIN","excerpt":"WAIT_EVENT_IO_WORKER_MAIN);","grep_pattern":"WAIT_EVENT_IO_WORKER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/aio/method_worker.c#L573"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":60,"kind":"catalog_definition","status":"live_trigger","symbol":"IO_WORKER_MAIN","excerpt":"IO_WORKER_MAIN\t\"Waiting in main loop of IO Worker process.\"","grep_pattern":"IO_WORKER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L60"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-logical-apply-main","type":"Activity","name":"LogicalApplyMain","slug":"logical-apply-main","url":"/activity/logical-apply-main/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting in main loop of logical replication apply process.","14":"Waiting in main loop of logical replication apply process.","15":"Waiting in main loop of logical replication apply process.","16":"Waiting in main loop of logical replication apply process.","17":"Waiting in main loop of logical replication apply process","18":"Waiting in main loop of logical replication apply process"},"official_description_zh":"在逻辑复制 apply 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_LOGICAL_APPLY_MAIN` at `src/backend/replication/logical/worker.c:3766` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:61`. The instrumented operation is: Waiting in main loop of logical replication apply process. The LogicalApplyMain 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_LOGICAL_APPLY_MAIN` 位于 `src/backend/replication/logical/worker.c:3766`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:61`。探针覆盖的操作是：在逻辑复制 apply 进程的主循环中等待。LogicalApplyMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/LogicalApplyMain","title_zh":"正在等待 Activity/LogicalApplyMain 的会话","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 = 'LogicalApplyMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LogicalApplyMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/worker.c","line":3766,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_APPLY_MAIN","excerpt":"WAIT_EVENT_LOGICAL_APPLY_MAIN);","grep_pattern":"WAIT_EVENT_LOGICAL_APPLY_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/worker.c#L3766"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":61,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_APPLY_MAIN","excerpt":"LOGICAL_APPLY_MAIN\t\"Waiting in main loop of logical replication apply process.\"","grep_pattern":"LOGICAL_APPLY_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L61"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-logical-launcher-main","type":"Activity","name":"LogicalLauncherMain","slug":"logical-launcher-main","url":"/activity/logical-launcher-main/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting in main loop of logical replication launcher process.","14":"Waiting in main loop of logical replication launcher process.","15":"Waiting in main loop of logical replication launcher process.","16":"Waiting in main loop of logical replication launcher process.","17":"Waiting in main loop of logical replication launcher process","18":"Waiting in main loop of logical replication launcher process"},"official_description_zh":"在逻辑复制 launcher 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_LOGICAL_LAUNCHER_MAIN` at `src/backend/replication/logical/launcher.c:1242` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:62`. The instrumented operation is: Waiting in main loop of logical replication launcher process. The LogicalLauncherMain 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_LOGICAL_LAUNCHER_MAIN` 位于 `src/backend/replication/logical/launcher.c:1242`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:62`。探针覆盖的操作是：在逻辑复制 launcher 进程的主循环中等待。LogicalLauncherMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/LogicalLauncherMain","title_zh":"正在等待 Activity/LogicalLauncherMain 的会话","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 = 'LogicalLauncherMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LogicalLauncherMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/launcher.c","line":1242,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_LAUNCHER_MAIN","excerpt":"WAIT_EVENT_LOGICAL_LAUNCHER_MAIN);","grep_pattern":"WAIT_EVENT_LOGICAL_LAUNCHER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/launcher.c#L1242"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":62,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_LAUNCHER_MAIN","excerpt":"LOGICAL_LAUNCHER_MAIN\t\"Waiting in main loop of logical replication launcher process.\"","grep_pattern":"LOGICAL_LAUNCHER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L62"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-logical-parallel-apply-main","type":"Activity","name":"LogicalParallelApplyMain","slug":"logical-parallel-apply-main","url":"/activity/logical-parallel-apply-main/","versions":[16,17,18],"version_range":"16-18","availability":{},"aliases":[],"official_descriptions":{"16":"Waiting in main loop of logical replication parallel apply process.","17":"Waiting in main loop of logical replication parallel apply process","18":"Waiting in main loop of logical replication parallel apply process"},"official_description_zh":"在逻辑复制并行 apply 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_LOGICAL_PARALLEL_APPLY_MAIN` at `src/backend/replication/logical/applyparallelworker.c:810` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:63`. The instrumented operation is: Waiting in main loop of logical replication parallel apply process. The LogicalParallelApplyMain 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_LOGICAL_PARALLEL_APPLY_MAIN` 位于 `src/backend/replication/logical/applyparallelworker.c:810`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:63`。探针覆盖的操作是：在逻辑复制并行 apply 进程的主循环中等待。LogicalParallelApplyMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/LogicalParallelApplyMain","title_zh":"正在等待 Activity/LogicalParallelApplyMain 的会话","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 = 'LogicalParallelApplyMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LogicalParallelApplyMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/applyparallelworker.c","line":810,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_PARALLEL_APPLY_MAIN","excerpt":"WAIT_EVENT_LOGICAL_PARALLEL_APPLY_MAIN);","grep_pattern":"WAIT_EVENT_LOGICAL_PARALLEL_APPLY_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/applyparallelworker.c#L810"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":63,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_PARALLEL_APPLY_MAIN","excerpt":"LOGICAL_PARALLEL_APPLY_MAIN\t\"Waiting in main loop of logical replication parallel apply process.\"","grep_pattern":"LOGICAL_PARALLEL_APPLY_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L63"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-pg-stat-main","type":"Activity","name":"PgStatMain","slug":"pg-stat-main","url":"/activity/pg-stat-main/","versions":[13,14],"version_range":"13-14","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting in main loop of statistics collector process.","14":"Waiting in main loop of statistics collector process."},"official_description_zh":"在统计收集器进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_PGSTAT_MAIN` at `src/backend/postmaster/pgstat.c:3425` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:234`. The instrumented operation is: Waiting in main loop of statistics collector process. The PgStatMain 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_PGSTAT_MAIN` 位于 `src/backend/postmaster/pgstat.c:3425`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:234`。探针覆盖的操作是：在统计收集器进程的主循环中等待。PgStatMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/PgStatMain","title_zh":"正在等待 Activity/PgStatMain 的会话","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 = 'PgStatMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'PgStatMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":14,"version":"14.24","tag":"REL_14_24","commit":"6b3806732b7c5df06bdd0ed150e8a07b4ad62315","path":"src/backend/postmaster/pgstat.c","line":3425,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_PGSTAT_MAIN","excerpt":"wr = WaitEventSetWait(wes, -1L, &event, 1, WAIT_EVENT_PGSTAT_MAIN);","grep_pattern":"WAIT_EVENT_PGSTAT_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_14_24/src/backend/postmaster/pgstat.c#L3425"},{"major":14,"version":"14.24","tag":"REL_14_24","commit":"6b3806732b7c5df06bdd0ed150e8a07b4ad62315","path":"src/backend/utils/activity/wait_event.c","line":234,"kind":"catalog_definition","status":"live_trigger","symbol":"PgStatMain","excerpt":"event_name = \"PgStatMain\";","grep_pattern":"PgStatMain","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_14_24/src/backend/utils/activity/wait_event.c#L234"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"14.24"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-recovery-wal-stream","type":"Activity","name":"RecoveryWalStream","slug":"recovery-wal-stream","url":"/activity/recovery-wal-stream/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"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"},"official_description_zh":"流式恢复期间，在 startup 进程的主循环中等待 WAL 到达。","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 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/RecoveryWalStream","title_zh":"正在等待 Activity/RecoveryWalStream 的会话","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;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlogrecovery.c","line":4038,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RECOVERY_WAL_STREAM","excerpt":"WAIT_EVENT_RECOVERY_WAL_STREAM);","grep_pattern":"WAIT_EVENT_RECOVERY_WAL_STREAM","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlogrecovery.c#L4038"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":64,"kind":"catalog_definition","status":"live_trigger","symbol":"RECOVERY_WAL_STREAM","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,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L64"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-replication-slotsync-main","type":"Activity","name":"ReplicationSlotsyncMain","slug":"replication-slotsync-main","url":"/activity/replication-slotsync-main/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting in main loop of slot sync worker","18":"Waiting in main loop of slot sync worker"},"official_description_zh":"在复制槽同步 worker 的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_REPLICATION_SLOTSYNC_MAIN` at `src/backend/replication/logical/slotsync.c:1369` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:65`. The instrumented operation is: Waiting in main loop of slot sync worker. The ReplicationSlotsyncMain 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_REPLICATION_SLOTSYNC_MAIN` 位于 `src/backend/replication/logical/slotsync.c:1369`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:65`。探针覆盖的操作是：在复制槽同步 worker 的主循环中等待。ReplicationSlotsyncMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/ReplicationSlotsyncMain","title_zh":"正在等待 Activity/ReplicationSlotsyncMain 的会话","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 = 'ReplicationSlotsyncMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'ReplicationSlotsyncMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/slotsync.c","line":1369,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REPLICATION_SLOTSYNC_MAIN","excerpt":"WAIT_EVENT_REPLICATION_SLOTSYNC_MAIN);","grep_pattern":"WAIT_EVENT_REPLICATION_SLOTSYNC_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/slotsync.c#L1369"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":65,"kind":"catalog_definition","status":"live_trigger","symbol":"REPLICATION_SLOTSYNC_MAIN","excerpt":"REPLICATION_SLOTSYNC_MAIN\t\"Waiting in main loop of slot sync worker.\"","grep_pattern":"REPLICATION_SLOTSYNC_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L65"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-replication-slotsync-shutdown","type":"Activity","name":"ReplicationSlotsyncShutdown","slug":"replication-slotsync-shutdown","url":"/activity/replication-slotsync-shutdown/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting for slot sync worker to shut down","18":"Waiting for slot sync worker to shut down"},"official_description_zh":"等待复制槽同步 worker 停止运行。","mechanism":{"en":"`WAIT_EVENT_REPLICATION_SLOTSYNC_SHUTDOWN` at `src/backend/replication/logical/slotsync.c:1732` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:66`. The instrumented operation is: Waiting for slot sync worker to shut down. The ReplicationSlotsyncShutdown 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_REPLICATION_SLOTSYNC_SHUTDOWN` 位于 `src/backend/replication/logical/slotsync.c:1732`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:66`。探针覆盖的操作是：等待复制槽同步 worker 停止运行。ReplicationSlotsyncShutdown 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/ReplicationSlotsyncShutdown","title_zh":"正在等待 Activity/ReplicationSlotsyncShutdown 的会话","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 = 'ReplicationSlotsyncShutdown'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'ReplicationSlotsyncShutdown'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/slotsync.c","line":1732,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REPLICATION_SLOTSYNC_SHUTDOWN","excerpt":"10L, WAIT_EVENT_REPLICATION_SLOTSYNC_SHUTDOWN);","grep_pattern":"WAIT_EVENT_REPLICATION_SLOTSYNC_SHUTDOWN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/slotsync.c#L1732"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":66,"kind":"catalog_definition","status":"live_trigger","symbol":"REPLICATION_SLOTSYNC_SHUTDOWN","excerpt":"REPLICATION_SLOTSYNC_SHUTDOWN\t\"Waiting for slot sync worker to shut down.\"","grep_pattern":"REPLICATION_SLOTSYNC_SHUTDOWN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L66"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-syslogger-main","type":"Activity","name":"SysloggerMain","slug":"syslogger-main","url":"/activity/syslogger-main/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"Activity","name":"SysLoggerMain","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting in main loop of syslogger process","18":"Waiting in main loop of syslogger process"},"official_description_zh":"在 syslogger 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_SYSLOGGER_MAIN` at `src/backend/postmaster/syslogger.c:487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:240`. The instrumented operation is: Waiting in main loop of syslogger process. The SysloggerMain 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_SYSLOGGER_MAIN` 位于 `src/backend/postmaster/syslogger.c:487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:240`。探针覆盖的操作是：在 syslogger 进程的主循环中等待。SysloggerMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/SysloggerMain","title_zh":"正在等待 Activity/SysloggerMain 的会话","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 = 'SysloggerMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'SysloggerMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/postmaster/syslogger.c","line":487,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SYSLOGGER_MAIN","excerpt":"WAIT_EVENT_SYSLOGGER_MAIN);","grep_pattern":"WAIT_EVENT_SYSLOGGER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/postmaster/syslogger.c#L487"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":240,"kind":"catalog_definition","status":"live_trigger","symbol":"SysLoggerMain","excerpt":"event_name = \"SysLoggerMain\";","grep_pattern":"SysLoggerMain","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L240"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/syslogger.c","line":513,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SYSLOGGER_MAIN","excerpt":"WAIT_EVENT_SYSLOGGER_MAIN);","grep_pattern":"WAIT_EVENT_SYSLOGGER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/syslogger.c#L513"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":67,"kind":"catalog_definition","status":"live_trigger","symbol":"SYSLOGGER_MAIN","excerpt":"SYSLOGGER_MAIN\t\"Waiting in main loop of syslogger process.\"","grep_pattern":"SYSLOGGER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L67"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-wal-receiver-main","type":"Activity","name":"WalReceiverMain","slug":"wal-receiver-main","url":"/activity/wal-receiver-main/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting in main loop of WAL receiver process.","14":"Waiting in main loop of WAL receiver process.","15":"Waiting in main loop of WAL receiver process.","16":"Waiting in main loop of WAL receiver process.","17":"Waiting in main loop of WAL receiver process","18":"Waiting in main loop of WAL receiver process"},"official_description_zh":"在 WAL receiver 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_WAL_RECEIVER_MAIN` at `src/backend/replication/walreceiver.c:600` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:68`. The instrumented operation is: Waiting in main loop of WAL receiver process. The WalReceiverMain 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_WAL_RECEIVER_MAIN` 位于 `src/backend/replication/walreceiver.c:600`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:68`。探针覆盖的操作是：在 WAL receiver 进程的主循环中等待。WalReceiverMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/WalReceiverMain","title_zh":"正在等待 Activity/WalReceiverMain 的会话","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 = 'WalReceiverMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'WalReceiverMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/walreceiver.c","line":600,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_RECEIVER_MAIN","excerpt":"WAIT_EVENT_WAL_RECEIVER_MAIN);","grep_pattern":"WAIT_EVENT_WAL_RECEIVER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/walreceiver.c#L600"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":68,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_RECEIVER_MAIN","excerpt":"WAL_RECEIVER_MAIN\t\"Waiting in main loop of WAL receiver process.\"","grep_pattern":"WAL_RECEIVER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L68"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-wal-sender-main","type":"Activity","name":"WalSenderMain","slug":"wal-sender-main","url":"/activity/wal-sender-main/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting in main loop of WAL sender process.","14":"Waiting in main loop of WAL sender process.","15":"Waiting in main loop of WAL sender process.","16":"Waiting in main loop of WAL sender process.","17":"Waiting in main loop of WAL sender process","18":"Waiting in main loop of WAL sender process"},"official_description_zh":"在 WAL sender 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_WAL_SENDER_MAIN` at `src/backend/replication/walsender.c:2963` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:69`. The instrumented operation is: Waiting in main loop of WAL sender process. The WalSenderMain 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_WAL_SENDER_MAIN` 位于 `src/backend/replication/walsender.c:2963`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:69`。探针覆盖的操作是：在 WAL sender 进程的主循环中等待。WalSenderMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/WalSenderMain","title_zh":"正在等待 Activity/WalSenderMain 的会话","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 = 'WalSenderMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'WalSenderMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/walsender.c","line":2963,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SENDER_MAIN","excerpt":"WalSndWait(wakeEvents, sleeptime, WAIT_EVENT_WAL_SENDER_MAIN);","grep_pattern":"WAIT_EVENT_WAL_SENDER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/walsender.c#L2963"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":69,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_SENDER_MAIN","excerpt":"WAL_SENDER_MAIN\t\"Waiting in main loop of WAL sender process.\"","grep_pattern":"WAL_SENDER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L69"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-wal-summarizer-wal","type":"Activity","name":"WalSummarizerWal","slug":"wal-summarizer-wal","url":"/activity/wal-summarizer-wal/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting in WAL summarizer for more WAL to be generated","18":"Waiting in WAL summarizer for more WAL to be generated"},"official_description_zh":"在 WAL summarizer 中等待生成更多 WAL。","mechanism":{"en":"`WAIT_EVENT_WAL_SUMMARIZER_WAL` at `src/backend/postmaster/walsummarizer.c:1798` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:70`. The instrumented operation is: Waiting in WAL summarizer for more WAL to be generated. The WalSummarizerWal 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_WAL_SUMMARIZER_WAL` 位于 `src/backend/postmaster/walsummarizer.c:1798`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:70`。探针覆盖的操作是：在 WAL summarizer 中等待生成更多 WAL。WalSummarizerWal 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/WalSummarizerWal","title_zh":"正在等待 Activity/WalSummarizerWal 的会话","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 = 'WalSummarizerWal'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'WalSummarizerWal'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/walsummarizer.c","line":1798,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SUMMARIZER_WAL","excerpt":"WAIT_EVENT_WAL_SUMMARIZER_WAL);","grep_pattern":"WAIT_EVENT_WAL_SUMMARIZER_WAL","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/walsummarizer.c#L1798"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":70,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_SUMMARIZER_WAL","excerpt":"WAL_SUMMARIZER_WAL\t\"Waiting in WAL summarizer for more WAL to be generated.\"","grep_pattern":"WAL_SUMMARIZER_WAL","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L70"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"activity-wal-writer-main","type":"Activity","name":"WalWriterMain","slug":"wal-writer-main","url":"/activity/wal-writer-main/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting in main loop of WAL writer process.","14":"Waiting in main loop of WAL writer process.","15":"Waiting in main loop of WAL writer process.","16":"Waiting in main loop of WAL writer process.","17":"Waiting in main loop of WAL writer process","18":"Waiting in main loop of WAL writer process"},"official_description_zh":"在 WAL writer 进程的主循环中等待。","mechanism":{"en":"`WAIT_EVENT_WAL_WRITER_MAIN` at `src/backend/postmaster/walwriter.c:271` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:71`. The instrumented operation is: Waiting in main loop of WAL writer process. The WalWriterMain 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_WAL_WRITER_MAIN` 位于 `src/backend/postmaster/walwriter.c:271`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:71`。探针覆盖的操作是：在 WAL writer 进程的主循环中等待。WalWriterMain 后台路径在主循环暂时无事可做、进入 latch wait 前报告此事件；信号、计时器或新工作会唤醒进程并进入下一轮循环。"},"normal":{"en":"This is normally expected idleness for the matching background process.","zh":"对匹配的后台进程而言，这通常是预期空闲。"},"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":"只有工作队列、关闭或故障切换时限没有推进但进程一直停在这里，或事件出现在不匹配的后端类型上时，才需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Activity/WalWriterMain","title_zh":"正在等待 Activity/WalWriterMain 的会话","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 = 'WalWriterMain'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Activity cohort","title_zh":"当前 Activity 等待分布","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;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'WalWriterMain'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"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。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/walwriter.c","line":271,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_WRITER_MAIN","excerpt":"WAIT_EVENT_WAL_WRITER_MAIN);","grep_pattern":"WAIT_EVENT_WAL_WRITER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/walwriter.c#L271"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":71,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_WRITER_MAIN","excerpt":"WAL_WRITER_MAIN\t\"Waiting in main loop of WAL writer process.\"","grep_pattern":"WAL_WRITER_MAIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L71"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"bufferpin-buffer-pin","type":"BufferPin","name":"BufferPin","slug":"buffer-pin","url":"/bufferpin/buffer-pin/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to acquire an exclusive pin on a buffer.","14":"Waiting to acquire an exclusive pin on a buffer.","15":"Waiting to acquire an exclusive pin on a buffer.","16":"Waiting to acquire an exclusive pin on a buffer.","17":"Waiting to acquire an exclusive pin on a buffer","18":"Waiting to acquire an exclusive pin on a buffer"},"official_description_zh":"等待获取 buffer 上的独占 pin。","mechanism":{"en":"`WAIT_EVENT_BUFFER_PIN` at `src/backend/storage/buffer/bufmgr.c:5819` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:286`. The instrumented operation is: Waiting to acquire an exclusive pin on a buffer. The buffer manager needs an exclusive pin, but another backend still holds a pin on the same shared buffer. It sleeps until the last conflicting pin is released.","zh":"`WAIT_EVENT_BUFFER_PIN` 位于 `src/backend/storage/buffer/bufmgr.c:5819`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:286`。探针覆盖的操作是：等待获取 buffer 上的独占 pin。缓冲区管理器需要独占 pin，但另一个后端仍在同一共享缓冲区上持有 pin；当前后端会休眠到最后一个冲突 pin 被释放。"},"normal":{"en":"An isolated sub-second sample can occur during scans or index maintenance.","zh":"扫描或索引维护期间，孤立的亚秒级样本可能正常。"},"trouble":{"en":"Treat a wait beyond one second as suspicious, especially when a cursor or idle transaction may keep the page pinned.","zh":"等待超过一秒就值得怀疑，尤其要检查游标或空闲事务是否持续钉住页面。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on BufferPin/BufferPin","title_zh":"正在等待 BufferPin/BufferPin 的会话","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 = 'BufferPin'\n  AND wait_event = 'BufferPin'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current BufferPin cohort","title_zh":"当前 BufferPin 等待分布","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 = 'BufferPin'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'BufferPin'\n  AND a.wait_event = 'BufferPin'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Preserve the waiting query and relation context.","Find long cursors and idle-in-transaction sessions touching the same relation.","Cancel only after identifying the safest holder or maintenance victim."],"zh":["保全等待查询与关系上下文。","查找访问同一关系的长游标与 idle in transaction 会话。","确认最安全的持有者或维护受害者后再取消。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/buffer/bufmgr.c","line":5819,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BUFFER_PIN","excerpt":"ProcWaitForSignal(WAIT_EVENT_BUFFER_PIN);","grep_pattern":"WAIT_EVENT_BUFFER_PIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/buffer/bufmgr.c#L5819"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":286,"kind":"catalog_definition","status":"live_trigger","symbol":"BUFFER_PIN","excerpt":"BUFFER_PIN\t\"Waiting to acquire an exclusive pin on a buffer.\"","grep_pattern":"BUFFER_PIN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L286"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"client-client-read","type":"Client","name":"ClientRead","slug":"client-read","url":"/client/client-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read data from the client.","14":"Waiting to read data from the client.","15":"Waiting to read data from the client.","16":"Waiting to read data from the client.","17":"Waiting to read data from the client","18":"Waiting to read data from the client"},"official_description_zh":"等待从客户端读取数据。","mechanism":{"en":"`WAIT_EVENT_CLIENT_READ` at `src/backend/libpq/be-secure.c:219` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:85`. The instrumented operation is: Waiting to read data from the client. The frontend protocol path reports ClientRead immediately before a socket, TLS/GSS, or replication-client operation blocks. PostgreSQL is waiting for the remote side or network to progress.","zh":"`WAIT_EVENT_CLIENT_READ` 位于 `src/backend/libpq/be-secure.c:219`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:85`。探针覆盖的操作是：等待从客户端读取数据。前端协议路径在套接字、TLS/GSS 或复制客户端操作即将阻塞前报告 ClientRead；PostgreSQL 正在等待远端或网络推进。"},"normal":{"en":"Idle ClientRead sessions are normal connection-pool inventory.","zh":"空闲状态的 ClientRead 通常只是连接池存量。"},"trouble":{"en":"Investigate active writes, handshakes, old idle-in-transaction sessions, connection exhaustion, or replication-client stalls.","zh":"活动写入、握手、很老的 idle in transaction、连接耗尽或复制客户端停滞时需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Client/ClientRead","title_zh":"正在等待 Client/ClientRead 的会话","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 = 'Client'\n  AND wait_event = 'ClientRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Client cohort","title_zh":"当前 Client 等待分布","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 = 'Client'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Client'\n  AND a.wait_event = 'ClientRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Check state and transaction age before counting the wait as load.","Correlate with the owning application, pool, and network path.","Fix consumer backpressure or pool policy rather than repeatedly terminating connections."],"zh":["先看 state 与事务年龄，再决定它是否算负载。","关联负责的应用、连接池与网络路径。","修复消费者背压或连接池策略，不要反复终止连接。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/libpq/be-secure.c","line":219,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CLIENT_READ","excerpt":"WAIT_EVENT_CLIENT_READ);","grep_pattern":"WAIT_EVENT_CLIENT_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/libpq/be-secure.c#L219"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":85,"kind":"catalog_definition","status":"live_trigger","symbol":"CLIENT_READ","excerpt":"CLIENT_READ\t\"Waiting to read data from the client.\"","grep_pattern":"CLIENT_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L85"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["max_connections","idle_in_transaction_session_timeout"],"metrics":["waiting_sessions","wait_event_share","active_backends"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"client-client-write","type":"Client","name":"ClientWrite","slug":"client-write","url":"/client/client-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to write data to the client.","14":"Waiting to write data to the client.","15":"Waiting to write data to the client.","16":"Waiting to write data to the client.","17":"Waiting to write data to the client","18":"Waiting to write data to the client"},"official_description_zh":"等待向客户端写入数据。","mechanism":{"en":"`WAIT_EVENT_CLIENT_WRITE` at `src/backend/libpq/be-secure.c:344` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:86`. The instrumented operation is: Waiting to write data to the client. The frontend protocol path reports ClientWrite immediately before a socket, TLS/GSS, or replication-client operation blocks. PostgreSQL is waiting for the remote side or network to progress.","zh":"`WAIT_EVENT_CLIENT_WRITE` 位于 `src/backend/libpq/be-secure.c:344`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:86`。探针覆盖的操作是：等待向客户端写入数据。前端协议路径在套接字、TLS/GSS 或复制客户端操作即将阻塞前报告 ClientWrite；PostgreSQL 正在等待远端或网络推进。"},"normal":{"en":"Idle ClientRead sessions are normal connection-pool inventory.","zh":"空闲状态的 ClientRead 通常只是连接池存量。"},"trouble":{"en":"Investigate active writes, handshakes, old idle-in-transaction sessions, connection exhaustion, or replication-client stalls.","zh":"活动写入、握手、很老的 idle in transaction、连接耗尽或复制客户端停滞时需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Client/ClientWrite","title_zh":"正在等待 Client/ClientWrite 的会话","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 = 'Client'\n  AND wait_event = 'ClientWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Client cohort","title_zh":"当前 Client 等待分布","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 = 'Client'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Client'\n  AND a.wait_event = 'ClientWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Check state and transaction age before counting the wait as load.","Correlate with the owning application, pool, and network path.","Fix consumer backpressure or pool policy rather than repeatedly terminating connections."],"zh":["先看 state 与事务年龄，再决定它是否算负载。","关联负责的应用、连接池与网络路径。","修复消费者背压或连接池策略，不要反复终止连接。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/libpq/be-secure.c","line":344,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CLIENT_WRITE","excerpt":"WAIT_EVENT_CLIENT_WRITE);","grep_pattern":"WAIT_EVENT_CLIENT_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/libpq/be-secure.c#L344"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":86,"kind":"catalog_definition","status":"live_trigger","symbol":"CLIENT_WRITE","excerpt":"CLIENT_WRITE\t\"Waiting to write data to the client.\"","grep_pattern":"CLIENT_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L86"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["max_connections","idle_in_transaction_session_timeout"],"metrics":["waiting_sessions","wait_event_share","active_backends"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"client-gss-open-server","type":"Client","name":"GssOpenServer","slug":"gss-open-server","url":"/client/gss-open-server/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"Client","name":"GSSOpenServer","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting to read data from the client while establishing a GSSAPI session","18":"Waiting to read data from the client while establishing a GSSAPI session"},"official_description_zh":"建立 GSSAPI 会话时，等待从客户端读取数据。","mechanism":{"en":"`WAIT_EVENT_GSS_OPEN_SERVER` at `src/backend/libpq/be-secure-gssapi.c:461` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:277`. The instrumented operation is: Waiting to read data from the client while establishing a GSSAPI session. The frontend protocol path reports GssOpenServer immediately before a socket, TLS/GSS, or replication-client operation blocks. PostgreSQL is waiting for the remote side or network to progress.","zh":"`WAIT_EVENT_GSS_OPEN_SERVER` 位于 `src/backend/libpq/be-secure-gssapi.c:461`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:277`。探针覆盖的操作是：建立 GSSAPI 会话时，等待从客户端读取数据。前端协议路径在套接字、TLS/GSS 或复制客户端操作即将阻塞前报告 GssOpenServer；PostgreSQL 正在等待远端或网络推进。"},"normal":{"en":"Idle ClientRead sessions are normal connection-pool inventory.","zh":"空闲状态的 ClientRead 通常只是连接池存量。"},"trouble":{"en":"Investigate active writes, handshakes, old idle-in-transaction sessions, connection exhaustion, or replication-client stalls.","zh":"活动写入、握手、很老的 idle in transaction、连接耗尽或复制客户端停滞时需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Client/GssOpenServer","title_zh":"正在等待 Client/GssOpenServer 的会话","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 = 'Client'\n  AND wait_event = 'GssOpenServer'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Client cohort","title_zh":"当前 Client 等待分布","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 = 'Client'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Client'\n  AND a.wait_event = 'GssOpenServer'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Check state and transaction age before counting the wait as load.","Correlate with the owning application, pool, and network path.","Fix consumer backpressure or pool policy rather than repeatedly terminating connections."],"zh":["先看 state 与事务年龄，再决定它是否算负载。","关联负责的应用、连接池与网络路径。","修复消费者背压或连接池策略，不要反复终止连接。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/libpq/be-secure-gssapi.c","line":461,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_GSS_OPEN_SERVER","excerpt":"port->sock, 0, WAIT_EVENT_GSS_OPEN_SERVER);","grep_pattern":"WAIT_EVENT_GSS_OPEN_SERVER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/libpq/be-secure-gssapi.c#L461"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":277,"kind":"catalog_definition","status":"live_trigger","symbol":"GSSOpenServer","excerpt":"event_name = \"GSSOpenServer\";","grep_pattern":"GSSOpenServer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L277"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/libpq/be-secure-gssapi.c","line":462,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_GSS_OPEN_SERVER","excerpt":"port->sock, 0, WAIT_EVENT_GSS_OPEN_SERVER);","grep_pattern":"WAIT_EVENT_GSS_OPEN_SERVER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/libpq/be-secure-gssapi.c#L462"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":87,"kind":"catalog_definition","status":"live_trigger","symbol":"GSS_OPEN_SERVER","excerpt":"GSS_OPEN_SERVER\t\"Waiting to read data from the client while establishing a GSSAPI session.\"","grep_pattern":"GSS_OPEN_SERVER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L87"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["max_connections","idle_in_transaction_session_timeout"],"metrics":["waiting_sessions","wait_event_share","active_backends"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"client-libpqwalreceiver-connect","type":"Client","name":"LibpqwalreceiverConnect","slug":"libpqwalreceiver-connect","url":"/client/libpqwalreceiver-connect/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"Client","name":"LibPQWalReceiverConnect","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting in WAL receiver to establish connection to remote server","18":"Waiting in WAL receiver to establish connection to remote server"},"official_description_zh":"在 WAL receiver 中等待与远程服务器建立连接。","mechanism":{"en":"`WAIT_EVENT_LIBPQWALRECEIVER_CONNECT` at `src/backend/replication/libpqwalreceiver/libpqwalreceiver.c:231` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:280`. The instrumented operation is: Waiting in WAL receiver to establish connection to remote server. The frontend protocol path reports LibpqwalreceiverConnect immediately before a socket, TLS/GSS, or replication-client operation blocks. PostgreSQL is waiting for the remote side or network to progress.","zh":"`WAIT_EVENT_LIBPQWALRECEIVER_CONNECT` 位于 `src/backend/replication/libpqwalreceiver/libpqwalreceiver.c:231`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:280`。探针覆盖的操作是：在 WAL receiver 中等待与远程服务器建立连接。前端协议路径在套接字、TLS/GSS 或复制客户端操作即将阻塞前报告 LibpqwalreceiverConnect；PostgreSQL 正在等待远端或网络推进。"},"normal":{"en":"Idle ClientRead sessions are normal connection-pool inventory.","zh":"空闲状态的 ClientRead 通常只是连接池存量。"},"trouble":{"en":"Investigate active writes, handshakes, old idle-in-transaction sessions, connection exhaustion, or replication-client stalls.","zh":"活动写入、握手、很老的 idle in transaction、连接耗尽或复制客户端停滞时需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Client/LibpqwalreceiverConnect","title_zh":"正在等待 Client/LibpqwalreceiverConnect 的会话","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 = 'Client'\n  AND wait_event = 'LibpqwalreceiverConnect'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Client cohort","title_zh":"当前 Client 等待分布","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 = 'Client'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Client'\n  AND a.wait_event = 'LibpqwalreceiverConnect'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Check state and transaction age before counting the wait as load.","Correlate with the owning application, pool, and network path.","Fix consumer backpressure or pool policy rather than repeatedly terminating connections."],"zh":["先看 state 与事务年龄，再决定它是否算负载。","关联负责的应用、连接池与网络路径。","修复消费者背压或连接池策略，不要反复终止连接。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/replication/libpqwalreceiver/libpqwalreceiver.c","line":231,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LIBPQWALRECEIVER_CONNECT","excerpt":"WAIT_EVENT_LIBPQWALRECEIVER_CONNECT);","grep_pattern":"WAIT_EVENT_LIBPQWALRECEIVER_CONNECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c#L231"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":280,"kind":"catalog_definition","status":"live_trigger","symbol":"LibPQWalReceiverConnect","excerpt":"event_name = \"LibPQWalReceiverConnect\";","grep_pattern":"LibPQWalReceiverConnect","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L280"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/libpqwalreceiver/libpqwalreceiver.c","line":228,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LIBPQWALRECEIVER_CONNECT","excerpt":"WAIT_EVENT_LIBPQWALRECEIVER_CONNECT);","grep_pattern":"WAIT_EVENT_LIBPQWALRECEIVER_CONNECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c#L228"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":88,"kind":"catalog_definition","status":"live_trigger","symbol":"LIBPQWALRECEIVER_CONNECT","excerpt":"LIBPQWALRECEIVER_CONNECT\t\"Waiting in WAL receiver to establish connection to remote server.\"","grep_pattern":"LIBPQWALRECEIVER_CONNECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L88"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit","max_connections","idle_in_transaction_session_timeout"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","active_backends"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"client-libpqwalreceiver-receive","type":"Client","name":"LibpqwalreceiverReceive","slug":"libpqwalreceiver-receive","url":"/client/libpqwalreceiver-receive/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"Client","name":"LibPQWalReceiverReceive","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting in WAL receiver to receive data from remote server","18":"Waiting in WAL receiver to receive data from remote server"},"official_description_zh":"在 WAL receiver 中等待从远程服务器接收数据。","mechanism":{"en":"`WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE` at `src/backend/replication/libpqwalreceiver/libpqwalreceiver.c:876` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:283`. The instrumented operation is: Waiting in WAL receiver to receive data from remote server. The frontend protocol path reports LibpqwalreceiverReceive immediately before a socket, TLS/GSS, or replication-client operation blocks. PostgreSQL is waiting for the remote side or network to progress.","zh":"`WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE` 位于 `src/backend/replication/libpqwalreceiver/libpqwalreceiver.c:876`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:283`。探针覆盖的操作是：在 WAL receiver 中等待从远程服务器接收数据。前端协议路径在套接字、TLS/GSS 或复制客户端操作即将阻塞前报告 LibpqwalreceiverReceive；PostgreSQL 正在等待远端或网络推进。"},"normal":{"en":"Idle ClientRead sessions are normal connection-pool inventory.","zh":"空闲状态的 ClientRead 通常只是连接池存量。"},"trouble":{"en":"Investigate active writes, handshakes, old idle-in-transaction sessions, connection exhaustion, or replication-client stalls.","zh":"活动写入、握手、很老的 idle in transaction、连接耗尽或复制客户端停滞时需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Client/LibpqwalreceiverReceive","title_zh":"正在等待 Client/LibpqwalreceiverReceive 的会话","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 = 'Client'\n  AND wait_event = 'LibpqwalreceiverReceive'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Client cohort","title_zh":"当前 Client 等待分布","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 = 'Client'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Client'\n  AND a.wait_event = 'LibpqwalreceiverReceive'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Check state and transaction age before counting the wait as load.","Correlate with the owning application, pool, and network path.","Fix consumer backpressure or pool policy rather than repeatedly terminating connections."],"zh":["先看 state 与事务年龄，再决定它是否算负载。","关联负责的应用、连接池与网络路径。","修复消费者背压或连接池策略，不要反复终止连接。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/replication/libpqwalreceiver/libpqwalreceiver.c","line":876,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE","excerpt":"WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE);","grep_pattern":"WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c#L876"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":283,"kind":"catalog_definition","status":"live_trigger","symbol":"LibPQWalReceiverReceive","excerpt":"event_name = \"LibPQWalReceiverReceive\";","grep_pattern":"LibPQWalReceiverReceive","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L283"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/libpqwalreceiver/libpqwalreceiver.c","line":258,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE","excerpt":"WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE);","grep_pattern":"WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c#L258"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":89,"kind":"catalog_definition","status":"live_trigger","symbol":"LIBPQWALRECEIVER_RECEIVE","excerpt":"LIBPQWALRECEIVER_RECEIVE\t\"Waiting in WAL receiver to receive data from remote server.\"","grep_pattern":"LIBPQWALRECEIVER_RECEIVE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L89"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit","max_connections","idle_in_transaction_session_timeout"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","active_backends"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"client-ssl-open-server","type":"Client","name":"SslOpenServer","slug":"ssl-open-server","url":"/client/ssl-open-server/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"Client","name":"SSLOpenServer","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for SSL while attempting connection","18":"Waiting for SSL while attempting connection"},"official_description_zh":"尝试建立连接时等待 SSL。","mechanism":{"en":"`WAIT_EVENT_SSL_OPEN_SERVER` at `src/backend/libpq/be-secure-openssl.c:508` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:286`. The instrumented operation is: Waiting for SSL while attempting connection. The frontend protocol path reports SslOpenServer immediately before a socket, TLS/GSS, or replication-client operation blocks. PostgreSQL is waiting for the remote side or network to progress.","zh":"`WAIT_EVENT_SSL_OPEN_SERVER` 位于 `src/backend/libpq/be-secure-openssl.c:508`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:286`。探针覆盖的操作是：尝试建立连接时等待 SSL。前端协议路径在套接字、TLS/GSS 或复制客户端操作即将阻塞前报告 SslOpenServer；PostgreSQL 正在等待远端或网络推进。"},"normal":{"en":"Idle ClientRead sessions are normal connection-pool inventory.","zh":"空闲状态的 ClientRead 通常只是连接池存量。"},"trouble":{"en":"Investigate active writes, handshakes, old idle-in-transaction sessions, connection exhaustion, or replication-client stalls.","zh":"活动写入、握手、很老的 idle in transaction、连接耗尽或复制客户端停滞时需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Client/SslOpenServer","title_zh":"正在等待 Client/SslOpenServer 的会话","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 = 'Client'\n  AND wait_event = 'SslOpenServer'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Client cohort","title_zh":"当前 Client 等待分布","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 = 'Client'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Client'\n  AND a.wait_event = 'SslOpenServer'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Check state and transaction age before counting the wait as load.","Correlate with the owning application, pool, and network path.","Fix consumer backpressure or pool policy rather than repeatedly terminating connections."],"zh":["先看 state 与事务年龄，再决定它是否算负载。","关联负责的应用、连接池与网络路径。","修复消费者背压或连接池策略，不要反复终止连接。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/libpq/be-secure-openssl.c","line":508,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SSL_OPEN_SERVER","excerpt":"WAIT_EVENT_SSL_OPEN_SERVER);","grep_pattern":"WAIT_EVENT_SSL_OPEN_SERVER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/libpq/be-secure-openssl.c#L508"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":286,"kind":"catalog_definition","status":"live_trigger","symbol":"SSLOpenServer","excerpt":"event_name = \"SSLOpenServer\";","grep_pattern":"SSLOpenServer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L286"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/libpq/be-secure-openssl.c","line":526,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SSL_OPEN_SERVER","excerpt":"WAIT_EVENT_SSL_OPEN_SERVER);","grep_pattern":"WAIT_EVENT_SSL_OPEN_SERVER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/libpq/be-secure-openssl.c#L526"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":90,"kind":"catalog_definition","status":"live_trigger","symbol":"SSL_OPEN_SERVER","excerpt":"SSL_OPEN_SERVER\t\"Waiting for SSL while attempting connection.\"","grep_pattern":"SSL_OPEN_SERVER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L90"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["max_connections","idle_in_transaction_session_timeout"],"metrics":["waiting_sessions","wait_event_share","active_backends"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"client-wait-for-standby-confirmation","type":"Client","name":"WaitForStandbyConfirmation","slug":"wait-for-standby-confirmation","url":"/client/wait-for-standby-confirmation/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting for WAL to be received and flushed by the physical standby","18":"Waiting for WAL to be received and flushed by the physical standby"},"official_description_zh":"等待物理备库接收并刷写 WAL。","mechanism":{"en":"`WAIT_EVENT_WAIT_FOR_STANDBY_CONFIRMATION` at `src/backend/replication/slot.c:3083` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:91`. The instrumented operation is: Waiting for WAL to be received and flushed by the physical standby. The frontend protocol path reports WaitForStandbyConfirmation immediately before a socket, TLS/GSS, or replication-client operation blocks. PostgreSQL is waiting for the remote side or network to progress.","zh":"`WAIT_EVENT_WAIT_FOR_STANDBY_CONFIRMATION` 位于 `src/backend/replication/slot.c:3083`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:91`。探针覆盖的操作是：等待物理备库接收并刷写 WAL。前端协议路径在套接字、TLS/GSS 或复制客户端操作即将阻塞前报告 WaitForStandbyConfirmation；PostgreSQL 正在等待远端或网络推进。"},"normal":{"en":"Idle ClientRead sessions are normal connection-pool inventory.","zh":"空闲状态的 ClientRead 通常只是连接池存量。"},"trouble":{"en":"Investigate active writes, handshakes, old idle-in-transaction sessions, connection exhaustion, or replication-client stalls.","zh":"活动写入、握手、很老的 idle in transaction、连接耗尽或复制客户端停滞时需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Client/WaitForStandbyConfirmation","title_zh":"正在等待 Client/WaitForStandbyConfirmation 的会话","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 = 'Client'\n  AND wait_event = 'WaitForStandbyConfirmation'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Client cohort","title_zh":"当前 Client 等待分布","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 = 'Client'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Client'\n  AND a.wait_event = 'WaitForStandbyConfirmation'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Check state and transaction age before counting the wait as load.","Correlate with the owning application, pool, and network path.","Fix consumer backpressure or pool policy rather than repeatedly terminating connections."],"zh":["先看 state 与事务年龄，再决定它是否算负载。","关联负责的应用、连接池与网络路径。","修复消费者背压或连接池策略，不要反复终止连接。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/slot.c","line":3083,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAIT_FOR_STANDBY_CONFIRMATION","excerpt":"WAIT_EVENT_WAIT_FOR_STANDBY_CONFIRMATION);","grep_pattern":"WAIT_EVENT_WAIT_FOR_STANDBY_CONFIRMATION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/slot.c#L3083"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":91,"kind":"catalog_definition","status":"live_trigger","symbol":"WAIT_FOR_STANDBY_CONFIRMATION","excerpt":"WAIT_FOR_STANDBY_CONFIRMATION\t\"Waiting for WAL to be received and flushed by the physical standby.\"","grep_pattern":"WAIT_FOR_STANDBY_CONFIRMATION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L91"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["max_connections","idle_in_transaction_session_timeout"],"metrics":["waiting_sessions","wait_event_share","active_backends"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"client-wal-sender-wait-for-wal","type":"Client","name":"WalSenderWaitForWal","slug":"wal-sender-wait-for-wal","url":"/client/wal-sender-wait-for-wal/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"Client","name":"WalSenderWaitForWAL","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for WAL to be flushed in WAL sender process","18":"Waiting for WAL to be flushed in WAL sender process"},"official_description_zh":"在 WAL sender 进程中等待 WAL 完成刷写。","mechanism":{"en":"`WAIT_EVENT_WAL_SENDER_WAIT_WAL` at `src/backend/replication/walsender.c:1714` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:289`. The instrumented operation is: Waiting for WAL to be flushed in WAL sender process. The frontend protocol path reports WalSenderWaitForWal immediately before a socket, TLS/GSS, or replication-client operation blocks. PostgreSQL is waiting for the remote side or network to progress.","zh":"`WAIT_EVENT_WAL_SENDER_WAIT_WAL` 位于 `src/backend/replication/walsender.c:1714`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:289`。探针覆盖的操作是：在 WAL sender 进程中等待 WAL 完成刷写。前端协议路径在套接字、TLS/GSS 或复制客户端操作即将阻塞前报告 WalSenderWaitForWal；PostgreSQL 正在等待远端或网络推进。"},"normal":{"en":"Idle ClientRead sessions are normal connection-pool inventory.","zh":"空闲状态的 ClientRead 通常只是连接池存量。"},"trouble":{"en":"Investigate active writes, handshakes, old idle-in-transaction sessions, connection exhaustion, or replication-client stalls.","zh":"活动写入、握手、很老的 idle in transaction、连接耗尽或复制客户端停滞时需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Client/WalSenderWaitForWal","title_zh":"正在等待 Client/WalSenderWaitForWal 的会话","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 = 'Client'\n  AND wait_event = 'WalSenderWaitForWal'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Client cohort","title_zh":"当前 Client 等待分布","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 = 'Client'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Client'\n  AND a.wait_event = 'WalSenderWaitForWal'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Check state and transaction age before counting the wait as load.","Correlate with the owning application, pool, and network path.","Fix consumer backpressure or pool policy rather than repeatedly terminating connections."],"zh":["先看 state 与事务年龄，再决定它是否算负载。","关联负责的应用、连接池与网络路径。","修复消费者背压或连接池策略，不要反复终止连接。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/replication/walsender.c","line":1714,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SENDER_WAIT_WAL","excerpt":"WalSndWait(wakeEvents, sleeptime, WAIT_EVENT_WAL_SENDER_WAIT_WAL);","grep_pattern":"WAIT_EVENT_WAL_SENDER_WAIT_WAL","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/replication/walsender.c#L1714"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":289,"kind":"catalog_definition","status":"live_trigger","symbol":"WalSenderWaitForWAL","excerpt":"event_name = \"WalSenderWaitForWAL\";","grep_pattern":"WalSenderWaitForWAL","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L289"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/walsender.c","line":1813,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SENDER_WAIT_FOR_WAL","excerpt":"*wait_event = WAIT_EVENT_WAL_SENDER_WAIT_FOR_WAL;","grep_pattern":"WAIT_EVENT_WAL_SENDER_WAIT_FOR_WAL","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/walsender.c#L1813"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":92,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_SENDER_WAIT_FOR_WAL","excerpt":"WAL_SENDER_WAIT_FOR_WAL\t\"Waiting for WAL to be flushed in WAL sender process.\"","grep_pattern":"WAL_SENDER_WAIT_FOR_WAL","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L92"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit","max_connections","idle_in_transaction_session_timeout"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","active_backends"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"client-wal-sender-write-data","type":"Client","name":"WalSenderWriteData","slug":"wal-sender-write-data","url":"/client/wal-sender-write-data/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for any activity when processing replies from WAL receiver in WAL sender process.","14":"Waiting for any activity when processing replies from WAL receiver in WAL sender process.","15":"Waiting for any activity when processing replies from WAL receiver in WAL sender process.","16":"Waiting for any activity when processing replies from WAL receiver in WAL sender process.","17":"Waiting for any activity when processing replies from WAL receiver in WAL sender process","18":"Waiting for any activity when processing replies from WAL receiver in WAL sender process"},"official_description_zh":"在 WAL sender 进程中处理 WAL receiver 的回复时，等待发生任何活动。","mechanism":{"en":"`WAIT_EVENT_WAL_SENDER_WRITE_DATA` at `src/backend/replication/walsender.c:1653` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:93`. The instrumented operation is: Waiting for any activity when processing replies from WAL receiver in WAL sender process. The frontend protocol path reports WalSenderWriteData immediately before a socket, TLS/GSS, or replication-client operation blocks. PostgreSQL is waiting for the remote side or network to progress.","zh":"`WAIT_EVENT_WAL_SENDER_WRITE_DATA` 位于 `src/backend/replication/walsender.c:1653`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:93`。探针覆盖的操作是：在 WAL sender 进程中处理 WAL receiver 的回复时，等待发生任何活动。前端协议路径在套接字、TLS/GSS 或复制客户端操作即将阻塞前报告 WalSenderWriteData；PostgreSQL 正在等待远端或网络推进。"},"normal":{"en":"Idle ClientRead sessions are normal connection-pool inventory.","zh":"空闲状态的 ClientRead 通常只是连接池存量。"},"trouble":{"en":"Investigate active writes, handshakes, old idle-in-transaction sessions, connection exhaustion, or replication-client stalls.","zh":"活动写入、握手、很老的 idle in transaction、连接耗尽或复制客户端停滞时需要调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Client/WalSenderWriteData","title_zh":"正在等待 Client/WalSenderWriteData 的会话","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 = 'Client'\n  AND wait_event = 'WalSenderWriteData'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Client cohort","title_zh":"当前 Client 等待分布","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 = 'Client'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Client'\n  AND a.wait_event = 'WalSenderWriteData'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Check state and transaction age before counting the wait as load.","Correlate with the owning application, pool, and network path.","Fix consumer backpressure or pool policy rather than repeatedly terminating connections."],"zh":["先看 state 与事务年龄，再决定它是否算负载。","关联负责的应用、连接池与网络路径。","修复消费者背压或连接池策略，不要反复终止连接。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/walsender.c","line":1653,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SENDER_WRITE_DATA","excerpt":"WAIT_EVENT_WAL_SENDER_WRITE_DATA);","grep_pattern":"WAIT_EVENT_WAL_SENDER_WRITE_DATA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/walsender.c#L1653"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":93,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_SENDER_WRITE_DATA","excerpt":"WAL_SENDER_WRITE_DATA\t\"Waiting for any activity when processing replies from WAL receiver in WAL sender process.\"","grep_pattern":"WAL_SENDER_WRITE_DATA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L93"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit","max_connections","idle_in_transaction_session_timeout"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","active_backends"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"mechanism_placeholder","id":"extension-extension","type":"Extension","name":"Extension","slug":"extension","url":"/extension/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting in an extension.","14":"Waiting in an extension.","15":"Waiting in an extension.","16":"Waiting in an extension.","17":"Waiting in an extension","18":"Waiting in an extension"},"official_description_zh":"在扩展代码中等待。","mechanism":{"en":"`PG_WAIT_EXTENSION` at `src/backend/utils/activity/wait_event.c:165` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:296`. The instrumented operation is: Waiting in an extension. Extension code registers or uses the Extension wait class and reports the wait around its own blocking operation. The exact resource and owner belong to the installed extension, not PostgreSQL core.","zh":"`PG_WAIT_EXTENSION` 位于 `src/backend/utils/activity/wait_event.c:165`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:296`。探针覆盖的操作是：在扩展代码中等待。扩展代码注册或使用 Extension 等待类别，并在自身阻塞操作周围报告等待。具体资源与责任方属于已安装扩展，而不是 PostgreSQL 核心。"},"normal":{"en":"Normality depends on the exact extension, version, and operation documented by its author.","zh":"是否正常取决于具体扩展、版本以及扩展作者说明的操作。"},"trouble":{"en":"Investigate when the custom name persists with service impact, or when the extension cannot explain which peer or resource makes progress.","zh":"自定义名称持续存在并影响服务，或扩展无法说明由哪个对端/资源推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Extension/Extension","title_zh":"正在等待 Extension/Extension 的会话","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 = 'Extension'\n  AND wait_event = 'Extension'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Extension cohort","title_zh":"当前 Extension 等待分布","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 = 'Extension'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Extension'\n  AND a.wait_event = 'Extension'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Record the extension name and exact extversion.","Query the local PG17+ pg_wait_events view for registered names.","Inspect the extension source and runbook for its paired wait start/end calls."],"zh":["记录扩展名称与精确 extversion。","在 PG17+ 本机 pg_wait_events 中查询已注册名称。","检查扩展源码与 runbook 中配对的 wait start/end 调用。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event.c","line":165,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_EXTENSION","excerpt":"return WaitEventCustomNew(PG_WAIT_EXTENSION, wait_event_name);","grep_pattern":"PG_WAIT_EXTENSION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event.c#L165"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":296,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"Extension","excerpt":"Extension\t\"Waiting in an extension.\"","grep_pattern":"Extension","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L296"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-aio-io-completion","type":"IO","name":"AioIoCompletion","slug":"aio-io-completion","url":"/io/aio-io-completion/","versions":[18],"version_range":"18","availability":{},"aliases":[],"official_descriptions":{"18":"Waiting for another process to complete IO"},"official_description_zh":"等待另一个进程完成 I/O。","mechanism":{"en":"`WAIT_EVENT_AIO_IO_COMPLETION` at `src/backend/storage/aio/aio.c:643` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:196`. The instrumented operation is: Waiting for another process to complete IO. PostgreSQL reports AioIoCompletion around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_AIO_IO_COMPLETION` 位于 `src/backend/storage/aio/aio.c:643`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:196`。探针覆盖的操作是：等待另一个进程完成 I/O。PostgreSQL 在 AioIoCompletion 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/AioIoCompletion","title_zh":"正在等待 IO/AioIoCompletion 的会话","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 = 'IO'\n  AND wait_event = 'AioIoCompletion'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'AioIoCompletion'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/aio/aio.c","line":643,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_AIO_IO_COMPLETION","excerpt":"ConditionVariableSleep(&ioh->cv, WAIT_EVENT_AIO_IO_COMPLETION);","grep_pattern":"WAIT_EVENT_AIO_IO_COMPLETION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/aio/aio.c#L643"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":196,"kind":"catalog_definition","status":"live_trigger","symbol":"AIO_IO_COMPLETION","excerpt":"AIO_IO_COMPLETION\t\"Waiting for another process to complete IO.\"","grep_pattern":"AIO_IO_COMPLETION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L196"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-aio-io-uring-execution","type":"IO","name":"AioIoUringExecution","slug":"aio-io-uring-execution","url":"/io/aio-io-uring-execution/","versions":[18],"version_range":"18","availability":{},"aliases":[],"official_descriptions":{"18":"Waiting for IO execution via io_uring"},"official_description_zh":"等待通过 io_uring 执行 I/O。","mechanism":{"en":"`WAIT_EVENT_AIO_IO_URING_EXECUTION` at `src/backend/storage/aio/method_io_uring.c:624` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:198`. The instrumented operation is: Waiting for IO execution via io_uring. PostgreSQL reports AioIoUringExecution around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_AIO_IO_URING_EXECUTION` 位于 `src/backend/storage/aio/method_io_uring.c:624`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:198`。探针覆盖的操作是：等待通过 io_uring 执行 I/O。PostgreSQL 在 AioIoUringExecution 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/AioIoUringExecution","title_zh":"正在等待 IO/AioIoUringExecution 的会话","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 = 'IO'\n  AND wait_event = 'AioIoUringExecution'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'AioIoUringExecution'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/aio/method_io_uring.c","line":624,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_AIO_IO_URING_EXECUTION","excerpt":"pgstat_report_wait_start(WAIT_EVENT_AIO_IO_URING_EXECUTION);","grep_pattern":"WAIT_EVENT_AIO_IO_URING_EXECUTION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/aio/method_io_uring.c#L624"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":198,"kind":"catalog_definition","status":"live_trigger","symbol":"AIO_IO_URING_EXECUTION","excerpt":"AIO_IO_URING_EXECUTION\t\"Waiting for IO execution via io_uring.\"","grep_pattern":"AIO_IO_URING_EXECUTION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L198"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-aio-io-uring-submit","type":"IO","name":"AioIoUringSubmit","slug":"aio-io-uring-submit","url":"/io/aio-io-uring-submit/","versions":[18],"version_range":"18","availability":{},"aliases":[],"official_descriptions":{"18":"Waiting for IO submission via io_uring"},"official_description_zh":"等待通过 io_uring 提交 I/O。","mechanism":{"en":"`WAIT_EVENT_AIO_IO_URING_SUBMIT` at `src/backend/storage/aio/method_io_uring.c:451` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:197`. The instrumented operation is: Waiting for IO submission via io_uring. PostgreSQL reports AioIoUringSubmit around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_AIO_IO_URING_SUBMIT` 位于 `src/backend/storage/aio/method_io_uring.c:451`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:197`。探针覆盖的操作是：等待通过 io_uring 提交 I/O。PostgreSQL 在 AioIoUringSubmit 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/AioIoUringSubmit","title_zh":"正在等待 IO/AioIoUringSubmit 的会话","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 = 'IO'\n  AND wait_event = 'AioIoUringSubmit'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'AioIoUringSubmit'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/aio/method_io_uring.c","line":451,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_AIO_IO_URING_SUBMIT","excerpt":"pgstat_report_wait_start(WAIT_EVENT_AIO_IO_URING_SUBMIT);","grep_pattern":"WAIT_EVENT_AIO_IO_URING_SUBMIT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/aio/method_io_uring.c#L451"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":197,"kind":"catalog_definition","status":"live_trigger","symbol":"AIO_IO_URING_SUBMIT","excerpt":"AIO_IO_URING_SUBMIT\t\"Waiting for IO submission via io_uring.\"","grep_pattern":"AIO_IO_URING_SUBMIT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L197"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-basebackup-read","type":"IO","name":"BasebackupRead","slug":"basebackup-read","url":"/io/basebackup-read/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"BaseBackupRead","versions":"14-16","version_list":[14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for base backup to read from a file","18":"Waiting for base backup to read from a file"},"official_description_zh":"等待基础备份从文件中读取数据。","mechanism":{"en":"`WAIT_EVENT_BASEBACKUP_READ` at `src/backend/backup/basebackup.c:1837` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:541`. The instrumented operation is: Waiting for base backup to read from a file. PostgreSQL reports BasebackupRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_BASEBACKUP_READ` 位于 `src/backend/backup/basebackup.c:1837`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:541`。探针覆盖的操作是：等待基础备份从文件中读取数据。PostgreSQL 在 BasebackupRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/BasebackupRead","title_zh":"正在等待 IO/BasebackupRead 的会话","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 = 'IO'\n  AND wait_event = 'BasebackupRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'BasebackupRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/backup/basebackup.c","line":1837,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BASEBACKUP_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_BASEBACKUP_READ);","grep_pattern":"WAIT_EVENT_BASEBACKUP_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/backup/basebackup.c#L1837"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":541,"kind":"catalog_definition","status":"live_trigger","symbol":"BaseBackupRead","excerpt":"event_name = \"BaseBackupRead\";","grep_pattern":"BaseBackupRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L541"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/backup/basebackup.c","line":2119,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BASEBACKUP_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_BASEBACKUP_READ);","grep_pattern":"WAIT_EVENT_BASEBACKUP_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/backup/basebackup.c#L2119"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":199,"kind":"catalog_definition","status":"live_trigger","symbol":"BASEBACKUP_READ","excerpt":"BASEBACKUP_READ\t\"Waiting for base backup to read from a file.\"","grep_pattern":"BASEBACKUP_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L199"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-basebackup-sync","type":"IO","name":"BasebackupSync","slug":"basebackup-sync","url":"/io/basebackup-sync/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"BaseBackupSync","versions":"15-16","version_list":[15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for data written by a base backup to reach durable storage","18":"Waiting for data written by a base backup to reach durable storage"},"official_description_zh":"等待基础备份写入的数据到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_BASEBACKUP_SYNC` at `src/backend/backup/basebackup_server.c:206` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:544`. The instrumented operation is: Waiting for data written by a base backup to reach durable storage. PostgreSQL reports BasebackupSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_BASEBACKUP_SYNC` 位于 `src/backend/backup/basebackup_server.c:206`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:544`。探针覆盖的操作是：等待基础备份写入的数据到达持久化存储。PostgreSQL 在 BasebackupSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/BasebackupSync","title_zh":"正在等待 IO/BasebackupSync 的会话","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 = 'IO'\n  AND wait_event = 'BasebackupSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'BasebackupSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/backup/basebackup_server.c","line":206,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BASEBACKUP_SYNC","excerpt":"if (FileSync(mysink->file, WAIT_EVENT_BASEBACKUP_SYNC) < 0)","grep_pattern":"WAIT_EVENT_BASEBACKUP_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/backup/basebackup_server.c#L206"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":544,"kind":"catalog_definition","status":"live_trigger","symbol":"BaseBackupSync","excerpt":"event_name = \"BaseBackupSync\";","grep_pattern":"BaseBackupSync","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L544"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/backup/basebackup_server.c","line":204,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BASEBACKUP_SYNC","excerpt":"if (FileSync(mysink->file, WAIT_EVENT_BASEBACKUP_SYNC) < 0)","grep_pattern":"WAIT_EVENT_BASEBACKUP_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/backup/basebackup_server.c#L204"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":200,"kind":"catalog_definition","status":"live_trigger","symbol":"BASEBACKUP_SYNC","excerpt":"BASEBACKUP_SYNC\t\"Waiting for data written by a base backup to reach durable storage.\"","grep_pattern":"BASEBACKUP_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L200"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-basebackup-write","type":"IO","name":"BasebackupWrite","slug":"basebackup-write","url":"/io/basebackup-write/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"BaseBackupWrite","versions":"15-16","version_list":[15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for base backup to write to a file","18":"Waiting for base backup to write to a file"},"official_description_zh":"等待基础备份向文件写入数据。","mechanism":{"en":"`WAIT_EVENT_BASEBACKUP_WRITE` at `src/backend/backup/basebackup_server.c:168` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:547`. The instrumented operation is: Waiting for base backup to write to a file. PostgreSQL reports BasebackupWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_BASEBACKUP_WRITE` 位于 `src/backend/backup/basebackup_server.c:168`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:547`。探针覆盖的操作是：等待基础备份向文件写入数据。PostgreSQL 在 BasebackupWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/BasebackupWrite","title_zh":"正在等待 IO/BasebackupWrite 的会话","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 = 'IO'\n  AND wait_event = 'BasebackupWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'BasebackupWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/backup/basebackup_server.c","line":168,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BASEBACKUP_WRITE","excerpt":"mysink->filepos, WAIT_EVENT_BASEBACKUP_WRITE);","grep_pattern":"WAIT_EVENT_BASEBACKUP_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/backup/basebackup_server.c#L168"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":547,"kind":"catalog_definition","status":"live_trigger","symbol":"BaseBackupWrite","excerpt":"event_name = \"BaseBackupWrite\";","grep_pattern":"BaseBackupWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L547"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/backup/basebackup_server.c","line":166,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BASEBACKUP_WRITE","excerpt":"mysink->filepos, WAIT_EVENT_BASEBACKUP_WRITE);","grep_pattern":"WAIT_EVENT_BASEBACKUP_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/backup/basebackup_server.c#L166"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":201,"kind":"catalog_definition","status":"live_trigger","symbol":"BASEBACKUP_WRITE","excerpt":"BASEBACKUP_WRITE\t\"Waiting for base backup to write to a file.\"","grep_pattern":"BASEBACKUP_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L201"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-buffile-read","type":"IO","name":"BuffileRead","slug":"buffile-read","url":"/io/buffile-read/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"BufFileRead","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a read from a buffered file","18":"Waiting for a read from a buffered file"},"official_description_zh":"等待从缓冲文件中读取数据。","mechanism":{"en":"`WAIT_EVENT_BUFFILE_READ` at `src/backend/storage/file/buffile.c:464` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:550`. The instrumented operation is: Waiting for a read from a buffered file. PostgreSQL reports BuffileRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_BUFFILE_READ` 位于 `src/backend/storage/file/buffile.c:464`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:550`。探针覆盖的操作是：等待从缓冲文件中读取数据。PostgreSQL 在 BuffileRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/BuffileRead","title_zh":"正在等待 IO/BuffileRead 的会话","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 = 'IO'\n  AND wait_event = 'BuffileRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'BuffileRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/storage/file/buffile.c","line":464,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BUFFILE_READ","excerpt":"WAIT_EVENT_BUFFILE_READ);","grep_pattern":"WAIT_EVENT_BUFFILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/storage/file/buffile.c#L464"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":550,"kind":"catalog_definition","status":"live_trigger","symbol":"BufFileRead","excerpt":"event_name = \"BufFileRead\";","grep_pattern":"BufFileRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L550"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/file/buffile.c","line":464,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BUFFILE_READ","excerpt":"WAIT_EVENT_BUFFILE_READ);","grep_pattern":"WAIT_EVENT_BUFFILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/file/buffile.c#L464"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":202,"kind":"catalog_definition","status":"live_trigger","symbol":"BUFFILE_READ","excerpt":"BUFFILE_READ\t\"Waiting for a read from a buffered file.\"","grep_pattern":"BUFFILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L202"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-buffile-truncate","type":"IO","name":"BuffileTruncate","slug":"buffile-truncate","url":"/io/buffile-truncate/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"BufFileTruncate","versions":"14-16","version_list":[14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a buffered file to be truncated","18":"Waiting for a buffered file to be truncated"},"official_description_zh":"等待截断缓冲文件。","mechanism":{"en":"`WAIT_EVENT_BUFFILE_TRUNCATE` at `src/backend/storage/file/buffile.c:989` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:556`. The instrumented operation is: Waiting for a buffered file to be truncated. PostgreSQL reports BuffileTruncate around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_BUFFILE_TRUNCATE` 位于 `src/backend/storage/file/buffile.c:989`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:556`。探针覆盖的操作是：等待截断缓冲文件。PostgreSQL 在 BuffileTruncate 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/BuffileTruncate","title_zh":"正在等待 IO/BuffileTruncate 的会话","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 = 'IO'\n  AND wait_event = 'BuffileTruncate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'BuffileTruncate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/storage/file/buffile.c","line":989,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BUFFILE_TRUNCATE","excerpt":"WAIT_EVENT_BUFFILE_TRUNCATE) < 0)","grep_pattern":"WAIT_EVENT_BUFFILE_TRUNCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/storage/file/buffile.c#L989"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":556,"kind":"catalog_definition","status":"live_trigger","symbol":"BufFileTruncate","excerpt":"event_name = \"BufFileTruncate\";","grep_pattern":"BufFileTruncate","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L556"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/file/buffile.c","line":966,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BUFFILE_TRUNCATE","excerpt":"WAIT_EVENT_BUFFILE_TRUNCATE) < 0)","grep_pattern":"WAIT_EVENT_BUFFILE_TRUNCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/file/buffile.c#L966"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":204,"kind":"catalog_definition","status":"live_trigger","symbol":"BUFFILE_TRUNCATE","excerpt":"BUFFILE_TRUNCATE\t\"Waiting for a buffered file to be truncated.\"","grep_pattern":"BUFFILE_TRUNCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L204"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-buffile-write","type":"IO","name":"BuffileWrite","slug":"buffile-write","url":"/io/buffile-write/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"BufFileWrite","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a write to a buffered file","18":"Waiting for a write to a buffered file"},"official_description_zh":"等待向缓冲文件写入数据。","mechanism":{"en":"`WAIT_EVENT_BUFFILE_WRITE` at `src/backend/storage/file/buffile.c:541` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:553`. The instrumented operation is: Waiting for a write to a buffered file. PostgreSQL reports BuffileWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_BUFFILE_WRITE` 位于 `src/backend/storage/file/buffile.c:541`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:553`。探针覆盖的操作是：等待向缓冲文件写入数据。PostgreSQL 在 BuffileWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/BuffileWrite","title_zh":"正在等待 IO/BuffileWrite 的会话","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 = 'IO'\n  AND wait_event = 'BuffileWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'BuffileWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/storage/file/buffile.c","line":541,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BUFFILE_WRITE","excerpt":"WAIT_EVENT_BUFFILE_WRITE);","grep_pattern":"WAIT_EVENT_BUFFILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/storage/file/buffile.c#L541"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":553,"kind":"catalog_definition","status":"live_trigger","symbol":"BufFileWrite","excerpt":"event_name = \"BufFileWrite\";","grep_pattern":"BufFileWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L553"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/file/buffile.c","line":541,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BUFFILE_WRITE","excerpt":"WAIT_EVENT_BUFFILE_WRITE);","grep_pattern":"WAIT_EVENT_BUFFILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/file/buffile.c#L541"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":203,"kind":"catalog_definition","status":"live_trigger","symbol":"BUFFILE_WRITE","excerpt":"BUFFILE_WRITE\t\"Waiting for a write to a buffered file.\"","grep_pattern":"BUFFILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L203"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-control-file-read","type":"IO","name":"ControlFileRead","slug":"control-file-read","url":"/io/control-file-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a read from the pg_control file.","14":"Waiting for a read from the pg_control file.","15":"Waiting for a read from the pg_control file.","16":"Waiting for a read from the pg_control file.","17":"Waiting for a read from the pg_control file","18":"Waiting for a read from the pg_control file"},"official_description_zh":"等待从 pg_control 文件中读取数据。","mechanism":{"en":"`WAIT_EVENT_CONTROL_FILE_READ` at `src/backend/access/transam/xlog.c:4362` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:205`. The instrumented operation is: Waiting for a read from the pg_control file. PostgreSQL reports ControlFileRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_CONTROL_FILE_READ` 位于 `src/backend/access/transam/xlog.c:4362`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:205`。探针覆盖的操作是：等待从 pg_control 文件中读取数据。PostgreSQL 在 ControlFileRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ControlFileRead","title_zh":"正在等待 IO/ControlFileRead 的会话","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 = 'IO'\n  AND wait_event = 'ControlFileRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ControlFileRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":4362,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CONTROL_FILE_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_CONTROL_FILE_READ);","grep_pattern":"WAIT_EVENT_CONTROL_FILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L4362"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":205,"kind":"catalog_definition","status":"live_trigger","symbol":"CONTROL_FILE_READ","excerpt":"CONTROL_FILE_READ\t\"Waiting for a read from the <filename>pg_control</filename> file.\"","grep_pattern":"CONTROL_FILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L205"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-control-file-sync","type":"IO","name":"ControlFileSync","slug":"control-file-sync","url":"/io/control-file-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for the pg_control file to reach durable storage.","14":"Waiting for the pg_control file to reach durable storage.","15":"Waiting for the pg_control file to reach durable storage.","16":"Waiting for the pg_control file to reach durable storage.","17":"Waiting for the pg_control file to reach durable storage","18":"Waiting for the pg_control file to reach durable storage"},"official_description_zh":"等待 pg_control 文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_CONTROL_FILE_SYNC` at `src/backend/access/transam/xlog.c:4328` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:206`. The instrumented operation is: Waiting for the pg_control file to reach durable storage. PostgreSQL reports ControlFileSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_CONTROL_FILE_SYNC` 位于 `src/backend/access/transam/xlog.c:4328`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:206`。探针覆盖的操作是：等待 pg_control 文件到达持久化存储。PostgreSQL 在 ControlFileSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ControlFileSync","title_zh":"正在等待 IO/ControlFileSync 的会话","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 = 'IO'\n  AND wait_event = 'ControlFileSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ControlFileSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":4328,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CONTROL_FILE_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_CONTROL_FILE_SYNC);","grep_pattern":"WAIT_EVENT_CONTROL_FILE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L4328"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":206,"kind":"catalog_definition","status":"live_trigger","symbol":"CONTROL_FILE_SYNC","excerpt":"CONTROL_FILE_SYNC\t\"Waiting for the <filename>pg_control</filename> file to reach durable storage.\"","grep_pattern":"CONTROL_FILE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L206"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-control-file-sync-update","type":"IO","name":"ControlFileSyncUpdate","slug":"control-file-sync-update","url":"/io/control-file-sync-update/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for an update to the pg_control file to reach durable storage.","14":"Waiting for an update to the pg_control file to reach durable storage.","15":"Waiting for an update to the pg_control file to reach durable storage.","16":"Waiting for an update to the pg_control file to reach durable storage.","17":"Waiting for an update to the pg_control file to reach durable storage","18":"Waiting for an update to the pg_control file to reach durable storage"},"official_description_zh":"等待 pg_control 文件的更新内容到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_CONTROL_FILE_SYNC_UPDATE` at `src/common/controldata_utils.c:259` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:207`. The instrumented operation is: Waiting for an update to the pg_control file to reach durable storage. PostgreSQL reports ControlFileSyncUpdate around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_CONTROL_FILE_SYNC_UPDATE` 位于 `src/common/controldata_utils.c:259`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:207`。探针覆盖的操作是：等待 pg_control 文件的更新内容到达持久化存储。PostgreSQL 在 ControlFileSyncUpdate 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ControlFileSyncUpdate","title_zh":"正在等待 IO/ControlFileSyncUpdate 的会话","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 = 'IO'\n  AND wait_event = 'ControlFileSyncUpdate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ControlFileSyncUpdate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":207,"kind":"catalog_definition","status":"live_trigger","symbol":"CONTROL_FILE_SYNC_UPDATE","excerpt":"CONTROL_FILE_SYNC_UPDATE\t\"Waiting for an update to the <filename>pg_control</filename> file to reach durable storage.\"","grep_pattern":"CONTROL_FILE_SYNC_UPDATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L207"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/common/controldata_utils.c","line":259,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CONTROL_FILE_SYNC_UPDATE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_CONTROL_FILE_SYNC_UPDATE);","grep_pattern":"WAIT_EVENT_CONTROL_FILE_SYNC_UPDATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/common/controldata_utils.c#L259"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-control-file-write","type":"IO","name":"ControlFileWrite","slug":"control-file-write","url":"/io/control-file-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write to the pg_control file.","14":"Waiting for a write to the pg_control file.","15":"Waiting for a write to the pg_control file.","16":"Waiting for a write to the pg_control file.","17":"Waiting for a write to the pg_control file","18":"Waiting for a write to the pg_control file"},"official_description_zh":"等待向 pg_control 文件写入数据。","mechanism":{"en":"`WAIT_EVENT_CONTROL_FILE_WRITE` at `src/backend/access/transam/xlog.c:4315` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:208`. The instrumented operation is: Waiting for a write to the pg_control file. PostgreSQL reports ControlFileWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_CONTROL_FILE_WRITE` 位于 `src/backend/access/transam/xlog.c:4315`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:208`。探针覆盖的操作是：等待向 pg_control 文件写入数据。PostgreSQL 在 ControlFileWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ControlFileWrite","title_zh":"正在等待 IO/ControlFileWrite 的会话","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 = 'IO'\n  AND wait_event = 'ControlFileWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ControlFileWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":4315,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CONTROL_FILE_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_CONTROL_FILE_WRITE);","grep_pattern":"WAIT_EVENT_CONTROL_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L4315"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":208,"kind":"catalog_definition","status":"live_trigger","symbol":"CONTROL_FILE_WRITE","excerpt":"CONTROL_FILE_WRITE\t\"Waiting for a write to the <filename>pg_control</filename> file.\"","grep_pattern":"CONTROL_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L208"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-control-file-write-update","type":"IO","name":"ControlFileWriteUpdate","slug":"control-file-write-update","url":"/io/control-file-write-update/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write to update the pg_control file.","14":"Waiting for a write to update the pg_control file.","15":"Waiting for a write to update the pg_control file.","16":"Waiting for a write to update the pg_control file.","17":"Waiting for a write to update the pg_control file","18":"Waiting for a write to update the pg_control file"},"official_description_zh":"等待通过写入来更新 pg_control 文件。","mechanism":{"en":"`WAIT_EVENT_CONTROL_FILE_WRITE_UPDATE` at `src/common/controldata_utils.c:235` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:209`. The instrumented operation is: Waiting for a write to update the pg_control file. PostgreSQL reports ControlFileWriteUpdate around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_CONTROL_FILE_WRITE_UPDATE` 位于 `src/common/controldata_utils.c:235`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:209`。探针覆盖的操作是：等待通过写入来更新 pg_control 文件。PostgreSQL 在 ControlFileWriteUpdate 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ControlFileWriteUpdate","title_zh":"正在等待 IO/ControlFileWriteUpdate 的会话","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 = 'IO'\n  AND wait_event = 'ControlFileWriteUpdate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ControlFileWriteUpdate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":209,"kind":"catalog_definition","status":"live_trigger","symbol":"CONTROL_FILE_WRITE_UPDATE","excerpt":"CONTROL_FILE_WRITE_UPDATE\t\"Waiting for a write to update the <filename>pg_control</filename> file.\"","grep_pattern":"CONTROL_FILE_WRITE_UPDATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L209"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/common/controldata_utils.c","line":235,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CONTROL_FILE_WRITE_UPDATE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_CONTROL_FILE_WRITE_UPDATE);","grep_pattern":"WAIT_EVENT_CONTROL_FILE_WRITE_UPDATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/common/controldata_utils.c#L235"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-copy-file-copy","type":"IO","name":"CopyFileCopy","slug":"copy-file-copy","url":"/io/copy-file-copy/","versions":[18],"version_range":"18","availability":{},"aliases":[],"official_descriptions":{"18":"Waiting for a file copy operation"},"official_description_zh":"等待文件复制操作完成。","mechanism":{"en":"`WAIT_EVENT_COPY_FILE_COPY` at `src/backend/storage/file/copydir.c:270` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:210`. The instrumented operation is: Waiting for a file copy operation. PostgreSQL reports CopyFileCopy around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_COPY_FILE_COPY` 位于 `src/backend/storage/file/copydir.c:270`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:210`。探针覆盖的操作是：等待文件复制操作完成。PostgreSQL 在 CopyFileCopy 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/CopyFileCopy","title_zh":"正在等待 IO/CopyFileCopy 的会话","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 = 'IO'\n  AND wait_event = 'CopyFileCopy'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'CopyFileCopy'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/file/copydir.c","line":270,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_COPY_FILE_COPY","excerpt":"pgstat_report_wait_start(WAIT_EVENT_COPY_FILE_COPY);","grep_pattern":"WAIT_EVENT_COPY_FILE_COPY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/file/copydir.c#L270"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":210,"kind":"catalog_definition","status":"live_trigger","symbol":"COPY_FILE_COPY","excerpt":"COPY_FILE_COPY\t\"Waiting for a file copy operation.\"","grep_pattern":"COPY_FILE_COPY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L210"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-copy-file-read","type":"IO","name":"CopyFileRead","slug":"copy-file-read","url":"/io/copy-file-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a read during a file copy operation.","14":"Waiting for a read during a file copy operation.","15":"Waiting for a read during a file copy operation.","16":"Waiting for a read during a file copy operation.","17":"Waiting for a read during a file copy operation","18":"Waiting for a read during a file copy operation"},"official_description_zh":"等待在文件复制操作期间读取数据。","mechanism":{"en":"`WAIT_EVENT_COPY_FILE_READ` at `src/backend/storage/file/copydir.c:195` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:211`. The instrumented operation is: Waiting for a read during a file copy operation. PostgreSQL reports CopyFileRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_COPY_FILE_READ` 位于 `src/backend/storage/file/copydir.c:195`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:211`。探针覆盖的操作是：等待在文件复制操作期间读取数据。PostgreSQL 在 CopyFileRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/CopyFileRead","title_zh":"正在等待 IO/CopyFileRead 的会话","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 = 'IO'\n  AND wait_event = 'CopyFileRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'CopyFileRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/file/copydir.c","line":195,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_COPY_FILE_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_COPY_FILE_READ);","grep_pattern":"WAIT_EVENT_COPY_FILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/file/copydir.c#L195"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":211,"kind":"catalog_definition","status":"live_trigger","symbol":"COPY_FILE_READ","excerpt":"COPY_FILE_READ\t\"Waiting for a read during a file copy operation.\"","grep_pattern":"COPY_FILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L211"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-copy-file-write","type":"IO","name":"CopyFileWrite","slug":"copy-file-write","url":"/io/copy-file-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write during a file copy operation.","14":"Waiting for a write during a file copy operation.","15":"Waiting for a write during a file copy operation.","16":"Waiting for a write during a file copy operation.","17":"Waiting for a write during a file copy operation","18":"Waiting for a write during a file copy operation"},"official_description_zh":"等待在文件复制操作期间写入数据。","mechanism":{"en":"`WAIT_EVENT_COPY_FILE_WRITE` at `src/backend/storage/file/copydir.c:205` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:212`. The instrumented operation is: Waiting for a write during a file copy operation. PostgreSQL reports CopyFileWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_COPY_FILE_WRITE` 位于 `src/backend/storage/file/copydir.c:205`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:212`。探针覆盖的操作是：等待在文件复制操作期间写入数据。PostgreSQL 在 CopyFileWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/CopyFileWrite","title_zh":"正在等待 IO/CopyFileWrite 的会话","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 = 'IO'\n  AND wait_event = 'CopyFileWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'CopyFileWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/file/copydir.c","line":205,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_COPY_FILE_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_COPY_FILE_WRITE);","grep_pattern":"WAIT_EVENT_COPY_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/file/copydir.c#L205"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":212,"kind":"catalog_definition","status":"live_trigger","symbol":"COPY_FILE_WRITE","excerpt":"COPY_FILE_WRITE\t\"Waiting for a write during a file copy operation.\"","grep_pattern":"COPY_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L212"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-data-file-extend","type":"IO","name":"DataFileExtend","slug":"data-file-extend","url":"/io/data-file-extend/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a relation data file to be extended.","14":"Waiting for a relation data file to be extended.","15":"Waiting for a relation data file to be extended.","16":"Waiting for a relation data file to be extended.","17":"Waiting for a relation data file to be extended","18":"Waiting for a relation data file to be extended"},"official_description_zh":"等待扩展 relation 数据文件。","mechanism":{"en":"`WAIT_EVENT_DATA_FILE_EXTEND` at `src/backend/storage/smgr/md.c:512` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:213`. The instrumented operation is: Waiting for a relation data file to be extended. PostgreSQL reports DataFileExtend around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_DATA_FILE_EXTEND` 位于 `src/backend/storage/smgr/md.c:512`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:213`。探针覆盖的操作是：等待扩展 relation 数据文件。PostgreSQL 在 DataFileExtend 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/DataFileExtend","title_zh":"正在等待 IO/DataFileExtend 的会话","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 = 'IO'\n  AND wait_event = 'DataFileExtend'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'DataFileExtend'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/smgr/md.c","line":512,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DATA_FILE_EXTEND","excerpt":"if ((nbytes = FileWrite(v->mdfd_vfd, buffer, BLCKSZ, seekpos, WAIT_EVENT_DATA_FILE_EXTEND)) != BLCKSZ)","grep_pattern":"WAIT_EVENT_DATA_FILE_EXTEND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/smgr/md.c#L512"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":213,"kind":"catalog_definition","status":"live_trigger","symbol":"DATA_FILE_EXTEND","excerpt":"DATA_FILE_EXTEND\t\"Waiting for a relation data file to be extended.\"","grep_pattern":"DATA_FILE_EXTEND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L213"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-data-file-flush","type":"IO","name":"DataFileFlush","slug":"data-file-flush","url":"/io/data-file-flush/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a relation data file to reach durable storage.","14":"Waiting for a relation data file to reach durable storage.","15":"Waiting for a relation data file to reach durable storage.","16":"Waiting for a relation data file to reach durable storage.","17":"Waiting for a relation data file to reach durable storage","18":"Waiting for a relation data file to reach durable storage"},"official_description_zh":"等待 relation 数据文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_DATA_FILE_FLUSH` at `src/backend/storage/smgr/md.c:1208` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:214`. The instrumented operation is: Waiting for a relation data file to reach durable storage. PostgreSQL reports DataFileFlush around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_DATA_FILE_FLUSH` 位于 `src/backend/storage/smgr/md.c:1208`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:214`。探针覆盖的操作是：等待 relation 数据文件到达持久化存储。PostgreSQL 在 DataFileFlush 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/DataFileFlush","title_zh":"正在等待 IO/DataFileFlush 的会话","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 = 'IO'\n  AND wait_event = 'DataFileFlush'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'DataFileFlush'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/smgr/md.c","line":1208,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DATA_FILE_FLUSH","excerpt":"FileWriteback(v->mdfd_vfd, seekpos, (off_t) BLCKSZ * nflush, WAIT_EVENT_DATA_FILE_FLUSH);","grep_pattern":"WAIT_EVENT_DATA_FILE_FLUSH","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/smgr/md.c#L1208"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":214,"kind":"catalog_definition","status":"live_trigger","symbol":"DATA_FILE_FLUSH","excerpt":"DATA_FILE_FLUSH\t\"Waiting for a relation data file to reach durable storage.\"","grep_pattern":"DATA_FILE_FLUSH","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L214"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-data-file-immediate-sync","type":"IO","name":"DataFileImmediateSync","slug":"data-file-immediate-sync","url":"/io/data-file-immediate-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for an immediate synchronization of a relation data file to durable storage.","14":"Waiting for an immediate synchronization of a relation data file to durable storage.","15":"Waiting for an immediate synchronization of a relation data file to durable storage.","16":"Waiting for an immediate synchronization of a relation data file to durable storage.","17":"Waiting for an immediate synchronization of a relation data file to durable storage","18":"Waiting for an immediate synchronization of a relation data file to durable storage"},"official_description_zh":"等待将 relation 数据文件立即同步到持久化存储。","mechanism":{"en":"`WAIT_EVENT_DATA_FILE_IMMEDIATE_SYNC` at `src/backend/storage/smgr/md.c:1466` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:215`. The instrumented operation is: Waiting for an immediate synchronization of a relation data file to durable storage. PostgreSQL reports DataFileImmediateSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_DATA_FILE_IMMEDIATE_SYNC` 位于 `src/backend/storage/smgr/md.c:1466`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:215`。探针覆盖的操作是：等待将 relation 数据文件立即同步到持久化存储。PostgreSQL 在 DataFileImmediateSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/DataFileImmediateSync","title_zh":"正在等待 IO/DataFileImmediateSync 的会话","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 = 'IO'\n  AND wait_event = 'DataFileImmediateSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'DataFileImmediateSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/smgr/md.c","line":1466,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DATA_FILE_IMMEDIATE_SYNC","excerpt":"if (FileSync(v->mdfd_vfd, WAIT_EVENT_DATA_FILE_IMMEDIATE_SYNC) < 0)","grep_pattern":"WAIT_EVENT_DATA_FILE_IMMEDIATE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/smgr/md.c#L1466"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":215,"kind":"catalog_definition","status":"live_trigger","symbol":"DATA_FILE_IMMEDIATE_SYNC","excerpt":"DATA_FILE_IMMEDIATE_SYNC\t\"Waiting for an immediate synchronization of a relation data file to durable storage.\"","grep_pattern":"DATA_FILE_IMMEDIATE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L215"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-data-file-prefetch","type":"IO","name":"DataFilePrefetch","slug":"data-file-prefetch","url":"/io/data-file-prefetch/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for an asynchronous prefetch from a relation data file.","14":"Waiting for an asynchronous prefetch from a relation data file.","15":"Waiting for an asynchronous prefetch from a relation data file.","16":"Waiting for an asynchronous prefetch from a relation data file.","17":"Waiting for an asynchronous prefetch from a relation data file","18":"Waiting for an asynchronous prefetch from a relation data file"},"official_description_zh":"等待从 relation 数据文件异步预取数据。","mechanism":{"en":"`WAIT_EVENT_DATA_FILE_PREFETCH` at `src/backend/storage/smgr/md.c:767` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:216`. The instrumented operation is: Waiting for an asynchronous prefetch from a relation data file. PostgreSQL reports DataFilePrefetch around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_DATA_FILE_PREFETCH` 位于 `src/backend/storage/smgr/md.c:767`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:216`。探针覆盖的操作是：等待从 relation 数据文件异步预取数据。PostgreSQL 在 DataFilePrefetch 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/DataFilePrefetch","title_zh":"正在等待 IO/DataFilePrefetch 的会话","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 = 'IO'\n  AND wait_event = 'DataFilePrefetch'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'DataFilePrefetch'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/smgr/md.c","line":767,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DATA_FILE_PREFETCH","excerpt":"WAIT_EVENT_DATA_FILE_PREFETCH);","grep_pattern":"WAIT_EVENT_DATA_FILE_PREFETCH","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/smgr/md.c#L767"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":216,"kind":"catalog_definition","status":"live_trigger","symbol":"DATA_FILE_PREFETCH","excerpt":"DATA_FILE_PREFETCH\t\"Waiting for an asynchronous prefetch from a relation data file.\"","grep_pattern":"DATA_FILE_PREFETCH","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L216"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-data-file-read","type":"IO","name":"DataFileRead","slug":"data-file-read","url":"/io/data-file-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a read from a relation data file.","14":"Waiting for a read from a relation data file.","15":"Waiting for a read from a relation data file.","16":"Waiting for a read from a relation data file.","17":"Waiting for a read from a relation data file","18":"Waiting for a read from a relation data file"},"official_description_zh":"等待从 relation 数据文件中读取数据。","mechanism":{"en":"`WAIT_EVENT_DATA_FILE_READ` at `src/backend/storage/aio/aio_io.c:127` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:217`. The instrumented operation is: Waiting for a read from a relation data file. PostgreSQL reports DataFileRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_DATA_FILE_READ` 位于 `src/backend/storage/aio/aio_io.c:127`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:217`。探针覆盖的操作是：等待从 relation 数据文件中读取数据。PostgreSQL 在 DataFileRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/DataFileRead","title_zh":"正在等待 IO/DataFileRead 的会话","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 = 'IO'\n  AND wait_event = 'DataFileRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'DataFileRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/aio/aio_io.c","line":127,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DATA_FILE_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_DATA_FILE_READ);","grep_pattern":"WAIT_EVENT_DATA_FILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/aio/aio_io.c#L127"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":217,"kind":"catalog_definition","status":"live_trigger","symbol":"DATA_FILE_READ","excerpt":"DATA_FILE_READ\t\"Waiting for a read from a relation data file.\"","grep_pattern":"DATA_FILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L217"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-data-file-sync","type":"IO","name":"DataFileSync","slug":"data-file-sync","url":"/io/data-file-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for changes to a relation data file to reach durable storage.","14":"Waiting for changes to a relation data file to reach durable storage.","15":"Waiting for changes to a relation data file to reach durable storage.","16":"Waiting for changes to a relation data file to reach durable storage.","17":"Waiting for changes to a relation data file to reach durable storage","18":"Waiting for changes to a relation data file to reach durable storage"},"official_description_zh":"等待 relation 数据文件的变更到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_DATA_FILE_SYNC` at `src/backend/storage/smgr/md.c:1526` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:218`. The instrumented operation is: Waiting for changes to a relation data file to reach durable storage. PostgreSQL reports DataFileSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_DATA_FILE_SYNC` 位于 `src/backend/storage/smgr/md.c:1526`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:218`。探针覆盖的操作是：等待 relation 数据文件的变更到达持久化存储。PostgreSQL 在 DataFileSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/DataFileSync","title_zh":"正在等待 IO/DataFileSync 的会话","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 = 'IO'\n  AND wait_event = 'DataFileSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'DataFileSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/smgr/md.c","line":1526,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DATA_FILE_SYNC","excerpt":"if (FileSync(seg->mdfd_vfd, WAIT_EVENT_DATA_FILE_SYNC) < 0)","grep_pattern":"WAIT_EVENT_DATA_FILE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/smgr/md.c#L1526"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":218,"kind":"catalog_definition","status":"live_trigger","symbol":"DATA_FILE_SYNC","excerpt":"DATA_FILE_SYNC\t\"Waiting for changes to a relation data file to reach durable storage.\"","grep_pattern":"DATA_FILE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L218"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-data-file-truncate","type":"IO","name":"DataFileTruncate","slug":"data-file-truncate","url":"/io/data-file-truncate/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a relation data file to be truncated.","14":"Waiting for a relation data file to be truncated.","15":"Waiting for a relation data file to be truncated.","16":"Waiting for a relation data file to be truncated.","17":"Waiting for a relation data file to be truncated","18":"Waiting for a relation data file to be truncated"},"official_description_zh":"等待截断 relation 数据文件。","mechanism":{"en":"`WAIT_EVENT_DATA_FILE_TRUNCATE` at `src/backend/storage/smgr/md.c:1329` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:219`. The instrumented operation is: Waiting for a relation data file to be truncated. PostgreSQL reports DataFileTruncate around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_DATA_FILE_TRUNCATE` 位于 `src/backend/storage/smgr/md.c:1329`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:219`。探针覆盖的操作是：等待截断 relation 数据文件。PostgreSQL 在 DataFileTruncate 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/DataFileTruncate","title_zh":"正在等待 IO/DataFileTruncate 的会话","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 = 'IO'\n  AND wait_event = 'DataFileTruncate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'DataFileTruncate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/smgr/md.c","line":1329,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DATA_FILE_TRUNCATE","excerpt":"if (FileTruncate(v->mdfd_vfd, 0, WAIT_EVENT_DATA_FILE_TRUNCATE) < 0)","grep_pattern":"WAIT_EVENT_DATA_FILE_TRUNCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/smgr/md.c#L1329"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":219,"kind":"catalog_definition","status":"live_trigger","symbol":"DATA_FILE_TRUNCATE","excerpt":"DATA_FILE_TRUNCATE\t\"Waiting for a relation data file to be truncated.\"","grep_pattern":"DATA_FILE_TRUNCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L219"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-data-file-write","type":"IO","name":"DataFileWrite","slug":"data-file-write","url":"/io/data-file-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write to a relation data file.","14":"Waiting for a write to a relation data file.","15":"Waiting for a write to a relation data file.","16":"Waiting for a write to a relation data file.","17":"Waiting for a write to a relation data file","18":"Waiting for a write to a relation data file"},"official_description_zh":"等待向 relation 数据文件写入数据。","mechanism":{"en":"`WAIT_EVENT_DATA_FILE_WRITE` at `src/backend/storage/aio/aio_io.c:134` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:220`. The instrumented operation is: Waiting for a write to a relation data file. PostgreSQL reports DataFileWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_DATA_FILE_WRITE` 位于 `src/backend/storage/aio/aio_io.c:134`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:220`。探针覆盖的操作是：等待向 relation 数据文件写入数据。PostgreSQL 在 DataFileWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/DataFileWrite","title_zh":"正在等待 IO/DataFileWrite 的会话","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 = 'IO'\n  AND wait_event = 'DataFileWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'DataFileWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/aio/aio_io.c","line":134,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DATA_FILE_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_DATA_FILE_WRITE);","grep_pattern":"WAIT_EVENT_DATA_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/aio/aio_io.c#L134"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":220,"kind":"catalog_definition","status":"live_trigger","symbol":"DATA_FILE_WRITE","excerpt":"DATA_FILE_WRITE\t\"Waiting for a write to a relation data file.\"","grep_pattern":"DATA_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L220"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-dsm-allocate","type":"IO","name":"DsmAllocate","slug":"dsm-allocate","url":"/io/dsm-allocate/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"DSMAllocate","versions":"16","version_list":[16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a dynamic shared memory segment to be allocated","18":"Waiting for a dynamic shared memory segment to be allocated"},"official_description_zh":"等待分配动态共享内存段。","mechanism":{"en":"`WAIT_EVENT_DSM_ALLOCATE` at `src/backend/storage/ipc/dsm_impl.c:366` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:604`. The instrumented operation is: Waiting for a dynamic shared memory segment to be allocated. PostgreSQL reports DsmAllocate around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_DSM_ALLOCATE` 位于 `src/backend/storage/ipc/dsm_impl.c:366`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:604`。探针覆盖的操作是：等待分配动态共享内存段。PostgreSQL 在 DsmAllocate 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/DsmAllocate","title_zh":"正在等待 IO/DsmAllocate 的会话","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 = 'IO'\n  AND wait_event = 'DsmAllocate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'DsmAllocate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/storage/ipc/dsm_impl.c","line":366,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DSM_ALLOCATE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_DSM_ALLOCATE);","grep_pattern":"WAIT_EVENT_DSM_ALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/storage/ipc/dsm_impl.c#L366"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":604,"kind":"catalog_definition","status":"live_trigger","symbol":"DSMAllocate","excerpt":"event_name = \"DSMAllocate\";","grep_pattern":"DSMAllocate","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L604"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/dsm_impl.c","line":366,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DSM_ALLOCATE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_DSM_ALLOCATE);","grep_pattern":"WAIT_EVENT_DSM_ALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/dsm_impl.c#L366"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":221,"kind":"catalog_definition","status":"live_trigger","symbol":"DSM_ALLOCATE","excerpt":"DSM_ALLOCATE\t\"Waiting for a dynamic shared memory segment to be allocated.\"","grep_pattern":"DSM_ALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L221"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-dsm-fill-zero-write","type":"IO","name":"DsmFillZeroWrite","slug":"dsm-fill-zero-write","url":"/io/dsm-fill-zero-write/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"DSMFillZeroWrite","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting to fill a dynamic shared memory backing file with zeroes","18":"Waiting to fill a dynamic shared memory backing file with zeroes"},"official_description_zh":"等待用零值填充动态共享内存的后备文件。","mechanism":{"en":"`WAIT_EVENT_DSM_FILL_ZERO_WRITE` at `src/backend/storage/ipc/dsm_impl.c:891` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:607`. The instrumented operation is: Waiting to fill a dynamic shared memory backing file with zeroes. PostgreSQL reports DsmFillZeroWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_DSM_FILL_ZERO_WRITE` 位于 `src/backend/storage/ipc/dsm_impl.c:891`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:607`。探针覆盖的操作是：等待用零值填充动态共享内存的后备文件。PostgreSQL 在 DsmFillZeroWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/DsmFillZeroWrite","title_zh":"正在等待 IO/DsmFillZeroWrite 的会话","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 = 'IO'\n  AND wait_event = 'DsmFillZeroWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'DsmFillZeroWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/storage/ipc/dsm_impl.c","line":891,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DSM_FILL_ZERO_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_DSM_FILL_ZERO_WRITE);","grep_pattern":"WAIT_EVENT_DSM_FILL_ZERO_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/storage/ipc/dsm_impl.c#L891"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":607,"kind":"catalog_definition","status":"live_trigger","symbol":"DSMFillZeroWrite","excerpt":"event_name = \"DSMFillZeroWrite\";","grep_pattern":"DSMFillZeroWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L607"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/dsm_impl.c","line":891,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_DSM_FILL_ZERO_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_DSM_FILL_ZERO_WRITE);","grep_pattern":"WAIT_EVENT_DSM_FILL_ZERO_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/dsm_impl.c#L891"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":222,"kind":"catalog_definition","status":"live_trigger","symbol":"DSM_FILL_ZERO_WRITE","excerpt":"DSM_FILL_ZERO_WRITE\t\"Waiting to fill a dynamic shared memory backing file with zeroes.\"","grep_pattern":"DSM_FILL_ZERO_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L222"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-lock-file-addtodatadir-read","type":"IO","name":"LockFileAddtodatadirRead","slug":"lock-file-addtodatadir-read","url":"/io/lock-file-addtodatadir-read/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"LockFileAddToDataDirRead","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a read while adding a line to the data directory lock file","18":"Waiting for a read while adding a line to the data directory lock file"},"official_description_zh":"等待在向数据目录锁文件添加一行时读取数据。","mechanism":{"en":"`WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ` at `src/backend/utils/init/miscinit.c:1586` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:610`. The instrumented operation is: Waiting for a read while adding a line to the data directory lock file. PostgreSQL reports LockFileAddtodatadirRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ` 位于 `src/backend/utils/init/miscinit.c:1586`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:610`。探针覆盖的操作是：等待在向数据目录锁文件添加一行时读取数据。PostgreSQL 在 LockFileAddtodatadirRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LockFileAddtodatadirRead","title_zh":"正在等待 IO/LockFileAddtodatadirRead 的会话","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 = 'IO'\n  AND wait_event = 'LockFileAddtodatadirRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LockFileAddtodatadirRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":610,"kind":"catalog_definition","status":"live_trigger","symbol":"LockFileAddToDataDirRead","excerpt":"event_name = \"LockFileAddToDataDirRead\";","grep_pattern":"LockFileAddToDataDirRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L610"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/init/miscinit.c","line":1586,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ);","grep_pattern":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/init/miscinit.c#L1586"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":223,"kind":"catalog_definition","status":"live_trigger","symbol":"LOCK_FILE_ADDTODATADIR_READ","excerpt":"LOCK_FILE_ADDTODATADIR_READ\t\"Waiting for a read while adding a line to the data directory lock file.\"","grep_pattern":"LOCK_FILE_ADDTODATADIR_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L223"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/init/miscinit.c","line":1590,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ);","grep_pattern":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/init/miscinit.c#L1590"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-lock-file-addtodatadir-sync","type":"IO","name":"LockFileAddtodatadirSync","slug":"lock-file-addtodatadir-sync","url":"/io/lock-file-addtodatadir-sync/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"LockFileAddToDataDirSync","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for data to reach durable storage while adding a line to the data directory lock file","18":"Waiting for data to reach durable storage while adding a line to the data directory lock file"},"official_description_zh":"等待向数据目录锁文件添加一行时写入的数据到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC` at `src/backend/utils/init/miscinit.c:1663` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:613`. The instrumented operation is: Waiting for data to reach durable storage while adding a line to the data directory lock file. PostgreSQL reports LockFileAddtodatadirSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC` 位于 `src/backend/utils/init/miscinit.c:1663`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:613`。探针覆盖的操作是：等待向数据目录锁文件添加一行时写入的数据到达持久化存储。PostgreSQL 在 LockFileAddtodatadirSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LockFileAddtodatadirSync","title_zh":"正在等待 IO/LockFileAddtodatadirSync 的会话","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 = 'IO'\n  AND wait_event = 'LockFileAddtodatadirSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LockFileAddtodatadirSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":613,"kind":"catalog_definition","status":"live_trigger","symbol":"LockFileAddToDataDirSync","excerpt":"event_name = \"LockFileAddToDataDirSync\";","grep_pattern":"LockFileAddToDataDirSync","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L613"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/init/miscinit.c","line":1663,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC);","grep_pattern":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/init/miscinit.c#L1663"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":224,"kind":"catalog_definition","status":"live_trigger","symbol":"LOCK_FILE_ADDTODATADIR_SYNC","excerpt":"LOCK_FILE_ADDTODATADIR_SYNC\t\"Waiting for data to reach durable storage while adding a line to the data directory lock file.\"","grep_pattern":"LOCK_FILE_ADDTODATADIR_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L224"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/init/miscinit.c","line":1667,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC);","grep_pattern":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/init/miscinit.c#L1667"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-lock-file-addtodatadir-write","type":"IO","name":"LockFileAddtodatadirWrite","slug":"lock-file-addtodatadir-write","url":"/io/lock-file-addtodatadir-write/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"LockFileAddToDataDirWrite","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a write while adding a line to the data directory lock file","18":"Waiting for a write while adding a line to the data directory lock file"},"official_description_zh":"等待在向数据目录锁文件添加一行时写入数据。","mechanism":{"en":"`WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE` at `src/backend/utils/init/miscinit.c:1648` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:616`. The instrumented operation is: Waiting for a write while adding a line to the data directory lock file. PostgreSQL reports LockFileAddtodatadirWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE` 位于 `src/backend/utils/init/miscinit.c:1648`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:616`。探针覆盖的操作是：等待在向数据目录锁文件添加一行时写入数据。PostgreSQL 在 LockFileAddtodatadirWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LockFileAddtodatadirWrite","title_zh":"正在等待 IO/LockFileAddtodatadirWrite 的会话","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 = 'IO'\n  AND wait_event = 'LockFileAddtodatadirWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LockFileAddtodatadirWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":616,"kind":"catalog_definition","status":"live_trigger","symbol":"LockFileAddToDataDirWrite","excerpt":"event_name = \"LockFileAddToDataDirWrite\";","grep_pattern":"LockFileAddToDataDirWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L616"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/init/miscinit.c","line":1648,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE);","grep_pattern":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/init/miscinit.c#L1648"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":225,"kind":"catalog_definition","status":"live_trigger","symbol":"LOCK_FILE_ADDTODATADIR_WRITE","excerpt":"LOCK_FILE_ADDTODATADIR_WRITE\t\"Waiting for a write while adding a line to the data directory lock file.\"","grep_pattern":"LOCK_FILE_ADDTODATADIR_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L225"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/init/miscinit.c","line":1652,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE);","grep_pattern":"WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/init/miscinit.c#L1652"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-lock-file-create-read","type":"IO","name":"LockFileCreateRead","slug":"lock-file-create-read","url":"/io/lock-file-create-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read while creating the data directory lock file.","14":"Waiting to read while creating the data directory lock file.","15":"Waiting to read while creating the data directory lock file.","16":"Waiting to read while creating the data directory lock file.","17":"Waiting to read while creating the data directory lock file","18":"Waiting to read while creating the data directory lock file"},"official_description_zh":"等待在创建数据目录锁文件时读取数据。","mechanism":{"en":"`WAIT_EVENT_LOCK_FILE_CREATE_READ` at `src/backend/utils/init/miscinit.c:1302` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:226`. The instrumented operation is: Waiting to read while creating the data directory lock file. PostgreSQL reports LockFileCreateRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOCK_FILE_CREATE_READ` 位于 `src/backend/utils/init/miscinit.c:1302`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:226`。探针覆盖的操作是：等待在创建数据目录锁文件时读取数据。PostgreSQL 在 LockFileCreateRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LockFileCreateRead","title_zh":"正在等待 IO/LockFileCreateRead 的会话","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 = 'IO'\n  AND wait_event = 'LockFileCreateRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LockFileCreateRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":226,"kind":"catalog_definition","status":"live_trigger","symbol":"LOCK_FILE_CREATE_READ","excerpt":"LOCK_FILE_CREATE_READ\t\"Waiting to read while creating the data directory lock file.\"","grep_pattern":"LOCK_FILE_CREATE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L226"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/init/miscinit.c","line":1302,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_CREATE_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_CREATE_READ);","grep_pattern":"WAIT_EVENT_LOCK_FILE_CREATE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/init/miscinit.c#L1302"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-lock-file-create-sync","type":"IO","name":"LockFileCreateSync","slug":"lock-file-create-sync","url":"/io/lock-file-create-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for data to reach durable storage while creating the data directory lock file.","14":"Waiting for data to reach durable storage while creating the data directory lock file.","15":"Waiting for data to reach durable storage while creating the data directory lock file.","16":"Waiting for data to reach durable storage while creating the data directory lock file.","17":"Waiting for data to reach durable storage while creating the data directory lock file","18":"Waiting for data to reach durable storage while creating the data directory lock file"},"official_description_zh":"等待创建数据目录锁文件时写入的数据到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_LOCK_FILE_CREATE_SYNC` at `src/backend/utils/init/miscinit.c:1465` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:227`. The instrumented operation is: Waiting for data to reach durable storage while creating the data directory lock file. PostgreSQL reports LockFileCreateSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOCK_FILE_CREATE_SYNC` 位于 `src/backend/utils/init/miscinit.c:1465`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:227`。探针覆盖的操作是：等待创建数据目录锁文件时写入的数据到达持久化存储。PostgreSQL 在 LockFileCreateSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LockFileCreateSync","title_zh":"正在等待 IO/LockFileCreateSync 的会话","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 = 'IO'\n  AND wait_event = 'LockFileCreateSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LockFileCreateSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":227,"kind":"catalog_definition","status":"live_trigger","symbol":"LOCK_FILE_CREATE_SYNC","excerpt":"LOCK_FILE_CREATE_SYNC\t\"Waiting for data to reach durable storage while creating the data directory lock file.\"","grep_pattern":"LOCK_FILE_CREATE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L227"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/init/miscinit.c","line":1465,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_CREATE_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_CREATE_SYNC);","grep_pattern":"WAIT_EVENT_LOCK_FILE_CREATE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/init/miscinit.c#L1465"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-lock-file-create-write","type":"IO","name":"LockFileCreateWrite","slug":"lock-file-create-write","url":"/io/lock-file-create-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write while creating the data directory lock file.","14":"Waiting for a write while creating the data directory lock file.","15":"Waiting for a write while creating the data directory lock file.","16":"Waiting for a write while creating the data directory lock file.","17":"Waiting for a write while creating the data directory lock file","18":"Waiting for a write while creating the data directory lock file"},"official_description_zh":"等待在创建数据目录锁文件时写入数据。","mechanism":{"en":"`WAIT_EVENT_LOCK_FILE_CREATE_WRITE` at `src/backend/utils/init/miscinit.c:1450` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:228`. The instrumented operation is: Waiting for a write while creating the data directory lock file. PostgreSQL reports LockFileCreateWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOCK_FILE_CREATE_WRITE` 位于 `src/backend/utils/init/miscinit.c:1450`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:228`。探针覆盖的操作是：等待在创建数据目录锁文件时写入数据。PostgreSQL 在 LockFileCreateWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LockFileCreateWrite","title_zh":"正在等待 IO/LockFileCreateWrite 的会话","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 = 'IO'\n  AND wait_event = 'LockFileCreateWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LockFileCreateWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":228,"kind":"catalog_definition","status":"live_trigger","symbol":"LOCK_FILE_CREATE_WRITE","excerpt":"LOCK_FILE_CREATE_WRITE\t\"Waiting for a write while creating the data directory lock file.\"","grep_pattern":"LOCK_FILE_CREATE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L228"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/init/miscinit.c","line":1450,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_CREATE_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_CREATE_WRITE);","grep_pattern":"WAIT_EVENT_LOCK_FILE_CREATE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/init/miscinit.c#L1450"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-lock-file-recheckdatadir-read","type":"IO","name":"LockFileRecheckdatadirRead","slug":"lock-file-recheckdatadir-read","url":"/io/lock-file-recheckdatadir-read/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"LockFileReCheckDataDirRead","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a read during recheck of the data directory lock file","18":"Waiting for a read during recheck of the data directory lock file"},"official_description_zh":"等待在重新检查数据目录锁文件时读取数据。","mechanism":{"en":"`WAIT_EVENT_LOCK_FILE_RECHECKDATADIR_READ` at `src/backend/utils/init/miscinit.c:1728` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:628`. The instrumented operation is: Waiting for a read during recheck of the data directory lock file. PostgreSQL reports LockFileRecheckdatadirRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOCK_FILE_RECHECKDATADIR_READ` 位于 `src/backend/utils/init/miscinit.c:1728`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:628`。探针覆盖的操作是：等待在重新检查数据目录锁文件时读取数据。PostgreSQL 在 LockFileRecheckdatadirRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LockFileRecheckdatadirRead","title_zh":"正在等待 IO/LockFileRecheckdatadirRead 的会话","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 = 'IO'\n  AND wait_event = 'LockFileRecheckdatadirRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LockFileRecheckdatadirRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":628,"kind":"catalog_definition","status":"live_trigger","symbol":"LockFileReCheckDataDirRead","excerpt":"event_name = \"LockFileReCheckDataDirRead\";","grep_pattern":"LockFileReCheckDataDirRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L628"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/init/miscinit.c","line":1728,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_RECHECKDATADIR_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_RECHECKDATADIR_READ);","grep_pattern":"WAIT_EVENT_LOCK_FILE_RECHECKDATADIR_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/init/miscinit.c#L1728"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":229,"kind":"catalog_definition","status":"live_trigger","symbol":"LOCK_FILE_RECHECKDATADIR_READ","excerpt":"LOCK_FILE_RECHECKDATADIR_READ\t\"Waiting for a read during recheck of the data directory lock file.\"","grep_pattern":"LOCK_FILE_RECHECKDATADIR_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L229"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/init/miscinit.c","line":1732,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOCK_FILE_RECHECKDATADIR_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_RECHECKDATADIR_READ);","grep_pattern":"WAIT_EVENT_LOCK_FILE_RECHECKDATADIR_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/init/miscinit.c#L1732"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-logical-changes-read","type":"IO","name":"LogicalChangesRead","slug":"logical-changes-read","url":"/io/logical-changes-read/","versions":[14],"version_range":"14","availability":{},"aliases":[],"official_descriptions":{"14":"Waiting for a read from a logical changes file."},"official_description_zh":"等待从逻辑变更文件中读取数据。","mechanism":{"en":"The catalog identity is present, but source audit found no live reporter in 14. Known active ranges: none. The definition location below is retained as negative evidence; this exact release cannot emit the event from a core code path. Evidence: [pgsql-hackers confirmation](https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com).","zh":"目录中仍保留该身份，但源码审计确认在 14 已没有活动报告点。已知曾可触发范围：none。下方定义位置作为负面证据保留；当前精确版本不会从核心代码路径发出此事件。 证据：[pgsql-hackers confirmation](https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com)。"},"normal":{"en":"No live core occurrence is expected on the audited release.","zh":"在已审计的精确版本上，不应出现活动的核心触发。"},"trouble":{"en":"If telemetry shows it, verify the exact patch version, extension origin, and whether the sample is stale or came from a different server.","zh":"若监控仍显示它，应核对精确小版本、扩展来源，并确认样本是否陈旧或来自另一台服务器。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LogicalChangesRead","title_zh":"正在等待 IO/LogicalChangesRead 的会话","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 = 'IO'\n  AND wait_event = 'LogicalChangesRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LogicalChangesRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":14,"version":"14.24","tag":"REL_14_24","commit":"6b3806732b7c5df06bdd0ed150e8a07b4ad62315","path":"src/backend/utils/activity/wait_event.c","line":727,"kind":"catalog_definition","status":"catalog_only","symbol":"LogicalChangesRead","excerpt":"event_name = \"LogicalChangesRead\";","grep_pattern":"LogicalChangesRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_14_24/src/backend/utils/activity/wait_event.c#L727"}],"source_status":"catalog_only","emission":{"status":"dormant","active_ranges":[],"dormant_ranges":["14"],"reason":"catalogued but never reported; removed in PG15","evidence":[{"label":"pgsql-hackers confirmation","url":"https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com"}]},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-logical-changes-write","type":"IO","name":"LogicalChangesWrite","slug":"logical-changes-write","url":"/io/logical-changes-write/","versions":[14],"version_range":"14","availability":{},"aliases":[],"official_descriptions":{"14":"Waiting for a write to a logical changes file."},"official_description_zh":"等待向逻辑变更文件写入数据。","mechanism":{"en":"The catalog identity is present, but source audit found no live reporter in 14. Known active ranges: none. The definition location below is retained as negative evidence; this exact release cannot emit the event from a core code path. Evidence: [pgsql-hackers confirmation](https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com).","zh":"目录中仍保留该身份，但源码审计确认在 14 已没有活动报告点。已知曾可触发范围：none。下方定义位置作为负面证据保留；当前精确版本不会从核心代码路径发出此事件。 证据：[pgsql-hackers confirmation](https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com)。"},"normal":{"en":"No live core occurrence is expected on the audited release.","zh":"在已审计的精确版本上，不应出现活动的核心触发。"},"trouble":{"en":"If telemetry shows it, verify the exact patch version, extension origin, and whether the sample is stale or came from a different server.","zh":"若监控仍显示它，应核对精确小版本、扩展来源，并确认样本是否陈旧或来自另一台服务器。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LogicalChangesWrite","title_zh":"正在等待 IO/LogicalChangesWrite 的会话","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 = 'IO'\n  AND wait_event = 'LogicalChangesWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LogicalChangesWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":14,"version":"14.24","tag":"REL_14_24","commit":"6b3806732b7c5df06bdd0ed150e8a07b4ad62315","path":"src/backend/utils/activity/wait_event.c","line":730,"kind":"catalog_definition","status":"catalog_only","symbol":"LogicalChangesWrite","excerpt":"event_name = \"LogicalChangesWrite\";","grep_pattern":"LogicalChangesWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_14_24/src/backend/utils/activity/wait_event.c#L730"}],"source_status":"catalog_only","emission":{"status":"dormant","active_ranges":[],"dormant_ranges":["14"],"reason":"catalogued but never reported; removed in PG15","evidence":[{"label":"pgsql-hackers confirmation","url":"https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com"}]},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-logical-rewrite-checkpoint-sync","type":"IO","name":"LogicalRewriteCheckpointSync","slug":"logical-rewrite-checkpoint-sync","url":"/io/logical-rewrite-checkpoint-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for logical rewrite mappings to reach durable storage during a checkpoint.","14":"Waiting for logical rewrite mappings to reach durable storage during a checkpoint.","15":"Waiting for logical rewrite mappings to reach durable storage during a checkpoint.","16":"Waiting for logical rewrite mappings to reach durable storage during a checkpoint.","17":"Waiting for logical rewrite mappings to reach durable storage during a checkpoint","18":"Waiting for logical rewrite mappings to reach durable storage during a checkpoint"},"official_description_zh":"等待检查点期间的逻辑重写映射到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_LOGICAL_REWRITE_CHECKPOINT_SYNC` at `src/backend/access/heap/rewriteheap.c:1236` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:230`. The instrumented operation is: Waiting for logical rewrite mappings to reach durable storage during a checkpoint. PostgreSQL reports LogicalRewriteCheckpointSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOGICAL_REWRITE_CHECKPOINT_SYNC` 位于 `src/backend/access/heap/rewriteheap.c:1236`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:230`。探针覆盖的操作是：等待检查点期间的逻辑重写映射到达持久化存储。PostgreSQL 在 LogicalRewriteCheckpointSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LogicalRewriteCheckpointSync","title_zh":"正在等待 IO/LogicalRewriteCheckpointSync 的会话","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 = 'IO'\n  AND wait_event = 'LogicalRewriteCheckpointSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LogicalRewriteCheckpointSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/heap/rewriteheap.c","line":1236,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_REWRITE_CHECKPOINT_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOGICAL_REWRITE_CHECKPOINT_SYNC);","grep_pattern":"WAIT_EVENT_LOGICAL_REWRITE_CHECKPOINT_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/heap/rewriteheap.c#L1236"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":230,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_REWRITE_CHECKPOINT_SYNC","excerpt":"LOGICAL_REWRITE_CHECKPOINT_SYNC\t\"Waiting for logical rewrite mappings to reach durable storage during a checkpoint.\"","grep_pattern":"LOGICAL_REWRITE_CHECKPOINT_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L230"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","checkpoint_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-logical-rewrite-mapping-sync","type":"IO","name":"LogicalRewriteMappingSync","slug":"logical-rewrite-mapping-sync","url":"/io/logical-rewrite-mapping-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for mapping data to reach durable storage during a logical rewrite.","14":"Waiting for mapping data to reach durable storage during a logical rewrite.","15":"Waiting for mapping data to reach durable storage during a logical rewrite.","16":"Waiting for mapping data to reach durable storage during a logical rewrite.","17":"Waiting for mapping data to reach durable storage during a logical rewrite","18":"Waiting for mapping data to reach durable storage during a logical rewrite"},"official_description_zh":"等待逻辑重写期间的映射数据到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_LOGICAL_REWRITE_MAPPING_SYNC` at `src/backend/access/heap/rewriteheap.c:1131` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:231`. The instrumented operation is: Waiting for mapping data to reach durable storage during a logical rewrite. PostgreSQL reports LogicalRewriteMappingSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOGICAL_REWRITE_MAPPING_SYNC` 位于 `src/backend/access/heap/rewriteheap.c:1131`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:231`。探针覆盖的操作是：等待逻辑重写期间的映射数据到达持久化存储。PostgreSQL 在 LogicalRewriteMappingSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LogicalRewriteMappingSync","title_zh":"正在等待 IO/LogicalRewriteMappingSync 的会话","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 = 'IO'\n  AND wait_event = 'LogicalRewriteMappingSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LogicalRewriteMappingSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/heap/rewriteheap.c","line":1131,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_REWRITE_MAPPING_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOGICAL_REWRITE_MAPPING_SYNC);","grep_pattern":"WAIT_EVENT_LOGICAL_REWRITE_MAPPING_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/heap/rewriteheap.c#L1131"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":231,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_REWRITE_MAPPING_SYNC","excerpt":"LOGICAL_REWRITE_MAPPING_SYNC\t\"Waiting for mapping data to reach durable storage during a logical rewrite.\"","grep_pattern":"LOGICAL_REWRITE_MAPPING_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L231"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-logical-rewrite-mapping-write","type":"IO","name":"LogicalRewriteMappingWrite","slug":"logical-rewrite-mapping-write","url":"/io/logical-rewrite-mapping-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write of mapping data during a logical rewrite.","14":"Waiting for a write of mapping data during a logical rewrite.","15":"Waiting for a write of mapping data during a logical rewrite.","16":"Waiting for a write of mapping data during a logical rewrite.","17":"Waiting for a write of mapping data during a logical rewrite","18":"Waiting for a write of mapping data during a logical rewrite"},"official_description_zh":"等待在逻辑重写期间写入映射数据。","mechanism":{"en":"`WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE` at `src/backend/access/heap/rewriteheap.c:1114` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:232`. The instrumented operation is: Waiting for a write of mapping data during a logical rewrite. PostgreSQL reports LogicalRewriteMappingWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE` 位于 `src/backend/access/heap/rewriteheap.c:1114`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:232`。探针覆盖的操作是：等待在逻辑重写期间写入映射数据。PostgreSQL 在 LogicalRewriteMappingWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LogicalRewriteMappingWrite","title_zh":"正在等待 IO/LogicalRewriteMappingWrite 的会话","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 = 'IO'\n  AND wait_event = 'LogicalRewriteMappingWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LogicalRewriteMappingWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/heap/rewriteheap.c","line":1114,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE);","grep_pattern":"WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/heap/rewriteheap.c#L1114"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":232,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_REWRITE_MAPPING_WRITE","excerpt":"LOGICAL_REWRITE_MAPPING_WRITE\t\"Waiting for a write of mapping data during a logical rewrite.\"","grep_pattern":"LOGICAL_REWRITE_MAPPING_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L232"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-logical-rewrite-sync","type":"IO","name":"LogicalRewriteSync","slug":"logical-rewrite-sync","url":"/io/logical-rewrite-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for logical rewrite mappings to reach durable storage.","14":"Waiting for logical rewrite mappings to reach durable storage.","15":"Waiting for logical rewrite mappings to reach durable storage.","16":"Waiting for logical rewrite mappings to reach durable storage.","17":"Waiting for logical rewrite mappings to reach durable storage","18":"Waiting for logical rewrite mappings to reach durable storage"},"official_description_zh":"等待逻辑重写映射到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_LOGICAL_REWRITE_SYNC` at `src/backend/access/heap/rewriteheap.c:922` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:233`. The instrumented operation is: Waiting for logical rewrite mappings to reach durable storage. PostgreSQL reports LogicalRewriteSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOGICAL_REWRITE_SYNC` 位于 `src/backend/access/heap/rewriteheap.c:922`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:233`。探针覆盖的操作是：等待逻辑重写映射到达持久化存储。PostgreSQL 在 LogicalRewriteSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LogicalRewriteSync","title_zh":"正在等待 IO/LogicalRewriteSync 的会话","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 = 'IO'\n  AND wait_event = 'LogicalRewriteSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LogicalRewriteSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/heap/rewriteheap.c","line":922,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_REWRITE_SYNC","excerpt":"if (FileSync(src->vfd, WAIT_EVENT_LOGICAL_REWRITE_SYNC) != 0)","grep_pattern":"WAIT_EVENT_LOGICAL_REWRITE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/heap/rewriteheap.c#L922"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":233,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_REWRITE_SYNC","excerpt":"LOGICAL_REWRITE_SYNC\t\"Waiting for logical rewrite mappings to reach durable storage.\"","grep_pattern":"LOGICAL_REWRITE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L233"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-logical-rewrite-truncate","type":"IO","name":"LogicalRewriteTruncate","slug":"logical-rewrite-truncate","url":"/io/logical-rewrite-truncate/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for truncate of mapping data during a logical rewrite.","14":"Waiting for truncate of mapping data during a logical rewrite.","15":"Waiting for truncate of mapping data during a logical rewrite.","16":"Waiting for truncate of mapping data during a logical rewrite.","17":"Waiting for truncate of mapping data during a logical rewrite","18":"Waiting for truncate of mapping data during a logical rewrite"},"official_description_zh":"等待在逻辑重写期间截断映射数据。","mechanism":{"en":"`WAIT_EVENT_LOGICAL_REWRITE_TRUNCATE` at `src/backend/access/heap/rewriteheap.c:1100` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:234`. The instrumented operation is: Waiting for truncate of mapping data during a logical rewrite. PostgreSQL reports LogicalRewriteTruncate around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOGICAL_REWRITE_TRUNCATE` 位于 `src/backend/access/heap/rewriteheap.c:1100`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:234`。探针覆盖的操作是：等待在逻辑重写期间截断映射数据。PostgreSQL 在 LogicalRewriteTruncate 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LogicalRewriteTruncate","title_zh":"正在等待 IO/LogicalRewriteTruncate 的会话","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 = 'IO'\n  AND wait_event = 'LogicalRewriteTruncate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LogicalRewriteTruncate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/heap/rewriteheap.c","line":1100,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_REWRITE_TRUNCATE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_LOGICAL_REWRITE_TRUNCATE);","grep_pattern":"WAIT_EVENT_LOGICAL_REWRITE_TRUNCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/heap/rewriteheap.c#L1100"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":234,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_REWRITE_TRUNCATE","excerpt":"LOGICAL_REWRITE_TRUNCATE\t\"Waiting for truncate of mapping data during a logical rewrite.\"","grep_pattern":"LOGICAL_REWRITE_TRUNCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L234"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-logical-rewrite-write","type":"IO","name":"LogicalRewriteWrite","slug":"logical-rewrite-write","url":"/io/logical-rewrite-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write of logical rewrite mappings.","14":"Waiting for a write of logical rewrite mappings.","15":"Waiting for a write of logical rewrite mappings.","16":"Waiting for a write of logical rewrite mappings.","17":"Waiting for a write of logical rewrite mappings","18":"Waiting for a write of logical rewrite mappings"},"official_description_zh":"等待写入逻辑重写映射。","mechanism":{"en":"`WAIT_EVENT_LOGICAL_REWRITE_WRITE` at `src/backend/access/heap/rewriteheap.c:881` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:235`. The instrumented operation is: Waiting for a write of logical rewrite mappings. PostgreSQL reports LogicalRewriteWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_LOGICAL_REWRITE_WRITE` 位于 `src/backend/access/heap/rewriteheap.c:881`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:235`。探针覆盖的操作是：等待写入逻辑重写映射。PostgreSQL 在 LogicalRewriteWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LogicalRewriteWrite","title_zh":"正在等待 IO/LogicalRewriteWrite 的会话","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 = 'IO'\n  AND wait_event = 'LogicalRewriteWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LogicalRewriteWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/heap/rewriteheap.c","line":881,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_REWRITE_WRITE","excerpt":"WAIT_EVENT_LOGICAL_REWRITE_WRITE);","grep_pattern":"WAIT_EVENT_LOGICAL_REWRITE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/heap/rewriteheap.c#L881"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":235,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_REWRITE_WRITE","excerpt":"LOGICAL_REWRITE_WRITE\t\"Waiting for a write of logical rewrite mappings.\"","grep_pattern":"LOGICAL_REWRITE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L235"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-logical-subxact-read","type":"IO","name":"LogicalSubxactRead","slug":"logical-subxact-read","url":"/io/logical-subxact-read/","versions":[14],"version_range":"14","availability":{},"aliases":[],"official_descriptions":{"14":"Waiting for a read from a logical subxact file."},"official_description_zh":"等待从逻辑子事务文件中读取数据。","mechanism":{"en":"The catalog identity is present, but source audit found no live reporter in 14. Known active ranges: none. The definition location below is retained as negative evidence; this exact release cannot emit the event from a core code path. Evidence: [pgsql-hackers confirmation](https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com).","zh":"目录中仍保留该身份，但源码审计确认在 14 已没有活动报告点。已知曾可触发范围：none。下方定义位置作为负面证据保留；当前精确版本不会从核心代码路径发出此事件。 证据：[pgsql-hackers confirmation](https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com)。"},"normal":{"en":"No live core occurrence is expected on the audited release.","zh":"在已审计的精确版本上，不应出现活动的核心触发。"},"trouble":{"en":"If telemetry shows it, verify the exact patch version, extension origin, and whether the sample is stale or came from a different server.","zh":"若监控仍显示它，应核对精确小版本、扩展来源，并确认样本是否陈旧或来自另一台服务器。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LogicalSubxactRead","title_zh":"正在等待 IO/LogicalSubxactRead 的会话","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 = 'IO'\n  AND wait_event = 'LogicalSubxactRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LogicalSubxactRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":14,"version":"14.24","tag":"REL_14_24","commit":"6b3806732b7c5df06bdd0ed150e8a07b4ad62315","path":"src/backend/utils/activity/wait_event.c","line":733,"kind":"catalog_definition","status":"catalog_only","symbol":"LogicalSubxactRead","excerpt":"event_name = \"LogicalSubxactRead\";","grep_pattern":"LogicalSubxactRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_14_24/src/backend/utils/activity/wait_event.c#L733"}],"source_status":"catalog_only","emission":{"status":"dormant","active_ranges":[],"dormant_ranges":["14"],"reason":"catalogued but never reported; removed in PG15","evidence":[{"label":"pgsql-hackers confirmation","url":"https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com"}]},"gucs":["autovacuum_freeze_max_age","vacuum_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-logical-subxact-write","type":"IO","name":"LogicalSubxactWrite","slug":"logical-subxact-write","url":"/io/logical-subxact-write/","versions":[14],"version_range":"14","availability":{},"aliases":[],"official_descriptions":{"14":"Waiting for a write to a logical subxact file."},"official_description_zh":"等待向逻辑子事务文件写入数据。","mechanism":{"en":"The catalog identity is present, but source audit found no live reporter in 14. Known active ranges: none. The definition location below is retained as negative evidence; this exact release cannot emit the event from a core code path. Evidence: [pgsql-hackers confirmation](https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com).","zh":"目录中仍保留该身份，但源码审计确认在 14 已没有活动报告点。已知曾可触发范围：none。下方定义位置作为负面证据保留；当前精确版本不会从核心代码路径发出此事件。 证据：[pgsql-hackers confirmation](https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com)。"},"normal":{"en":"No live core occurrence is expected on the audited release.","zh":"在已审计的精确版本上，不应出现活动的核心触发。"},"trouble":{"en":"If telemetry shows it, verify the exact patch version, extension origin, and whether the sample is stale or came from a different server.","zh":"若监控仍显示它，应核对精确小版本、扩展来源，并确认样本是否陈旧或来自另一台服务器。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/LogicalSubxactWrite","title_zh":"正在等待 IO/LogicalSubxactWrite 的会话","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 = 'IO'\n  AND wait_event = 'LogicalSubxactWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'LogicalSubxactWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":14,"version":"14.24","tag":"REL_14_24","commit":"6b3806732b7c5df06bdd0ed150e8a07b4ad62315","path":"src/backend/utils/activity/wait_event.c","line":736,"kind":"catalog_definition","status":"catalog_only","symbol":"LogicalSubxactWrite","excerpt":"event_name = \"LogicalSubxactWrite\";","grep_pattern":"LogicalSubxactWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_14_24/src/backend/utils/activity/wait_event.c#L736"}],"source_status":"catalog_only","emission":{"status":"dormant","active_ranges":[],"dormant_ranges":["14"],"reason":"catalogued but never reported; removed in PG15","evidence":[{"label":"pgsql-hackers confirmation","url":"https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com"}]},"gucs":["autovacuum_freeze_max_age","vacuum_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-relation-map-read","type":"IO","name":"RelationMapRead","slug":"relation-map-read","url":"/io/relation-map-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a read of the relation map file.","14":"Waiting for a read of the relation map file.","15":"Waiting for a read of the relation map file.","16":"Waiting for a read of the relation map file.","17":"Waiting for a read of the relation map file","18":"Waiting for a read of the relation map file"},"official_description_zh":"等待读取 relation map 文件。","mechanism":{"en":"`WAIT_EVENT_RELATION_MAP_READ` at `src/backend/utils/cache/relmapper.c:822` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:236`. The instrumented operation is: Waiting for a read of the relation map file. PostgreSQL reports RelationMapRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_RELATION_MAP_READ` 位于 `src/backend/utils/cache/relmapper.c:822`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:236`。探针覆盖的操作是：等待读取 relation map 文件。PostgreSQL 在 RelationMapRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/RelationMapRead","title_zh":"正在等待 IO/RelationMapRead 的会话","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 = 'IO'\n  AND wait_event = 'RelationMapRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'RelationMapRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":236,"kind":"catalog_definition","status":"live_trigger","symbol":"RELATION_MAP_READ","excerpt":"RELATION_MAP_READ\t\"Waiting for a read of the relation map file.\"","grep_pattern":"RELATION_MAP_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L236"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/cache/relmapper.c","line":822,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RELATION_MAP_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_RELATION_MAP_READ);","grep_pattern":"WAIT_EVENT_RELATION_MAP_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/cache/relmapper.c#L822"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-relation-map-replace","type":"IO","name":"RelationMapReplace","slug":"relation-map-replace","url":"/io/relation-map-replace/","versions":[16,17,18],"version_range":"16-18","availability":{},"aliases":[],"official_descriptions":{"16":"Waiting for durable replacement of a relation map file.","17":"Waiting for durable replacement of a relation map file","18":"Waiting for durable replacement of a relation map file"},"official_description_zh":"等待以持久化方式替换 relation map 文件。","mechanism":{"en":"`WAIT_EVENT_RELATION_MAP_REPLACE` at `src/backend/utils/cache/relmapper.c:988` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:237`. The instrumented operation is: Waiting for durable replacement of a relation map file. PostgreSQL reports RelationMapReplace around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_RELATION_MAP_REPLACE` 位于 `src/backend/utils/cache/relmapper.c:988`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:237`。探针覆盖的操作是：等待以持久化方式替换 relation map 文件。PostgreSQL 在 RelationMapReplace 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/RelationMapReplace","title_zh":"正在等待 IO/RelationMapReplace 的会话","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 = 'IO'\n  AND wait_event = 'RelationMapReplace'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'RelationMapReplace'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":237,"kind":"catalog_definition","status":"live_trigger","symbol":"RELATION_MAP_REPLACE","excerpt":"RELATION_MAP_REPLACE\t\"Waiting for durable replacement of a relation map file.\"","grep_pattern":"RELATION_MAP_REPLACE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L237"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/cache/relmapper.c","line":988,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RELATION_MAP_REPLACE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_RELATION_MAP_REPLACE);","grep_pattern":"WAIT_EVENT_RELATION_MAP_REPLACE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/cache/relmapper.c#L988"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-relation-map-sync","type":"IO","name":"RelationMapSync","slug":"relation-map-sync","url":"/io/relation-map-sync/","versions":[13,14,15],"version_range":"13-15","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for the relation map file to reach durable storage.","14":"Waiting for the relation map file to reach durable storage.","15":"Waiting for the relation map file to reach durable storage."},"official_description_zh":"等待 relation map 文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_RELATION_MAP_SYNC` at `src/backend/utils/cache/relmapper.c:957` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:637`. The instrumented operation is: Waiting for the relation map file to reach durable storage. PostgreSQL reports RelationMapSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_RELATION_MAP_SYNC` 位于 `src/backend/utils/cache/relmapper.c:957`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:637`。探针覆盖的操作是：等待 relation map 文件到达持久化存储。PostgreSQL 在 RelationMapSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/RelationMapSync","title_zh":"正在等待 IO/RelationMapSync 的会话","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 = 'IO'\n  AND wait_event = 'RelationMapSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'RelationMapSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":15,"version":"15.19","tag":"REL_15_19","commit":"2ff1375b5dd8bf09d8cb0e795974528180fd75ca","path":"src/backend/utils/activity/wait_event.c","line":637,"kind":"catalog_definition","status":"live_trigger","symbol":"RelationMapSync","excerpt":"event_name = \"RelationMapSync\";","grep_pattern":"RelationMapSync","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_15_19/src/backend/utils/activity/wait_event.c#L637"},{"major":15,"version":"15.19","tag":"REL_15_19","commit":"2ff1375b5dd8bf09d8cb0e795974528180fd75ca","path":"src/backend/utils/cache/relmapper.c","line":957,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RELATION_MAP_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_RELATION_MAP_SYNC);","grep_pattern":"WAIT_EVENT_RELATION_MAP_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_15_19/src/backend/utils/cache/relmapper.c#L957"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"15.19"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-relation-map-write","type":"IO","name":"RelationMapWrite","slug":"relation-map-write","url":"/io/relation-map-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write to the relation map file.","14":"Waiting for a write to the relation map file.","15":"Waiting for a write to the relation map file.","16":"Waiting for a write to the relation map file.","17":"Waiting for a write to the relation map file","18":"Waiting for a write to the relation map file"},"official_description_zh":"等待向 relation map 文件写入数据。","mechanism":{"en":"`WAIT_EVENT_RELATION_MAP_WRITE` at `src/backend/utils/cache/relmapper.c:939` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:238`. The instrumented operation is: Waiting for a write to the relation map file. PostgreSQL reports RelationMapWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_RELATION_MAP_WRITE` 位于 `src/backend/utils/cache/relmapper.c:939`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:238`。探针覆盖的操作是：等待向 relation map 文件写入数据。PostgreSQL 在 RelationMapWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/RelationMapWrite","title_zh":"正在等待 IO/RelationMapWrite 的会话","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 = 'IO'\n  AND wait_event = 'RelationMapWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'RelationMapWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":238,"kind":"catalog_definition","status":"live_trigger","symbol":"RELATION_MAP_WRITE","excerpt":"RELATION_MAP_WRITE\t\"Waiting for a write to the relation map file.\"","grep_pattern":"RELATION_MAP_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L238"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/cache/relmapper.c","line":939,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RELATION_MAP_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_RELATION_MAP_WRITE);","grep_pattern":"WAIT_EVENT_RELATION_MAP_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/cache/relmapper.c#L939"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-reorder-buffer-read","type":"IO","name":"ReorderBufferRead","slug":"reorder-buffer-read","url":"/io/reorder-buffer-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a read during reorder buffer management.","14":"Waiting for a read during reorder buffer management.","15":"Waiting for a read during reorder buffer management.","16":"Waiting for a read during reorder buffer management.","17":"Waiting for a read during reorder buffer management","18":"Waiting for a read during reorder buffer management"},"official_description_zh":"等待在 reorder buffer 管理期间读取数据。","mechanism":{"en":"`WAIT_EVENT_REORDER_BUFFER_READ` at `src/backend/replication/logical/reorderbuffer.c:4609` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:239`. The instrumented operation is: Waiting for a read during reorder buffer management. PostgreSQL reports ReorderBufferRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_REORDER_BUFFER_READ` 位于 `src/backend/replication/logical/reorderbuffer.c:4609`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:239`。探针覆盖的操作是：等待在 reorder buffer 管理期间读取数据。PostgreSQL 在 ReorderBufferRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ReorderBufferRead","title_zh":"正在等待 IO/ReorderBufferRead 的会话","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 = 'IO'\n  AND wait_event = 'ReorderBufferRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ReorderBufferRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/reorderbuffer.c","line":4609,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REORDER_BUFFER_READ","excerpt":"file->curOffset, WAIT_EVENT_REORDER_BUFFER_READ);","grep_pattern":"WAIT_EVENT_REORDER_BUFFER_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/reorderbuffer.c#L4609"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":239,"kind":"catalog_definition","status":"live_trigger","symbol":"REORDER_BUFFER_READ","excerpt":"REORDER_BUFFER_READ\t\"Waiting for a read during reorder buffer management.\"","grep_pattern":"REORDER_BUFFER_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L239"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-reorder-buffer-write","type":"IO","name":"ReorderBufferWrite","slug":"reorder-buffer-write","url":"/io/reorder-buffer-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write during reorder buffer management.","14":"Waiting for a write during reorder buffer management.","15":"Waiting for a write during reorder buffer management.","16":"Waiting for a write during reorder buffer management.","17":"Waiting for a write during reorder buffer management","18":"Waiting for a write during reorder buffer management"},"official_description_zh":"等待在 reorder buffer 管理期间写入数据。","mechanism":{"en":"`WAIT_EVENT_REORDER_BUFFER_WRITE` at `src/backend/replication/logical/reorderbuffer.c:4265` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:240`. The instrumented operation is: Waiting for a write during reorder buffer management. PostgreSQL reports ReorderBufferWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_REORDER_BUFFER_WRITE` 位于 `src/backend/replication/logical/reorderbuffer.c:4265`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:240`。探针覆盖的操作是：等待在 reorder buffer 管理期间写入数据。PostgreSQL 在 ReorderBufferWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ReorderBufferWrite","title_zh":"正在等待 IO/ReorderBufferWrite 的会话","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 = 'IO'\n  AND wait_event = 'ReorderBufferWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ReorderBufferWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/reorderbuffer.c","line":4265,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REORDER_BUFFER_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_REORDER_BUFFER_WRITE);","grep_pattern":"WAIT_EVENT_REORDER_BUFFER_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/reorderbuffer.c#L4265"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":240,"kind":"catalog_definition","status":"live_trigger","symbol":"REORDER_BUFFER_WRITE","excerpt":"REORDER_BUFFER_WRITE\t\"Waiting for a write during reorder buffer management.\"","grep_pattern":"REORDER_BUFFER_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L240"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-reorder-logical-mapping-read","type":"IO","name":"ReorderLogicalMappingRead","slug":"reorder-logical-mapping-read","url":"/io/reorder-logical-mapping-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a read of a logical mapping during reorder buffer management.","14":"Waiting for a read of a logical mapping during reorder buffer management.","15":"Waiting for a read of a logical mapping during reorder buffer management.","16":"Waiting for a read of a logical mapping during reorder buffer management.","17":"Waiting for a read of a logical mapping during reorder buffer management","18":"Waiting for a read of a logical mapping during reorder buffer management"},"official_description_zh":"等待在 reorder buffer 管理期间读取逻辑映射。","mechanism":{"en":"`WAIT_EVENT_REORDER_LOGICAL_MAPPING_READ` at `src/backend/replication/logical/reorderbuffer.c:5383` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:241`. The instrumented operation is: Waiting for a read of a logical mapping during reorder buffer management. PostgreSQL reports ReorderLogicalMappingRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_REORDER_LOGICAL_MAPPING_READ` 位于 `src/backend/replication/logical/reorderbuffer.c:5383`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:241`。探针覆盖的操作是：等待在 reorder buffer 管理期间读取逻辑映射。PostgreSQL 在 ReorderLogicalMappingRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ReorderLogicalMappingRead","title_zh":"正在等待 IO/ReorderLogicalMappingRead 的会话","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 = 'IO'\n  AND wait_event = 'ReorderLogicalMappingRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ReorderLogicalMappingRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/reorderbuffer.c","line":5383,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REORDER_LOGICAL_MAPPING_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_REORDER_LOGICAL_MAPPING_READ);","grep_pattern":"WAIT_EVENT_REORDER_LOGICAL_MAPPING_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/reorderbuffer.c#L5383"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":241,"kind":"catalog_definition","status":"live_trigger","symbol":"REORDER_LOGICAL_MAPPING_READ","excerpt":"REORDER_LOGICAL_MAPPING_READ\t\"Waiting for a read of a logical mapping during reorder buffer management.\"","grep_pattern":"REORDER_LOGICAL_MAPPING_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L241"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-replication-slot-read","type":"IO","name":"ReplicationSlotRead","slug":"replication-slot-read","url":"/io/replication-slot-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a read from a replication slot control file.","14":"Waiting for a read from a replication slot control file.","15":"Waiting for a read from a replication slot control file.","16":"Waiting for a read from a replication slot control file.","17":"Waiting for a read from a replication slot control file","18":"Waiting for a read from a replication slot control file"},"official_description_zh":"等待从复制槽控制文件中读取数据。","mechanism":{"en":"`WAIT_EVENT_REPLICATION_SLOT_READ` at `src/backend/replication/slot.c:2540` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:242`. The instrumented operation is: Waiting for a read from a replication slot control file. PostgreSQL reports ReplicationSlotRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_REPLICATION_SLOT_READ` 位于 `src/backend/replication/slot.c:2540`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:242`。探针覆盖的操作是：等待从复制槽控制文件中读取数据。PostgreSQL 在 ReplicationSlotRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ReplicationSlotRead","title_zh":"正在等待 IO/ReplicationSlotRead 的会话","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 = 'IO'\n  AND wait_event = 'ReplicationSlotRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ReplicationSlotRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/slot.c","line":2540,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REPLICATION_SLOT_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_REPLICATION_SLOT_READ);","grep_pattern":"WAIT_EVENT_REPLICATION_SLOT_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/slot.c#L2540"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":242,"kind":"catalog_definition","status":"live_trigger","symbol":"REPLICATION_SLOT_READ","excerpt":"REPLICATION_SLOT_READ\t\"Waiting for a read from a replication slot control file.\"","grep_pattern":"REPLICATION_SLOT_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L242"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-replication-slot-restore-sync","type":"IO","name":"ReplicationSlotRestoreSync","slug":"replication-slot-restore-sync","url":"/io/replication-slot-restore-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a replication slot control file to reach durable storage while restoring it to memory.","14":"Waiting for a replication slot control file to reach durable storage while restoring it to memory.","15":"Waiting for a replication slot control file to reach durable storage while restoring it to memory.","16":"Waiting for a replication slot control file to reach durable storage while restoring it to memory.","17":"Waiting for a replication slot control file to reach durable storage while restoring it to memory","18":"Waiting for a replication slot control file to reach durable storage while restoring it to memory"},"official_description_zh":"等待在将复制槽恢复到内存的过程中，使其控制文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_REPLICATION_SLOT_RESTORE_SYNC` at `src/backend/replication/slot.c:2526` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:243`. The instrumented operation is: Waiting for a replication slot control file to reach durable storage while restoring it to memory. PostgreSQL reports ReplicationSlotRestoreSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_REPLICATION_SLOT_RESTORE_SYNC` 位于 `src/backend/replication/slot.c:2526`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:243`。探针覆盖的操作是：等待在将复制槽恢复到内存的过程中，使其控制文件到达持久化存储。PostgreSQL 在 ReplicationSlotRestoreSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ReplicationSlotRestoreSync","title_zh":"正在等待 IO/ReplicationSlotRestoreSync 的会话","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 = 'IO'\n  AND wait_event = 'ReplicationSlotRestoreSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ReplicationSlotRestoreSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/slot.c","line":2526,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REPLICATION_SLOT_RESTORE_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_REPLICATION_SLOT_RESTORE_SYNC);","grep_pattern":"WAIT_EVENT_REPLICATION_SLOT_RESTORE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/slot.c#L2526"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":243,"kind":"catalog_definition","status":"live_trigger","symbol":"REPLICATION_SLOT_RESTORE_SYNC","excerpt":"REPLICATION_SLOT_RESTORE_SYNC\t\"Waiting for a replication slot control file to reach durable storage while restoring it to memory.\"","grep_pattern":"REPLICATION_SLOT_RESTORE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L243"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-replication-slot-sync","type":"IO","name":"ReplicationSlotSync","slug":"replication-slot-sync","url":"/io/replication-slot-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a replication slot control file to reach durable storage.","14":"Waiting for a replication slot control file to reach durable storage.","15":"Waiting for a replication slot control file to reach durable storage.","16":"Waiting for a replication slot control file to reach durable storage.","17":"Waiting for a replication slot control file to reach durable storage","18":"Waiting for a replication slot control file to reach durable storage"},"official_description_zh":"等待复制槽控制文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_REPLICATION_SLOT_SYNC` at `src/backend/replication/slot.c:2405` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:244`. The instrumented operation is: Waiting for a replication slot control file to reach durable storage. PostgreSQL reports ReplicationSlotSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_REPLICATION_SLOT_SYNC` 位于 `src/backend/replication/slot.c:2405`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:244`。探针覆盖的操作是：等待复制槽控制文件到达持久化存储。PostgreSQL 在 ReplicationSlotSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ReplicationSlotSync","title_zh":"正在等待 IO/ReplicationSlotSync 的会话","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 = 'IO'\n  AND wait_event = 'ReplicationSlotSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ReplicationSlotSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/slot.c","line":2405,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REPLICATION_SLOT_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_REPLICATION_SLOT_SYNC);","grep_pattern":"WAIT_EVENT_REPLICATION_SLOT_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/slot.c#L2405"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":244,"kind":"catalog_definition","status":"live_trigger","symbol":"REPLICATION_SLOT_SYNC","excerpt":"REPLICATION_SLOT_SYNC\t\"Waiting for a replication slot control file to reach durable storage.\"","grep_pattern":"REPLICATION_SLOT_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L244"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-replication-slot-write","type":"IO","name":"ReplicationSlotWrite","slug":"replication-slot-write","url":"/io/replication-slot-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write to a replication slot control file.","14":"Waiting for a write to a replication slot control file.","15":"Waiting for a write to a replication slot control file.","16":"Waiting for a write to a replication slot control file.","17":"Waiting for a write to a replication slot control file","18":"Waiting for a write to a replication slot control file"},"official_description_zh":"等待向复制槽控制文件写入数据。","mechanism":{"en":"`WAIT_EVENT_REPLICATION_SLOT_WRITE` at `src/backend/replication/slot.c:2384` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:245`. The instrumented operation is: Waiting for a write to a replication slot control file. PostgreSQL reports ReplicationSlotWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_REPLICATION_SLOT_WRITE` 位于 `src/backend/replication/slot.c:2384`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:245`。探针覆盖的操作是：等待向复制槽控制文件写入数据。PostgreSQL 在 ReplicationSlotWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/ReplicationSlotWrite","title_zh":"正在等待 IO/ReplicationSlotWrite 的会话","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 = 'IO'\n  AND wait_event = 'ReplicationSlotWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'ReplicationSlotWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/slot.c","line":2384,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REPLICATION_SLOT_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_REPLICATION_SLOT_WRITE);","grep_pattern":"WAIT_EVENT_REPLICATION_SLOT_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/slot.c#L2384"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":245,"kind":"catalog_definition","status":"live_trigger","symbol":"REPLICATION_SLOT_WRITE","excerpt":"REPLICATION_SLOT_WRITE\t\"Waiting for a write to a replication slot control file.\"","grep_pattern":"REPLICATION_SLOT_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L245"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-slru-flush-sync","type":"IO","name":"SlruFlushSync","slug":"slru-flush-sync","url":"/io/slru-flush-sync/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"SLRUFlushSync","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for SLRU data to reach durable storage during a checkpoint or database shutdown","18":"Waiting for SLRU data to reach durable storage during a checkpoint or database shutdown"},"official_description_zh":"等待检查点或数据库关闭期间的 SLRU 数据到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_SLRU_FLUSH_SYNC` at `src/backend/access/transam/slru.c:1606` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:679`. The instrumented operation is: Waiting for SLRU data to reach durable storage during a checkpoint or database shutdown. PostgreSQL reports SlruFlushSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_SLRU_FLUSH_SYNC` 位于 `src/backend/access/transam/slru.c:1606`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:679`。探针覆盖的操作是：等待检查点或数据库关闭期间的 SLRU 数据到达持久化存储。PostgreSQL 在 SlruFlushSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/SlruFlushSync","title_zh":"正在等待 IO/SlruFlushSync 的会话","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 = 'IO'\n  AND wait_event = 'SlruFlushSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'SlruFlushSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/slru.c","line":1606,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SLRU_FLUSH_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SLRU_FLUSH_SYNC);","grep_pattern":"WAIT_EVENT_SLRU_FLUSH_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/slru.c#L1606"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":679,"kind":"catalog_definition","status":"live_trigger","symbol":"SLRUFlushSync","excerpt":"event_name = \"SLRUFlushSync\";","grep_pattern":"SLRUFlushSync","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L679"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/slru.c","line":1843,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SLRU_FLUSH_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SLRU_FLUSH_SYNC);","grep_pattern":"WAIT_EVENT_SLRU_FLUSH_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/slru.c#L1843"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":246,"kind":"catalog_definition","status":"live_trigger","symbol":"SLRU_FLUSH_SYNC","excerpt":"SLRU_FLUSH_SYNC\t\"Waiting for SLRU data to reach durable storage during a checkpoint or database shutdown.\"","grep_pattern":"SLRU_FLUSH_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L246"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-slru-read","type":"IO","name":"SlruRead","slug":"slru-read","url":"/io/slru-read/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"SLRURead","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a read of an SLRU page","18":"Waiting for a read of an SLRU page"},"official_description_zh":"等待读取 SLRU 页面。","mechanism":{"en":"`WAIT_EVENT_SLRU_READ` at `src/backend/access/transam/slru.c:721` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:682`. The instrumented operation is: Waiting for a read of an SLRU page. PostgreSQL reports SlruRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_SLRU_READ` 位于 `src/backend/access/transam/slru.c:721`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:682`。探针覆盖的操作是：等待读取 SLRU 页面。PostgreSQL 在 SlruRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/SlruRead","title_zh":"正在等待 IO/SlruRead 的会话","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 = 'IO'\n  AND wait_event = 'SlruRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'SlruRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/slru.c","line":721,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SLRU_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SLRU_READ);","grep_pattern":"WAIT_EVENT_SLRU_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/slru.c#L721"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":682,"kind":"catalog_definition","status":"live_trigger","symbol":"SLRURead","excerpt":"event_name = \"SLRURead\";","grep_pattern":"SLRURead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L682"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/slru.c","line":840,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SLRU_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SLRU_READ);","grep_pattern":"WAIT_EVENT_SLRU_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/slru.c#L840"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":247,"kind":"catalog_definition","status":"live_trigger","symbol":"SLRU_READ","excerpt":"SLRU_READ\t\"Waiting for a read of an SLRU page.\"","grep_pattern":"SLRU_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L247"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-slru-sync","type":"IO","name":"SlruSync","slug":"slru-sync","url":"/io/slru-sync/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"SLRUSync","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for SLRU data to reach durable storage following a page write","18":"Waiting for SLRU data to reach durable storage following a page write"},"official_description_zh":"等待页面写入后的 SLRU 数据到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_SLRU_SYNC` at `src/backend/access/transam/slru.c:900` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:685`. The instrumented operation is: Waiting for SLRU data to reach durable storage following a page write. PostgreSQL reports SlruSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_SLRU_SYNC` 位于 `src/backend/access/transam/slru.c:900`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:685`。探针覆盖的操作是：等待页面写入后的 SLRU 数据到达持久化存储。PostgreSQL 在 SlruSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/SlruSync","title_zh":"正在等待 IO/SlruSync 的会话","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 = 'IO'\n  AND wait_event = 'SlruSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'SlruSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/slru.c","line":900,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SLRU_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SLRU_SYNC);","grep_pattern":"WAIT_EVENT_SLRU_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/slru.c#L900"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":685,"kind":"catalog_definition","status":"live_trigger","symbol":"SLRUSync","excerpt":"event_name = \"SLRUSync\";","grep_pattern":"SLRUSync","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L685"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/slru.c","line":1016,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SLRU_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SLRU_SYNC);","grep_pattern":"WAIT_EVENT_SLRU_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/slru.c#L1016"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":248,"kind":"catalog_definition","status":"live_trigger","symbol":"SLRU_SYNC","excerpt":"SLRU_SYNC\t\"Waiting for SLRU data to reach durable storage following a page write.\"","grep_pattern":"SLRU_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L248"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-slru-write","type":"IO","name":"SlruWrite","slug":"slru-write","url":"/io/slru-write/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"SLRUWrite","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a write of an SLRU page","18":"Waiting for a write of an SLRU page"},"official_description_zh":"等待写入 SLRU 页面。","mechanism":{"en":"`WAIT_EVENT_SLRU_WRITE` at `src/backend/access/transam/slru.c:876` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:688`. The instrumented operation is: Waiting for a write of an SLRU page. PostgreSQL reports SlruWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_SLRU_WRITE` 位于 `src/backend/access/transam/slru.c:876`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:688`。探针覆盖的操作是：等待写入 SLRU 页面。PostgreSQL 在 SlruWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/SlruWrite","title_zh":"正在等待 IO/SlruWrite 的会话","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 = 'IO'\n  AND wait_event = 'SlruWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'SlruWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/slru.c","line":876,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SLRU_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SLRU_WRITE);","grep_pattern":"WAIT_EVENT_SLRU_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/slru.c#L876"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":688,"kind":"catalog_definition","status":"live_trigger","symbol":"SLRUWrite","excerpt":"event_name = \"SLRUWrite\";","grep_pattern":"SLRUWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L688"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/slru.c","line":992,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SLRU_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SLRU_WRITE);","grep_pattern":"WAIT_EVENT_SLRU_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/slru.c#L992"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":249,"kind":"catalog_definition","status":"live_trigger","symbol":"SLRU_WRITE","excerpt":"SLRU_WRITE\t\"Waiting for a write of an SLRU page.\"","grep_pattern":"SLRU_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L249"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-snapbuild-read","type":"IO","name":"SnapbuildRead","slug":"snapbuild-read","url":"/io/snapbuild-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a read of a serialized historical catalog snapshot.","14":"Waiting for a read of a serialized historical catalog snapshot.","15":"Waiting for a read of a serialized historical catalog snapshot.","16":"Waiting for a read of a serialized historical catalog snapshot.","17":"Waiting for a read of a serialized historical catalog snapshot","18":"Waiting for a read of a serialized historical catalog snapshot"},"official_description_zh":"等待读取序列化的历史系统目录 snapshot。","mechanism":{"en":"`WAIT_EVENT_SNAPBUILD_READ` at `src/backend/replication/logical/snapbuild.c:1937` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:250`. The instrumented operation is: Waiting for a read of a serialized historical catalog snapshot. PostgreSQL reports SnapbuildRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_SNAPBUILD_READ` 位于 `src/backend/replication/logical/snapbuild.c:1937`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:250`。探针覆盖的操作是：等待读取序列化的历史系统目录 snapshot。PostgreSQL 在 SnapbuildRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/SnapbuildRead","title_zh":"正在等待 IO/SnapbuildRead 的会话","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 = 'IO'\n  AND wait_event = 'SnapbuildRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'SnapbuildRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/snapbuild.c","line":1937,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SNAPBUILD_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SNAPBUILD_READ);","grep_pattern":"WAIT_EVENT_SNAPBUILD_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/snapbuild.c#L1937"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":250,"kind":"catalog_definition","status":"live_trigger","symbol":"SNAPBUILD_READ","excerpt":"SNAPBUILD_READ\t\"Waiting for a read of a serialized historical catalog snapshot.\"","grep_pattern":"SNAPBUILD_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L250"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-snapbuild-sync","type":"IO","name":"SnapbuildSync","slug":"snapbuild-sync","url":"/io/snapbuild-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a serialized historical catalog snapshot to reach durable storage.","14":"Waiting for a serialized historical catalog snapshot to reach durable storage.","15":"Waiting for a serialized historical catalog snapshot to reach durable storage.","16":"Waiting for a serialized historical catalog snapshot to reach durable storage.","17":"Waiting for a serialized historical catalog snapshot to reach durable storage","18":"Waiting for a serialized historical catalog snapshot to reach durable storage"},"official_description_zh":"等待序列化的历史系统目录 snapshot 到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_SNAPBUILD_SYNC` at `src/backend/replication/logical/snapbuild.c:1680` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:251`. The instrumented operation is: Waiting for a serialized historical catalog snapshot to reach durable storage. PostgreSQL reports SnapbuildSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_SNAPBUILD_SYNC` 位于 `src/backend/replication/logical/snapbuild.c:1680`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:251`。探针覆盖的操作是：等待序列化的历史系统目录 snapshot 到达持久化存储。PostgreSQL 在 SnapbuildSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/SnapbuildSync","title_zh":"正在等待 IO/SnapbuildSync 的会话","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 = 'IO'\n  AND wait_event = 'SnapbuildSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'SnapbuildSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/snapbuild.c","line":1680,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SNAPBUILD_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SNAPBUILD_SYNC);","grep_pattern":"WAIT_EVENT_SNAPBUILD_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/snapbuild.c#L1680"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":251,"kind":"catalog_definition","status":"live_trigger","symbol":"SNAPBUILD_SYNC","excerpt":"SNAPBUILD_SYNC\t\"Waiting for a serialized historical catalog snapshot to reach durable storage.\"","grep_pattern":"SNAPBUILD_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L251"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-snapbuild-write","type":"IO","name":"SnapbuildWrite","slug":"snapbuild-write","url":"/io/snapbuild-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write of a serialized historical catalog snapshot.","14":"Waiting for a write of a serialized historical catalog snapshot.","15":"Waiting for a write of a serialized historical catalog snapshot.","16":"Waiting for a write of a serialized historical catalog snapshot.","17":"Waiting for a write of a serialized historical catalog snapshot","18":"Waiting for a write of a serialized historical catalog snapshot"},"official_description_zh":"等待写入序列化的历史系统目录 snapshot。","mechanism":{"en":"`WAIT_EVENT_SNAPBUILD_WRITE` at `src/backend/replication/logical/snapbuild.c:1654` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:252`. The instrumented operation is: Waiting for a write of a serialized historical catalog snapshot. PostgreSQL reports SnapbuildWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_SNAPBUILD_WRITE` 位于 `src/backend/replication/logical/snapbuild.c:1654`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:252`。探针覆盖的操作是：等待写入序列化的历史系统目录 snapshot。PostgreSQL 在 SnapbuildWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/SnapbuildWrite","title_zh":"正在等待 IO/SnapbuildWrite 的会话","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 = 'IO'\n  AND wait_event = 'SnapbuildWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'SnapbuildWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/snapbuild.c","line":1654,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SNAPBUILD_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SNAPBUILD_WRITE);","grep_pattern":"WAIT_EVENT_SNAPBUILD_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/snapbuild.c#L1654"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":252,"kind":"catalog_definition","status":"live_trigger","symbol":"SNAPBUILD_WRITE","excerpt":"SNAPBUILD_WRITE\t\"Waiting for a write of a serialized historical catalog snapshot.\"","grep_pattern":"SNAPBUILD_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L252"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-timeline-history-file-sync","type":"IO","name":"TimelineHistoryFileSync","slug":"timeline-history-file-sync","url":"/io/timeline-history-file-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a timeline history file received via streaming replication to reach durable storage.","14":"Waiting for a timeline history file received via streaming replication to reach durable storage.","15":"Waiting for a timeline history file received via streaming replication to reach durable storage.","16":"Waiting for a timeline history file received via streaming replication to reach durable storage.","17":"Waiting for a timeline history file received via streaming replication to reach durable storage","18":"Waiting for a timeline history file received via streaming replication to reach durable storage"},"official_description_zh":"等待通过流复制接收的时间线历史文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_TIMELINE_HISTORY_FILE_SYNC` at `src/backend/access/transam/timeline.c:502` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:253`. The instrumented operation is: Waiting for a timeline history file received via streaming replication to reach durable storage. PostgreSQL reports TimelineHistoryFileSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_TIMELINE_HISTORY_FILE_SYNC` 位于 `src/backend/access/transam/timeline.c:502`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:253`。探针覆盖的操作是：等待通过流复制接收的时间线历史文件到达持久化存储。PostgreSQL 在 TimelineHistoryFileSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/TimelineHistoryFileSync","title_zh":"正在等待 IO/TimelineHistoryFileSync 的会话","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 = 'IO'\n  AND wait_event = 'TimelineHistoryFileSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'TimelineHistoryFileSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/timeline.c","line":502,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_TIMELINE_HISTORY_FILE_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_TIMELINE_HISTORY_FILE_SYNC);","grep_pattern":"WAIT_EVENT_TIMELINE_HISTORY_FILE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/timeline.c#L502"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":253,"kind":"catalog_definition","status":"live_trigger","symbol":"TIMELINE_HISTORY_FILE_SYNC","excerpt":"TIMELINE_HISTORY_FILE_SYNC\t\"Waiting for a timeline history file received via streaming replication to reach durable storage.\"","grep_pattern":"TIMELINE_HISTORY_FILE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L253"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-timeline-history-file-write","type":"IO","name":"TimelineHistoryFileWrite","slug":"timeline-history-file-write","url":"/io/timeline-history-file-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write of a timeline history file received via streaming replication.","14":"Waiting for a write of a timeline history file received via streaming replication.","15":"Waiting for a write of a timeline history file received via streaming replication.","16":"Waiting for a write of a timeline history file received via streaming replication.","17":"Waiting for a write of a timeline history file received via streaming replication","18":"Waiting for a write of a timeline history file received via streaming replication"},"official_description_zh":"等待写入通过流复制接收的时间线历史文件。","mechanism":{"en":"`WAIT_EVENT_TIMELINE_HISTORY_FILE_WRITE` at `src/backend/access/transam/timeline.c:484` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:254`. The instrumented operation is: Waiting for a write of a timeline history file received via streaming replication. PostgreSQL reports TimelineHistoryFileWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_TIMELINE_HISTORY_FILE_WRITE` 位于 `src/backend/access/transam/timeline.c:484`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:254`。探针覆盖的操作是：等待写入通过流复制接收的时间线历史文件。PostgreSQL 在 TimelineHistoryFileWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/TimelineHistoryFileWrite","title_zh":"正在等待 IO/TimelineHistoryFileWrite 的会话","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 = 'IO'\n  AND wait_event = 'TimelineHistoryFileWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'TimelineHistoryFileWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/timeline.c","line":484,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_TIMELINE_HISTORY_FILE_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_TIMELINE_HISTORY_FILE_WRITE);","grep_pattern":"WAIT_EVENT_TIMELINE_HISTORY_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/timeline.c#L484"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":254,"kind":"catalog_definition","status":"live_trigger","symbol":"TIMELINE_HISTORY_FILE_WRITE","excerpt":"TIMELINE_HISTORY_FILE_WRITE\t\"Waiting for a write of a timeline history file received via streaming replication.\"","grep_pattern":"TIMELINE_HISTORY_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L254"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-timeline-history-read","type":"IO","name":"TimelineHistoryRead","slug":"timeline-history-read","url":"/io/timeline-history-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a read of a timeline history file.","14":"Waiting for a read of a timeline history file.","15":"Waiting for a read of a timeline history file.","16":"Waiting for a read of a timeline history file.","17":"Waiting for a read of a timeline history file","18":"Waiting for a read of a timeline history file"},"official_description_zh":"等待读取时间线历史文件。","mechanism":{"en":"`WAIT_EVENT_TIMELINE_HISTORY_READ` at `src/backend/access/transam/timeline.c:135` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:255`. The instrumented operation is: Waiting for a read of a timeline history file. PostgreSQL reports TimelineHistoryRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_TIMELINE_HISTORY_READ` 位于 `src/backend/access/transam/timeline.c:135`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:255`。探针覆盖的操作是：等待读取时间线历史文件。PostgreSQL 在 TimelineHistoryRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/TimelineHistoryRead","title_zh":"正在等待 IO/TimelineHistoryRead 的会话","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 = 'IO'\n  AND wait_event = 'TimelineHistoryRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'TimelineHistoryRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/timeline.c","line":135,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_TIMELINE_HISTORY_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_TIMELINE_HISTORY_READ);","grep_pattern":"WAIT_EVENT_TIMELINE_HISTORY_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/timeline.c#L135"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":255,"kind":"catalog_definition","status":"live_trigger","symbol":"TIMELINE_HISTORY_READ","excerpt":"TIMELINE_HISTORY_READ\t\"Waiting for a read of a timeline history file.\"","grep_pattern":"TIMELINE_HISTORY_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L255"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-timeline-history-sync","type":"IO","name":"TimelineHistorySync","slug":"timeline-history-sync","url":"/io/timeline-history-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a newly created timeline history file to reach durable storage.","14":"Waiting for a newly created timeline history file to reach durable storage.","15":"Waiting for a newly created timeline history file to reach durable storage.","16":"Waiting for a newly created timeline history file to reach durable storage.","17":"Waiting for a newly created timeline history file to reach durable storage","18":"Waiting for a newly created timeline history file to reach durable storage"},"official_description_zh":"等待新建的时间线历史文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_TIMELINE_HISTORY_SYNC` at `src/backend/access/transam/timeline.c:428` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:256`. The instrumented operation is: Waiting for a newly created timeline history file to reach durable storage. PostgreSQL reports TimelineHistorySync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_TIMELINE_HISTORY_SYNC` 位于 `src/backend/access/transam/timeline.c:428`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:256`。探针覆盖的操作是：等待新建的时间线历史文件到达持久化存储。PostgreSQL 在 TimelineHistorySync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/TimelineHistorySync","title_zh":"正在等待 IO/TimelineHistorySync 的会话","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 = 'IO'\n  AND wait_event = 'TimelineHistorySync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'TimelineHistorySync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/timeline.c","line":428,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_TIMELINE_HISTORY_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_TIMELINE_HISTORY_SYNC);","grep_pattern":"WAIT_EVENT_TIMELINE_HISTORY_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/timeline.c#L428"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":256,"kind":"catalog_definition","status":"live_trigger","symbol":"TIMELINE_HISTORY_SYNC","excerpt":"TIMELINE_HISTORY_SYNC\t\"Waiting for a newly created timeline history file to reach durable storage.\"","grep_pattern":"TIMELINE_HISTORY_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L256"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-timeline-history-write","type":"IO","name":"TimelineHistoryWrite","slug":"timeline-history-write","url":"/io/timeline-history-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write of a newly created timeline history file.","14":"Waiting for a write of a newly created timeline history file.","15":"Waiting for a write of a newly created timeline history file.","16":"Waiting for a write of a newly created timeline history file.","17":"Waiting for a write of a newly created timeline history file","18":"Waiting for a write of a newly created timeline history file"},"official_description_zh":"等待写入新建的时间线历史文件。","mechanism":{"en":"`WAIT_EVENT_TIMELINE_HISTORY_WRITE` at `src/backend/access/transam/timeline.c:366` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:257`. The instrumented operation is: Waiting for a write of a newly created timeline history file. PostgreSQL reports TimelineHistoryWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_TIMELINE_HISTORY_WRITE` 位于 `src/backend/access/transam/timeline.c:366`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:257`。探针覆盖的操作是：等待写入新建的时间线历史文件。PostgreSQL 在 TimelineHistoryWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/TimelineHistoryWrite","title_zh":"正在等待 IO/TimelineHistoryWrite 的会话","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 = 'IO'\n  AND wait_event = 'TimelineHistoryWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'TimelineHistoryWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/timeline.c","line":366,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_TIMELINE_HISTORY_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_TIMELINE_HISTORY_WRITE);","grep_pattern":"WAIT_EVENT_TIMELINE_HISTORY_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/timeline.c#L366"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":257,"kind":"catalog_definition","status":"live_trigger","symbol":"TIMELINE_HISTORY_WRITE","excerpt":"TIMELINE_HISTORY_WRITE\t\"Waiting for a write of a newly created timeline history file.\"","grep_pattern":"TIMELINE_HISTORY_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L257"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-twophase-file-read","type":"IO","name":"TwophaseFileRead","slug":"twophase-file-read","url":"/io/twophase-file-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a read of a two phase state file.","14":"Waiting for a read of a two phase state file.","15":"Waiting for a read of a two phase state file.","16":"Waiting for a read of a two phase state file.","17":"Waiting for a read of a two phase state file","18":"Waiting for a read of a two phase state file"},"official_description_zh":"等待读取两阶段状态文件。","mechanism":{"en":"`WAIT_EVENT_TWOPHASE_FILE_READ` at `src/backend/access/transam/twophase.c:1347` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:258`. The instrumented operation is: Waiting for a read of a two phase state file. PostgreSQL reports TwophaseFileRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_TWOPHASE_FILE_READ` 位于 `src/backend/access/transam/twophase.c:1347`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:258`。探针覆盖的操作是：等待读取两阶段状态文件。PostgreSQL 在 TwophaseFileRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/TwophaseFileRead","title_zh":"正在等待 IO/TwophaseFileRead 的会话","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 = 'IO'\n  AND wait_event = 'TwophaseFileRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'TwophaseFileRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/twophase.c","line":1347,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_TWOPHASE_FILE_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_TWOPHASE_FILE_READ);","grep_pattern":"WAIT_EVENT_TWOPHASE_FILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/twophase.c#L1347"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":258,"kind":"catalog_definition","status":"live_trigger","symbol":"TWOPHASE_FILE_READ","excerpt":"TWOPHASE_FILE_READ\t\"Waiting for a read of a two phase state file.\"","grep_pattern":"TWOPHASE_FILE_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L258"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-twophase-file-sync","type":"IO","name":"TwophaseFileSync","slug":"twophase-file-sync","url":"/io/twophase-file-sync/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a two phase state file to reach durable storage.","14":"Waiting for a two phase state file to reach durable storage.","15":"Waiting for a two phase state file to reach durable storage.","16":"Waiting for a two phase state file to reach durable storage.","17":"Waiting for a two phase state file to reach durable storage","18":"Waiting for a two phase state file to reach durable storage"},"official_description_zh":"等待两阶段状态文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_TWOPHASE_FILE_SYNC` at `src/backend/access/transam/twophase.c:1774` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:259`. The instrumented operation is: Waiting for a two phase state file to reach durable storage. PostgreSQL reports TwophaseFileSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_TWOPHASE_FILE_SYNC` 位于 `src/backend/access/transam/twophase.c:1774`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:259`。探针覆盖的操作是：等待两阶段状态文件到达持久化存储。PostgreSQL 在 TwophaseFileSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/TwophaseFileSync","title_zh":"正在等待 IO/TwophaseFileSync 的会话","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 = 'IO'\n  AND wait_event = 'TwophaseFileSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'TwophaseFileSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/twophase.c","line":1774,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_TWOPHASE_FILE_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_TWOPHASE_FILE_SYNC);","grep_pattern":"WAIT_EVENT_TWOPHASE_FILE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/twophase.c#L1774"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":259,"kind":"catalog_definition","status":"live_trigger","symbol":"TWOPHASE_FILE_SYNC","excerpt":"TWOPHASE_FILE_SYNC\t\"Waiting for a two phase state file to reach durable storage.\"","grep_pattern":"TWOPHASE_FILE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L259"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-twophase-file-write","type":"IO","name":"TwophaseFileWrite","slug":"twophase-file-write","url":"/io/twophase-file-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a write of a two phase state file.","14":"Waiting for a write of a two phase state file.","15":"Waiting for a write of a two phase state file.","16":"Waiting for a write of a two phase state file.","17":"Waiting for a write of a two phase state file","18":"Waiting for a write of a two phase state file"},"official_description_zh":"等待写入两阶段状态文件。","mechanism":{"en":"`WAIT_EVENT_TWOPHASE_FILE_WRITE` at `src/backend/access/transam/twophase.c:1749` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:260`. The instrumented operation is: Waiting for a write of a two phase state file. PostgreSQL reports TwophaseFileWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_TWOPHASE_FILE_WRITE` 位于 `src/backend/access/transam/twophase.c:1749`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:260`。探针覆盖的操作是：等待写入两阶段状态文件。PostgreSQL 在 TwophaseFileWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/TwophaseFileWrite","title_zh":"正在等待 IO/TwophaseFileWrite 的会话","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 = 'IO'\n  AND wait_event = 'TwophaseFileWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'TwophaseFileWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/twophase.c","line":1749,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_TWOPHASE_FILE_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_TWOPHASE_FILE_WRITE);","grep_pattern":"WAIT_EVENT_TWOPHASE_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/twophase.c#L1749"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":260,"kind":"catalog_definition","status":"live_trigger","symbol":"TWOPHASE_FILE_WRITE","excerpt":"TWOPHASE_FILE_WRITE\t\"Waiting for a write of a two phase state file.\"","grep_pattern":"TWOPHASE_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L260"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-version-file-sync","type":"IO","name":"VersionFileSync","slug":"version-file-sync","url":"/io/version-file-sync/","versions":[15,16,17,18],"version_range":"15-18","availability":{},"aliases":[],"official_descriptions":{"15":"Waiting for the version file to reach durable storage while creating a database.","16":"Waiting for the version file to reach durable storage while creating a database.","17":"Waiting for the version file to reach durable storage while creating a database","18":"Waiting for the version file to reach durable storage while creating a database"},"official_description_zh":"等待创建数据库时的版本文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_VERSION_FILE_SYNC` at `src/backend/commands/dbcommands.c:511` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:261`. The instrumented operation is: Waiting for the version file to reach durable storage while creating a database. PostgreSQL reports VersionFileSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_VERSION_FILE_SYNC` 位于 `src/backend/commands/dbcommands.c:511`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:261`。探针覆盖的操作是：等待创建数据库时的版本文件到达持久化存储。PostgreSQL 在 VersionFileSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/VersionFileSync","title_zh":"正在等待 IO/VersionFileSync 的会话","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 = 'IO'\n  AND wait_event = 'VersionFileSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'VersionFileSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/commands/dbcommands.c","line":511,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_VERSION_FILE_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_VERSION_FILE_SYNC);","grep_pattern":"WAIT_EVENT_VERSION_FILE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/commands/dbcommands.c#L511"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":261,"kind":"catalog_definition","status":"live_trigger","symbol":"VERSION_FILE_SYNC","excerpt":"VERSION_FILE_SYNC\t\"Waiting for the version file to reach durable storage while creating a database.\"","grep_pattern":"VERSION_FILE_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L261"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-version-file-write","type":"IO","name":"VersionFileWrite","slug":"version-file-write","url":"/io/version-file-write/","versions":[15,16,17,18],"version_range":"15-18","availability":{},"aliases":[],"official_descriptions":{"15":"Waiting for the version file to be written while creating a database.","16":"Waiting for the version file to be written while creating a database.","17":"Waiting for the version file to be written while creating a database","18":"Waiting for the version file to be written while creating a database"},"official_description_zh":"等待在创建数据库时写入版本文件。","mechanism":{"en":"`WAIT_EVENT_VERSION_FILE_WRITE` at `src/backend/commands/dbcommands.c:498` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:262`. The instrumented operation is: Waiting for the version file to be written while creating a database. PostgreSQL reports VersionFileWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_VERSION_FILE_WRITE` 位于 `src/backend/commands/dbcommands.c:498`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:262`。探针覆盖的操作是：等待在创建数据库时写入版本文件。PostgreSQL 在 VersionFileWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/VersionFileWrite","title_zh":"正在等待 IO/VersionFileWrite 的会话","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 = 'IO'\n  AND wait_event = 'VersionFileWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'VersionFileWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/commands/dbcommands.c","line":498,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_VERSION_FILE_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_VERSION_FILE_WRITE);","grep_pattern":"WAIT_EVENT_VERSION_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/commands/dbcommands.c#L498"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":262,"kind":"catalog_definition","status":"live_trigger","symbol":"VERSION_FILE_WRITE","excerpt":"VERSION_FILE_WRITE\t\"Waiting for the version file to be written while creating a database.\"","grep_pattern":"VERSION_FILE_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L262"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-bootstrap-sync","type":"IO","name":"WalBootstrapSync","slug":"wal-bootstrap-sync","url":"/io/wal-bootstrap-sync/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALBootstrapSync","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for WAL to reach durable storage during bootstrapping","18":"Waiting for WAL to reach durable storage during bootstrapping"},"official_description_zh":"等待引导初始化期间的 WAL 到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_WAL_BOOTSTRAP_SYNC` at `src/backend/access/transam/xlog.c:4776` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:733`. The instrumented operation is: Waiting for WAL to reach durable storage during bootstrapping. PostgreSQL reports WalBootstrapSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_BOOTSTRAP_SYNC` 位于 `src/backend/access/transam/xlog.c:4776`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:733`。探针覆盖的操作是：等待引导初始化期间的 WAL 到达持久化存储。PostgreSQL 在 WalBootstrapSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalBootstrapSync","title_zh":"正在等待 IO/WalBootstrapSync 的会话","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 = 'IO'\n  AND wait_event = 'WalBootstrapSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalBootstrapSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlog.c","line":4776,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_BOOTSTRAP_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_BOOTSTRAP_SYNC);","grep_pattern":"WAIT_EVENT_WAL_BOOTSTRAP_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlog.c#L4776"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":733,"kind":"catalog_definition","status":"live_trigger","symbol":"WALBootstrapSync","excerpt":"event_name = \"WALBootstrapSync\";","grep_pattern":"WALBootstrapSync","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L733"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":5198,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_BOOTSTRAP_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_BOOTSTRAP_SYNC);","grep_pattern":"WAIT_EVENT_WAL_BOOTSTRAP_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L5198"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":264,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_BOOTSTRAP_SYNC","excerpt":"WAL_BOOTSTRAP_SYNC\t\"Waiting for WAL to reach durable storage during bootstrapping.\"","grep_pattern":"WAL_BOOTSTRAP_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L264"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-bootstrap-write","type":"IO","name":"WalBootstrapWrite","slug":"wal-bootstrap-write","url":"/io/wal-bootstrap-write/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALBootstrapWrite","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a write of a WAL page during bootstrapping","18":"Waiting for a write of a WAL page during bootstrapping"},"official_description_zh":"等待在引导初始化期间写入 WAL 页面。","mechanism":{"en":"`WAIT_EVENT_WAL_BOOTSTRAP_WRITE` at `src/backend/access/transam/xlog.c:4764` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:736`. The instrumented operation is: Waiting for a write of a WAL page during bootstrapping. PostgreSQL reports WalBootstrapWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_BOOTSTRAP_WRITE` 位于 `src/backend/access/transam/xlog.c:4764`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:736`。探针覆盖的操作是：等待在引导初始化期间写入 WAL 页面。PostgreSQL 在 WalBootstrapWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalBootstrapWrite","title_zh":"正在等待 IO/WalBootstrapWrite 的会话","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 = 'IO'\n  AND wait_event = 'WalBootstrapWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalBootstrapWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlog.c","line":4764,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_BOOTSTRAP_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_BOOTSTRAP_WRITE);","grep_pattern":"WAIT_EVENT_WAL_BOOTSTRAP_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlog.c#L4764"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":736,"kind":"catalog_definition","status":"live_trigger","symbol":"WALBootstrapWrite","excerpt":"event_name = \"WALBootstrapWrite\";","grep_pattern":"WALBootstrapWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L736"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":5186,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_BOOTSTRAP_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_BOOTSTRAP_WRITE);","grep_pattern":"WAIT_EVENT_WAL_BOOTSTRAP_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L5186"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":265,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_BOOTSTRAP_WRITE","excerpt":"WAL_BOOTSTRAP_WRITE\t\"Waiting for a write of a WAL page during bootstrapping.\"","grep_pattern":"WAL_BOOTSTRAP_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L265"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-copy-read","type":"IO","name":"WalCopyRead","slug":"wal-copy-read","url":"/io/wal-copy-read/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALCopyRead","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a read when creating a new WAL segment by copying an existing one","18":"Waiting for a read when creating a new WAL segment by copying an existing one"},"official_description_zh":"等待通过复制现有 WAL segment 创建新 WAL segment 时读取数据。","mechanism":{"en":"`WAIT_EVENT_WAL_COPY_READ` at `src/backend/access/transam/xlog.c:3190` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:739`. The instrumented operation is: Waiting for a read when creating a new WAL segment by copying an existing one. PostgreSQL reports WalCopyRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_COPY_READ` 位于 `src/backend/access/transam/xlog.c:3190`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:739`。探针覆盖的操作是：等待通过复制现有 WAL segment 创建新 WAL segment 时读取数据。PostgreSQL 在 WalCopyRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalCopyRead","title_zh":"正在等待 IO/WalCopyRead 的会话","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 = 'IO'\n  AND wait_event = 'WalCopyRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalCopyRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlog.c","line":3190,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_COPY_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_COPY_READ);","grep_pattern":"WAIT_EVENT_WAL_COPY_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlog.c#L3190"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":739,"kind":"catalog_definition","status":"live_trigger","symbol":"WALCopyRead","excerpt":"event_name = \"WALCopyRead\";","grep_pattern":"WALCopyRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":3471,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_COPY_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_COPY_READ);","grep_pattern":"WAIT_EVENT_WAL_COPY_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L3471"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":266,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_COPY_READ","excerpt":"WAL_COPY_READ\t\"Waiting for a read when creating a new WAL segment by copying an existing one.\"","grep_pattern":"WAL_COPY_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L266"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-copy-sync","type":"IO","name":"WalCopySync","slug":"wal-copy-sync","url":"/io/wal-copy-sync/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALCopySync","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a new WAL segment created by copying an existing one to reach durable storage","18":"Waiting for a new WAL segment created by copying an existing one to reach durable storage"},"official_description_zh":"等待通过复制现有 WAL segment 创建的新 WAL segment 到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_WAL_COPY_SYNC` at `src/backend/access/transam/xlog.c:3227` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:742`. The instrumented operation is: Waiting for a new WAL segment created by copying an existing one to reach durable storage. PostgreSQL reports WalCopySync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_COPY_SYNC` 位于 `src/backend/access/transam/xlog.c:3227`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:742`。探针覆盖的操作是：等待通过复制现有 WAL segment 创建的新 WAL segment 到达持久化存储。PostgreSQL 在 WalCopySync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalCopySync","title_zh":"正在等待 IO/WalCopySync 的会话","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 = 'IO'\n  AND wait_event = 'WalCopySync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalCopySync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlog.c","line":3227,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_COPY_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_COPY_SYNC);","grep_pattern":"WAIT_EVENT_WAL_COPY_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlog.c#L3227"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":742,"kind":"catalog_definition","status":"live_trigger","symbol":"WALCopySync","excerpt":"event_name = \"WALCopySync\";","grep_pattern":"WALCopySync","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L742"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":3508,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_COPY_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_COPY_SYNC);","grep_pattern":"WAIT_EVENT_WAL_COPY_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L3508"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":267,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_COPY_SYNC","excerpt":"WAL_COPY_SYNC\t\"Waiting for a new WAL segment created by copying an existing one to reach durable storage.\"","grep_pattern":"WAL_COPY_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L267"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-copy-write","type":"IO","name":"WalCopyWrite","slug":"wal-copy-write","url":"/io/wal-copy-write/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALCopyWrite","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a write when creating a new WAL segment by copying an existing one","18":"Waiting for a write when creating a new WAL segment by copying an existing one"},"official_description_zh":"等待通过复制现有 WAL segment 创建新 WAL segment 时写入数据。","mechanism":{"en":"`WAIT_EVENT_WAL_COPY_WRITE` at `src/backend/access/transam/xlog.c:3208` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:745`. The instrumented operation is: Waiting for a write when creating a new WAL segment by copying an existing one. PostgreSQL reports WalCopyWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_COPY_WRITE` 位于 `src/backend/access/transam/xlog.c:3208`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:745`。探针覆盖的操作是：等待通过复制现有 WAL segment 创建新 WAL segment 时写入数据。PostgreSQL 在 WalCopyWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalCopyWrite","title_zh":"正在等待 IO/WalCopyWrite 的会话","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 = 'IO'\n  AND wait_event = 'WalCopyWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalCopyWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlog.c","line":3208,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_COPY_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_COPY_WRITE);","grep_pattern":"WAIT_EVENT_WAL_COPY_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlog.c#L3208"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":745,"kind":"catalog_definition","status":"live_trigger","symbol":"WALCopyWrite","excerpt":"event_name = \"WALCopyWrite\";","grep_pattern":"WALCopyWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L745"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":3489,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_COPY_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_COPY_WRITE);","grep_pattern":"WAIT_EVENT_WAL_COPY_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L3489"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":268,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_COPY_WRITE","excerpt":"WAL_COPY_WRITE\t\"Waiting for a write when creating a new WAL segment by copying an existing one.\"","grep_pattern":"WAL_COPY_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L268"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-init-sync","type":"IO","name":"WalInitSync","slug":"wal-init-sync","url":"/io/wal-init-sync/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALInitSync","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a newly initialized WAL file to reach durable storage","18":"Waiting for a newly initialized WAL file to reach durable storage"},"official_description_zh":"等待新初始化的 WAL 文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_WAL_INIT_SYNC` at `src/backend/access/transam/xlog.c:3028` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:748`. The instrumented operation is: Waiting for a newly initialized WAL file to reach durable storage. PostgreSQL reports WalInitSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_INIT_SYNC` 位于 `src/backend/access/transam/xlog.c:3028`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:748`。探针覆盖的操作是：等待新初始化的 WAL 文件到达持久化存储。PostgreSQL 在 WalInitSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalInitSync","title_zh":"正在等待 IO/WalInitSync 的会话","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 = 'IO'\n  AND wait_event = 'WalInitSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalInitSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlog.c","line":3028,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_INIT_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_INIT_SYNC);","grep_pattern":"WAIT_EVENT_WAL_INIT_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlog.c#L3028"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":748,"kind":"catalog_definition","status":"live_trigger","symbol":"WALInitSync","excerpt":"event_name = \"WALInitSync\";","grep_pattern":"WALInitSync","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L748"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":3306,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_INIT_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_INIT_SYNC);","grep_pattern":"WAIT_EVENT_WAL_INIT_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L3306"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":269,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_INIT_SYNC","excerpt":"WAL_INIT_SYNC\t\"Waiting for a newly initialized WAL file to reach durable storage.\"","grep_pattern":"WAL_INIT_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L269"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-init-write","type":"IO","name":"WalInitWrite","slug":"wal-init-write","url":"/io/wal-init-write/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALInitWrite","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a write while initializing a new WAL file","18":"Waiting for a write while initializing a new WAL file"},"official_description_zh":"等待在初始化新 WAL 文件时写入数据。","mechanism":{"en":"`WAIT_EVENT_WAL_INIT_WRITE` at `src/backend/access/transam/xlog.c:2977` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:751`. The instrumented operation is: Waiting for a write while initializing a new WAL file. PostgreSQL reports WalInitWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_INIT_WRITE` 位于 `src/backend/access/transam/xlog.c:2977`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:751`。探针覆盖的操作是：等待在初始化新 WAL 文件时写入数据。PostgreSQL 在 WalInitWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalInitWrite","title_zh":"正在等待 IO/WalInitWrite 的会话","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 = 'IO'\n  AND wait_event = 'WalInitWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalInitWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlog.c","line":2977,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_INIT_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_INIT_WRITE);","grep_pattern":"WAIT_EVENT_WAL_INIT_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlog.c#L2977"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":751,"kind":"catalog_definition","status":"live_trigger","symbol":"WALInitWrite","excerpt":"event_name = \"WALInitWrite\";","grep_pattern":"WALInitWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L751"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":3244,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_INIT_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_INIT_WRITE);","grep_pattern":"WAIT_EVENT_WAL_INIT_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L3244"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":270,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_INIT_WRITE","excerpt":"WAL_INIT_WRITE\t\"Waiting for a write while initializing a new WAL file.\"","grep_pattern":"WAL_INIT_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L270"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-read","type":"IO","name":"WalRead","slug":"wal-read","url":"/io/wal-read/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALRead","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a read from a WAL file","18":"Waiting for a read from a WAL file"},"official_description_zh":"等待从 WAL 文件中读取数据。","mechanism":{"en":"`WAIT_EVENT_WAL_READ` at `src/backend/access/transam/xlogreader.c:1570` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:754`. The instrumented operation is: Waiting for a read from a WAL file. PostgreSQL reports WalRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_READ` 位于 `src/backend/access/transam/xlogreader.c:1570`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:754`。探针覆盖的操作是：等待从 WAL 文件中读取数据。PostgreSQL 在 WalRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalRead","title_zh":"正在等待 IO/WalRead 的会话","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 = 'IO'\n  AND wait_event = 'WalRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlogreader.c","line":1570,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_READ);","grep_pattern":"WAIT_EVENT_WAL_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlogreader.c#L1570"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":754,"kind":"catalog_definition","status":"live_trigger","symbol":"WALRead","excerpt":"event_name = \"WALRead\";","grep_pattern":"WALRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L754"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlogreader.c","line":1572,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_READ);","grep_pattern":"WAIT_EVENT_WAL_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlogreader.c#L1572"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":271,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_READ","excerpt":"WAL_READ\t\"Waiting for a read from a WAL file.\"","grep_pattern":"WAL_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L271"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-summary-read","type":"IO","name":"WalSummaryRead","slug":"wal-summary-read","url":"/io/wal-summary-read/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting for a read from a WAL summary file","18":"Waiting for a read from a WAL summary file"},"official_description_zh":"等待从 WAL summary 文件中读取数据。","mechanism":{"en":"`WAIT_EVENT_WAL_SUMMARY_READ` at `src/backend/backup/walsummary.c:279` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:272`. The instrumented operation is: Waiting for a read from a WAL summary file. PostgreSQL reports WalSummaryRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_SUMMARY_READ` 位于 `src/backend/backup/walsummary.c:279`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:272`。探针覆盖的操作是：等待从 WAL summary 文件中读取数据。PostgreSQL 在 WalSummaryRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalSummaryRead","title_zh":"正在等待 IO/WalSummaryRead 的会话","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 = 'IO'\n  AND wait_event = 'WalSummaryRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalSummaryRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/backup/walsummary.c","line":279,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SUMMARY_READ","excerpt":"WAIT_EVENT_WAL_SUMMARY_READ);","grep_pattern":"WAIT_EVENT_WAL_SUMMARY_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/backup/walsummary.c#L279"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":272,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_SUMMARY_READ","excerpt":"WAL_SUMMARY_READ\t\"Waiting for a read from a WAL summary file.\"","grep_pattern":"WAL_SUMMARY_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L272"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-summary-write","type":"IO","name":"WalSummaryWrite","slug":"wal-summary-write","url":"/io/wal-summary-write/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting for a write to a WAL summary file","18":"Waiting for a write to a WAL summary file"},"official_description_zh":"等待向 WAL summary 文件写入数据。","mechanism":{"en":"`WAIT_EVENT_WAL_SUMMARY_WRITE` at `src/backend/backup/walsummary.c:300` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:273`. The instrumented operation is: Waiting for a write to a WAL summary file. PostgreSQL reports WalSummaryWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_SUMMARY_WRITE` 位于 `src/backend/backup/walsummary.c:300`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:273`。探针覆盖的操作是：等待向 WAL summary 文件写入数据。PostgreSQL 在 WalSummaryWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalSummaryWrite","title_zh":"正在等待 IO/WalSummaryWrite 的会话","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 = 'IO'\n  AND wait_event = 'WalSummaryWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalSummaryWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/backup/walsummary.c","line":300,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SUMMARY_WRITE","excerpt":"WAIT_EVENT_WAL_SUMMARY_WRITE);","grep_pattern":"WAIT_EVENT_WAL_SUMMARY_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/backup/walsummary.c#L300"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":273,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_SUMMARY_WRITE","excerpt":"WAL_SUMMARY_WRITE\t\"Waiting for a write to a WAL summary file.\"","grep_pattern":"WAL_SUMMARY_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L273"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-sync","type":"IO","name":"WalSync","slug":"wal-sync","url":"/io/wal-sync/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALSync","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a WAL file to reach durable storage","18":"Waiting for a WAL file to reach durable storage"},"official_description_zh":"等待 WAL 文件到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_WAL_SYNC` at `src/backend/access/transam/xlog.c:8303` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:757`. The instrumented operation is: Waiting for a WAL file to reach durable storage. PostgreSQL reports WalSync around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_SYNC` 位于 `src/backend/access/transam/xlog.c:8303`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:757`。探针覆盖的操作是：等待 WAL 文件到达持久化存储。PostgreSQL 在 WalSync 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalSync","title_zh":"正在等待 IO/WalSync 的会话","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 = 'IO'\n  AND wait_event = 'WalSync'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalSync'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlog.c","line":8303,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_SYNC);","grep_pattern":"WAIT_EVENT_WAL_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlog.c#L8303"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":757,"kind":"catalog_definition","status":"live_trigger","symbol":"WALSync","excerpt":"event_name = \"WALSync\";","grep_pattern":"WALSync","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L757"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":8767,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SYNC","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_SYNC);","grep_pattern":"WAIT_EVENT_WAL_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L8767"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":274,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_SYNC","excerpt":"WAL_SYNC\t\"Waiting for a WAL file to reach durable storage.\"","grep_pattern":"WAL_SYNC","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L274"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-sync-method-assign","type":"IO","name":"WalSyncMethodAssign","slug":"wal-sync-method-assign","url":"/io/wal-sync-method-assign/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALSyncMethodAssign","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for data to reach durable storage while assigning a new WAL sync method","18":"Waiting for data to reach durable storage while assigning a new WAL sync method"},"official_description_zh":"等待分配新的 WAL 同步方法时写入的数据到达持久化存储。","mechanism":{"en":"`WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN` at `src/backend/access/transam/xlog.c:8251` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:760`. The instrumented operation is: Waiting for data to reach durable storage while assigning a new WAL sync method. PostgreSQL reports WalSyncMethodAssign around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN` 位于 `src/backend/access/transam/xlog.c:8251`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:760`。探针覆盖的操作是：等待分配新的 WAL 同步方法时写入的数据到达持久化存储。PostgreSQL 在 WalSyncMethodAssign 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalSyncMethodAssign","title_zh":"正在等待 IO/WalSyncMethodAssign 的会话","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 = 'IO'\n  AND wait_event = 'WalSyncMethodAssign'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalSyncMethodAssign'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlog.c","line":8251,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN);","grep_pattern":"WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlog.c#L8251"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":760,"kind":"catalog_definition","status":"live_trigger","symbol":"WALSyncMethodAssign","excerpt":"event_name = \"WALSyncMethodAssign\";","grep_pattern":"WALSyncMethodAssign","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L760"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":8716,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN);","grep_pattern":"WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L8716"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":275,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_SYNC_METHOD_ASSIGN","excerpt":"WAL_SYNC_METHOD_ASSIGN\t\"Waiting for data to reach durable storage while assigning a new WAL sync method.\"","grep_pattern":"WAL_SYNC_METHOD_ASSIGN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L275"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-wal-write","type":"IO","name":"WalWrite","slug":"wal-write","url":"/io/wal-write/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALWrite","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a write to a WAL file","18":"Waiting for a write to a WAL file"},"official_description_zh":"等待向 WAL 文件写入数据。","mechanism":{"en":"`WAIT_EVENT_WAL_WRITE` at `src/backend/access/transam/xlog.c:2200` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:763`. The instrumented operation is: Waiting for a write to a WAL file. PostgreSQL reports WalWrite around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WAL_WRITE` 位于 `src/backend/access/transam/xlog.c:2200`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:763`。探针覆盖的操作是：等待向 WAL 文件写入数据。PostgreSQL 在 WalWrite 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalWrite","title_zh":"正在等待 IO/WalWrite 的会话","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 = 'IO'\n  AND wait_event = 'WalWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/xlog.c","line":2200,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_WRITE);","grep_pattern":"WAIT_EVENT_WAL_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/xlog.c#L2200"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":763,"kind":"catalog_definition","status":"live_trigger","symbol":"WALWrite","excerpt":"event_name = \"WALWrite\";","grep_pattern":"WALWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L763"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":2433,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_WRITE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WAL_WRITE);","grep_pattern":"WAIT_EVENT_WAL_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L2433"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":276,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_WRITE","excerpt":"WAL_WRITE\t\"Waiting for a write to a WAL file.\"","grep_pattern":"WAL_WRITE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L276"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"io-walsender-timeline-history-read","type":"IO","name":"WalsenderTimelineHistoryRead","slug":"walsender-timeline-history-read","url":"/io/walsender-timeline-history-read/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IO","name":"WALSenderTimelineHistoryRead","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for a read from a timeline history file during a walsender timeline command","18":"Waiting for a read from a timeline history file during a walsender timeline command"},"official_description_zh":"等待在 WAL sender 执行 timeline 命令期间从时间线历史文件中读取数据。","mechanism":{"en":"`WAIT_EVENT_WALSENDER_TIMELINE_HISTORY_READ` at `src/backend/replication/walsender.c:654` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:730`. The instrumented operation is: Waiting for a read from a timeline history file during a walsender timeline command. PostgreSQL reports WalsenderTimelineHistoryRead around the instrumented file or asynchronous-I/O operation named by this event. The backend resumes after the kernel, storage stack, or I/O worker completes that step.","zh":"`WAIT_EVENT_WALSENDER_TIMELINE_HISTORY_READ` 位于 `src/backend/replication/walsender.c:654`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:730`。探针覆盖的操作是：等待在 WAL sender 执行 timeline 命令期间从时间线历史文件中读取数据。PostgreSQL 在 WalsenderTimelineHistoryRead 所表示的文件或异步 I/O 操作周围报告此事件；内核、存储栈或 I/O worker 完成该步骤后，后端继续执行。"},"normal":{"en":"The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.","zh":"当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时，这项等待正常。"},"trouble":{"en":"Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.","zh":"若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IO/WalsenderTimelineHistoryRead","title_zh":"正在等待 IO/WalsenderTimelineHistoryRead 的会话","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 = 'IO'\n  AND wait_event = 'WalsenderTimelineHistoryRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IO cohort","title_zh":"当前 IO 等待分布","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 = 'IO'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IO'\n  AND a.wait_event = 'WalsenderTimelineHistoryRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Confirm the workload phase should touch this file class.","Correlate with pg_stat_io where available and per-device latency.","Fix the access path, burst shape, or affected storage tier before tuning unrelated memory settings."],"zh":["确认当前负载阶段本来就应访问这类文件。","在可用版本上关联 pg_stat_io 与具体设备延迟。","先修复访问路径、突发形状或受影响存储层，再调整无关的内存参数。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/replication/walsender.c","line":654,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WALSENDER_TIMELINE_HISTORY_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WALSENDER_TIMELINE_HISTORY_READ);","grep_pattern":"WAIT_EVENT_WALSENDER_TIMELINE_HISTORY_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/replication/walsender.c#L654"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":730,"kind":"catalog_definition","status":"live_trigger","symbol":"WALSenderTimelineHistoryRead","excerpt":"event_name = \"WALSenderTimelineHistoryRead\";","grep_pattern":"WALSenderTimelineHistoryRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L730"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/walsender.c","line":637,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WALSENDER_TIMELINE_HISTORY_READ","excerpt":"pgstat_report_wait_start(WAIT_EVENT_WALSENDER_TIMELINE_HISTORY_READ);","grep_pattern":"WAIT_EVENT_WALSENDER_TIMELINE_HISTORY_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/walsender.c#L637"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":263,"kind":"catalog_definition","status":"live_trigger","symbol":"WALSENDER_TIMELINE_HISTORY_READ","excerpt":"WALSENDER_TIMELINE_HISTORY_READ\t\"Waiting for a read from a timeline history file during a walsender timeline command.\"","grep_pattern":"WALSENDER_TIMELINE_HISTORY_READ","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L263"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time","io_read_time","io_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-append-ready","type":"IPC","name":"AppendReady","slug":"append-ready","url":"/ipc/append-ready/","versions":[14,15,16,17,18],"version_range":"14-18","availability":{},"aliases":[],"official_descriptions":{"14":"Waiting for subplan nodes of an Append plan node to be ready.","15":"Waiting for subplan nodes of an Append plan node to be ready.","16":"Waiting for subplan nodes of an Append plan node to be ready.","17":"Waiting for subplan nodes of an Append plan node to be ready","18":"Waiting for subplan nodes of an Append plan node to be ready"},"official_description_zh":"等待 Append 计划节点的子计划节点就绪。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_APPEND_READY` 位于 `src/backend/executor/nodeAppend.c:1079`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:106`。探针覆盖的操作是：等待 Append 计划节点的子计划节点就绪。AppendReady 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/AppendReady","title_zh":"正在等待 IPC/AppendReady 的会话","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 = 'IPC'\n  AND wait_event = 'AppendReady'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'AppendReady'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeAppend.c","line":1079,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_APPEND_READY","excerpt":"nevents, WAIT_EVENT_APPEND_READY);","grep_pattern":"WAIT_EVENT_APPEND_READY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeAppend.c#L1079"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":106,"kind":"catalog_definition","status":"live_trigger","symbol":"APPEND_READY","excerpt":"APPEND_READY\t\"Waiting for subplan nodes of an <literal>Append</literal> plan node to be ready.\"","grep_pattern":"APPEND_READY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L106"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-archive-cleanup-command","type":"IPC","name":"ArchiveCleanupCommand","slug":"archive-cleanup-command","url":"/ipc/archive-cleanup-command/","versions":[15,16,17,18],"version_range":"15-18","availability":{},"aliases":[],"official_descriptions":{"15":"Waiting for archive_cleanup_command to complete.","16":"Waiting for archive_cleanup_command to complete.","17":"Waiting for archive_cleanup_command to complete","18":"Waiting for archive_cleanup_command to complete"},"official_description_zh":"等待 archive_cleanup_command 完成。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_ARCHIVE_CLEANUP_COMMAND` 位于 `src/backend/access/transam/xlog.c:7885`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:107`。探针覆盖的操作是：等待 archive_cleanup_command 完成。ArchiveCleanupCommand 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/ArchiveCleanupCommand","title_zh":"正在等待 IPC/ArchiveCleanupCommand 的会话","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 = 'IPC'\n  AND wait_event = 'ArchiveCleanupCommand'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'ArchiveCleanupCommand'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":7885,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_ARCHIVE_CLEANUP_COMMAND","excerpt":"WAIT_EVENT_ARCHIVE_CLEANUP_COMMAND);","grep_pattern":"WAIT_EVENT_ARCHIVE_CLEANUP_COMMAND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L7885"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":107,"kind":"catalog_definition","status":"live_trigger","symbol":"ARCHIVE_CLEANUP_COMMAND","excerpt":"ARCHIVE_CLEANUP_COMMAND\t\"Waiting for <xref linkend=\"guc-archive-cleanup-command\"/> to complete.\"","grep_pattern":"ARCHIVE_CLEANUP_COMMAND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L107"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-archive-command","type":"IPC","name":"ArchiveCommand","slug":"archive-command","url":"/ipc/archive-command/","versions":[15,16,17,18],"version_range":"15-18","availability":{},"aliases":[],"official_descriptions":{"15":"Waiting for archive_command to complete.","16":"Waiting for archive_command to complete.","17":"Waiting for archive_command to complete","18":"Waiting for archive_command to complete"},"official_description_zh":"等待 archive_command 完成。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_ARCHIVE_COMMAND` 位于 `src/backend/archive/shell_archive.c:79`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:108`。探针覆盖的操作是：等待 archive_command 完成。ArchiveCommand 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/ArchiveCommand","title_zh":"正在等待 IPC/ArchiveCommand 的会话","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 = 'IPC'\n  AND wait_event = 'ArchiveCommand'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'ArchiveCommand'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/archive/shell_archive.c","line":79,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_ARCHIVE_COMMAND","excerpt":"pgstat_report_wait_start(WAIT_EVENT_ARCHIVE_COMMAND);","grep_pattern":"WAIT_EVENT_ARCHIVE_COMMAND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/archive/shell_archive.c#L79"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":108,"kind":"catalog_definition","status":"live_trigger","symbol":"ARCHIVE_COMMAND","excerpt":"ARCHIVE_COMMAND\t\"Waiting for <xref linkend=\"guc-archive-command\"/> to complete.\"","grep_pattern":"ARCHIVE_COMMAND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L108"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-backend-termination","type":"IPC","name":"BackendTermination","slug":"backend-termination","url":"/ipc/backend-termination/","versions":[14,15,16,17,18],"version_range":"14-18","availability":{},"aliases":[],"official_descriptions":{"14":"Waiting for the termination of another backend.","15":"Waiting for the termination of another backend.","16":"Waiting for the termination of another backend.","17":"Waiting for the termination of another backend","18":"Waiting for the termination of another backend"},"official_description_zh":"等待另一个后端终止。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_BACKEND_TERMINATION` 位于 `src/backend/storage/ipc/signalfuncs.c:210`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:109`。探针覆盖的操作是：等待另一个后端终止。BackendTermination 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/BackendTermination","title_zh":"正在等待 IPC/BackendTermination 的会话","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 = 'IPC'\n  AND wait_event = 'BackendTermination'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'BackendTermination'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/signalfuncs.c","line":210,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BACKEND_TERMINATION","excerpt":"WAIT_EVENT_BACKEND_TERMINATION);","grep_pattern":"WAIT_EVENT_BACKEND_TERMINATION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/signalfuncs.c#L210"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":109,"kind":"catalog_definition","status":"live_trigger","symbol":"BACKEND_TERMINATION","excerpt":"BACKEND_TERMINATION\t\"Waiting for the termination of another backend.\"","grep_pattern":"BACKEND_TERMINATION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L109"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-backup-wait-wal-archive","type":"IPC","name":"BackupWaitWalArchive","slug":"backup-wait-wal-archive","url":"/ipc/backup-wait-wal-archive/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for WAL files required for a backup to be successfully archived.","14":"Waiting for WAL files required for a backup to be successfully archived.","15":"Waiting for WAL files required for a backup to be successfully archived.","16":"Waiting for WAL files required for a backup to be successfully archived.","17":"Waiting for WAL files required for a backup to be successfully archived","18":"Waiting for WAL files required for a backup to be successfully archived"},"official_description_zh":"等待备份所需的 WAL 文件成功归档。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE` 位于 `src/backend/access/transam/xlog.c:9405`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:110`。探针覆盖的操作是：等待备份所需的 WAL 文件成功归档。BackupWaitWalArchive 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/BackupWaitWalArchive","title_zh":"正在等待 IPC/BackupWaitWalArchive 的会话","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 = 'IPC'\n  AND wait_event = 'BackupWaitWalArchive'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'BackupWaitWalArchive'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":9405,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE","excerpt":"WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE);","grep_pattern":"WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L9405"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":110,"kind":"catalog_definition","status":"live_trigger","symbol":"BACKUP_WAIT_WAL_ARCHIVE","excerpt":"BACKUP_WAIT_WAL_ARCHIVE\t\"Waiting for WAL files required for a backup to be successfully archived.\"","grep_pattern":"BACKUP_WAIT_WAL_ARCHIVE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L110"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-bgworker-shutdown","type":"IPC","name":"BgworkerShutdown","slug":"bgworker-shutdown","url":"/ipc/bgworker-shutdown/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IPC","name":"BgWorkerShutdown","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for background worker to shut down","18":"Waiting for background worker to shut down"},"official_description_zh":"等待后台工作进程关闭。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_BGWORKER_SHUTDOWN` 位于 `src/backend/postmaster/bgworker.c:1188`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:329`。探针覆盖的操作是：等待后台工作进程关闭。BgworkerShutdown 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/BgworkerShutdown","title_zh":"正在等待 IPC/BgworkerShutdown 的会话","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 = 'IPC'\n  AND wait_event = 'BgworkerShutdown'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'BgworkerShutdown'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/postmaster/bgworker.c","line":1188,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BGWORKER_SHUTDOWN","excerpt":"WAIT_EVENT_BGWORKER_SHUTDOWN);","grep_pattern":"WAIT_EVENT_BGWORKER_SHUTDOWN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/postmaster/bgworker.c#L1188"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":329,"kind":"catalog_definition","status":"live_trigger","symbol":"BgWorkerShutdown","excerpt":"event_name = \"BgWorkerShutdown\";","grep_pattern":"BgWorkerShutdown","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L329"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/bgworker.c","line":1275,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BGWORKER_SHUTDOWN","excerpt":"WAIT_EVENT_BGWORKER_SHUTDOWN);","grep_pattern":"WAIT_EVENT_BGWORKER_SHUTDOWN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/bgworker.c#L1275"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":111,"kind":"catalog_definition","status":"live_trigger","symbol":"BGWORKER_SHUTDOWN","excerpt":"BGWORKER_SHUTDOWN\t\"Waiting for background worker to shut down.\"","grep_pattern":"BGWORKER_SHUTDOWN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L111"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-bgworker-startup","type":"IPC","name":"BgworkerStartup","slug":"bgworker-startup","url":"/ipc/bgworker-startup/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IPC","name":"BgWorkerStartup","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for background worker to start up","18":"Waiting for background worker to start up"},"official_description_zh":"等待后台工作进程启动。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_BGWORKER_STARTUP` 位于 `src/backend/access/transam/parallel.c:771`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:332`。探针覆盖的操作是：等待后台工作进程启动。BgworkerStartup 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/BgworkerStartup","title_zh":"正在等待 IPC/BgworkerStartup 的会话","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 = 'IPC'\n  AND wait_event = 'BgworkerStartup'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'BgworkerStartup'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/access/transam/parallel.c","line":771,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BGWORKER_STARTUP","excerpt":"-1, WAIT_EVENT_BGWORKER_STARTUP);","grep_pattern":"WAIT_EVENT_BGWORKER_STARTUP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/access/transam/parallel.c#L771"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":332,"kind":"catalog_definition","status":"live_trigger","symbol":"BgWorkerStartup","excerpt":"event_name = \"BgWorkerStartup\";","grep_pattern":"BgWorkerStartup","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L332"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/parallel.c","line":775,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BGWORKER_STARTUP","excerpt":"-1, WAIT_EVENT_BGWORKER_STARTUP);","grep_pattern":"WAIT_EVENT_BGWORKER_STARTUP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/parallel.c#L775"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":112,"kind":"catalog_definition","status":"live_trigger","symbol":"BGWORKER_STARTUP","excerpt":"BGWORKER_STARTUP\t\"Waiting for background worker to start up.\"","grep_pattern":"BGWORKER_STARTUP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L112"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-btree-page","type":"IPC","name":"BtreePage","slug":"btree-page","url":"/ipc/btree-page/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for the page number needed to continue a parallel B-tree scan to become available.","14":"Waiting for the page number needed to continue a parallel B-tree scan to become available.","15":"Waiting for the page number needed to continue a parallel B-tree scan to become available.","16":"Waiting for the page number needed to continue a parallel B-tree scan to become available.","17":"Waiting for the page number needed to continue a parallel B-tree scan to become available","18":"Waiting for the page number needed to continue a parallel B-tree scan to become available"},"official_description_zh":"等待继续并行 B-tree 扫描所需的页号可用。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_BTREE_PAGE` 位于 `src/backend/access/nbtree/nbtree.c:927`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:113`。探针覆盖的操作是：等待继续并行 B-tree 扫描所需的页号可用。BtreePage 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/BtreePage","title_zh":"正在等待 IPC/BtreePage 的会话","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 = 'IPC'\n  AND wait_event = 'BtreePage'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'BtreePage'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/nbtree/nbtree.c","line":927,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BTREE_PAGE","excerpt":"ConditionVariableSleep(&btscan->btps_cv, WAIT_EVENT_BTREE_PAGE);","grep_pattern":"WAIT_EVENT_BTREE_PAGE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/nbtree/nbtree.c#L927"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":113,"kind":"catalog_definition","status":"live_trigger","symbol":"BTREE_PAGE","excerpt":"BTREE_PAGE\t\"Waiting for the page number needed to continue a parallel B-tree scan to become available.\"","grep_pattern":"BTREE_PAGE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L113"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-buffer-io","type":"IPC","name":"BufferIo","slug":"buffer-io","url":"/ipc/buffer-io/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IPC","name":"BufferIO","versions":"14-16","version_list":[14,15,16],"change":"spelling"},{"type":"LWLock","name":"BufferIO","versions":"13","version_list":[13],"change":"type_move"}],"official_descriptions":{"17":"Waiting for buffer I/O to complete","18":"Waiting for buffer I/O to complete"},"official_description_zh":"等待缓冲区 I/O 完成。","mechanism":{"en":"`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.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:765`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/transam/xact.c:2627`。探针覆盖的操作是：等待缓冲区 I/O 完成。BufferIo 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/BufferIo","title_zh":"正在等待 IPC/BufferIo 的会话","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 = 'IPC'\n  AND wait_event = 'BufferIo'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'BufferIo'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":13,"version":"13.23","tag":"REL_13_23","commit":"89df812eb890814b105d871185935b580478e660","path":"src/backend/access/transam/xact.c","line":2627,"kind":"resource_path","status":"dynamic_trigger","symbol":"BufferIO","excerpt":"AbortBufferIO();","grep_pattern":"BufferIO","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_13_23/src/backend/access/transam/xact.c#L2627"},{"major":13,"version":"13.23","tag":"REL_13_23","commit":"89df812eb890814b105d871185935b580478e660","path":"src/backend/storage/lmgr/lwlock.c","line":150,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"BufferIO","excerpt":"\"BufferIO\",","grep_pattern":"BufferIO","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_13_23/src/backend/storage/lmgr/lwlock.c#L150"},{"major":13,"version":"13.23","tag":"REL_13_23","commit":"89df812eb890814b105d871185935b580478e660","path":"src/backend/storage/lmgr/lwlock.c","line":765,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_13_23/src/backend/storage/lmgr/lwlock.c#L765"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/storage/buffer/bufmgr.c","line":5167,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BUFFER_IO","excerpt":"ConditionVariableSleep(cv, WAIT_EVENT_BUFFER_IO);","grep_pattern":"WAIT_EVENT_BUFFER_IO","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/storage/buffer/bufmgr.c#L5167"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":338,"kind":"catalog_definition","status":"live_trigger","symbol":"BufferIO","excerpt":"event_name = \"BufferIO\";","grep_pattern":"BufferIO","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L338"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/buffer/bufmgr.c","line":6032,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BUFFER_IO","excerpt":"ConditionVariableSleep(cv, WAIT_EVENT_BUFFER_IO);","grep_pattern":"WAIT_EVENT_BUFFER_IO","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/buffer/bufmgr.c#L6032"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":114,"kind":"catalog_definition","status":"live_trigger","symbol":"BUFFER_IO","excerpt":"BUFFER_IO\t\"Waiting for buffer I/O to complete.\"","grep_pattern":"BUFFER_IO","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L114"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-checkpoint-delay-complete","type":"IPC","name":"CheckpointDelayComplete","slug":"checkpoint-delay-complete","url":"/ipc/checkpoint-delay-complete/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting for a backend that blocks a checkpoint from completing","18":"Waiting for a backend that blocks a checkpoint from completing"},"official_description_zh":"等待后端解除对检查点完成的阻塞。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_CHECKPOINT_DELAY_COMPLETE` 位于 `src/backend/access/transam/xlog.c:7228`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:115`。探针覆盖的操作是：等待后端解除对检查点完成的阻塞。CheckpointDelayComplete 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/CheckpointDelayComplete","title_zh":"正在等待 IPC/CheckpointDelayComplete 的会话","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 = 'IPC'\n  AND wait_event = 'CheckpointDelayComplete'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'CheckpointDelayComplete'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":7228,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CHECKPOINT_DELAY_COMPLETE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_CHECKPOINT_DELAY_COMPLETE);","grep_pattern":"WAIT_EVENT_CHECKPOINT_DELAY_COMPLETE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L7228"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":115,"kind":"catalog_definition","status":"live_trigger","symbol":"CHECKPOINT_DELAY_COMPLETE","excerpt":"CHECKPOINT_DELAY_COMPLETE\t\"Waiting for a backend that blocks a checkpoint from completing.\"","grep_pattern":"CHECKPOINT_DELAY_COMPLETE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L115"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","checkpoint_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-checkpoint-delay-start","type":"IPC","name":"CheckpointDelayStart","slug":"checkpoint-delay-start","url":"/ipc/checkpoint-delay-start/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting for a backend that blocks a checkpoint from starting","18":"Waiting for a backend that blocks a checkpoint from starting"},"official_description_zh":"等待后端解除对检查点启动的阻塞。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_CHECKPOINT_DELAY_START` 位于 `src/backend/access/transam/xlog.c:7211`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:116`。探针覆盖的操作是：等待后端解除对检查点启动的阻塞。CheckpointDelayStart 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/CheckpointDelayStart","title_zh":"正在等待 IPC/CheckpointDelayStart 的会话","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 = 'IPC'\n  AND wait_event = 'CheckpointDelayStart'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'CheckpointDelayStart'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":7211,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CHECKPOINT_DELAY_START","excerpt":"pgstat_report_wait_start(WAIT_EVENT_CHECKPOINT_DELAY_START);","grep_pattern":"WAIT_EVENT_CHECKPOINT_DELAY_START","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L7211"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":116,"kind":"catalog_definition","status":"live_trigger","symbol":"CHECKPOINT_DELAY_START","excerpt":"CHECKPOINT_DELAY_START\t\"Waiting for a backend that blocks a checkpoint from starting.\"","grep_pattern":"CHECKPOINT_DELAY_START","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L116"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","checkpoint_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-checkpoint-done","type":"IPC","name":"CheckpointDone","slug":"checkpoint-done","url":"/ipc/checkpoint-done/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a checkpoint to complete.","14":"Waiting for a checkpoint to complete.","15":"Waiting for a checkpoint to complete.","16":"Waiting for a checkpoint to complete.","17":"Waiting for a checkpoint to complete","18":"Waiting for a checkpoint to complete"},"official_description_zh":"等待检查点完成。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_CHECKPOINT_DONE` 位于 `src/backend/postmaster/checkpointer.c:1121`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:117`。探针覆盖的操作是：等待检查点完成。CheckpointDone 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/CheckpointDone","title_zh":"正在等待 IPC/CheckpointDone 的会话","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 = 'IPC'\n  AND wait_event = 'CheckpointDone'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'CheckpointDone'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/checkpointer.c","line":1121,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CHECKPOINT_DONE","excerpt":"WAIT_EVENT_CHECKPOINT_DONE);","grep_pattern":"WAIT_EVENT_CHECKPOINT_DONE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/checkpointer.c#L1121"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":117,"kind":"catalog_definition","status":"live_trigger","symbol":"CHECKPOINT_DONE","excerpt":"CHECKPOINT_DONE\t\"Waiting for a checkpoint to complete.\"","grep_pattern":"CHECKPOINT_DONE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L117"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","checkpoint_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-checkpoint-start","type":"IPC","name":"CheckpointStart","slug":"checkpoint-start","url":"/ipc/checkpoint-start/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a checkpoint to start.","14":"Waiting for a checkpoint to start.","15":"Waiting for a checkpoint to start.","16":"Waiting for a checkpoint to start.","17":"Waiting for a checkpoint to start","18":"Waiting for a checkpoint to start"},"official_description_zh":"等待检查点启动。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_CHECKPOINT_START` 位于 `src/backend/postmaster/checkpointer.c:1100`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:118`。探针覆盖的操作是：等待检查点启动。CheckpointStart 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/CheckpointStart","title_zh":"正在等待 IPC/CheckpointStart 的会话","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 = 'IPC'\n  AND wait_event = 'CheckpointStart'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'CheckpointStart'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/checkpointer.c","line":1100,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CHECKPOINT_START","excerpt":"WAIT_EVENT_CHECKPOINT_START);","grep_pattern":"WAIT_EVENT_CHECKPOINT_START","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/checkpointer.c#L1100"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":118,"kind":"catalog_definition","status":"live_trigger","symbol":"CHECKPOINT_START","excerpt":"CHECKPOINT_START\t\"Waiting for a checkpoint to start.\"","grep_pattern":"CHECKPOINT_START","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L118"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","checkpoint_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-execute-gather","type":"IPC","name":"ExecuteGather","slug":"execute-gather","url":"/ipc/execute-gather/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for activity from a child process while executing a Gather plan node.","14":"Waiting for activity from a child process while executing a Gather plan node.","15":"Waiting for activity from a child process while executing a Gather plan node.","16":"Waiting for activity from a child process while executing a Gather plan node.","17":"Waiting for activity from a child process while executing a Gather plan node","18":"Waiting for activity from a child process while executing a Gather plan node"},"official_description_zh":"等待执行 Gather 计划节点时来自子进程的活动。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_EXECUTE_GATHER` 位于 `src/backend/executor/nodeGather.c:386`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:119`。探针覆盖的操作是：等待执行 Gather 计划节点时来自子进程的活动。ExecuteGather 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/ExecuteGather","title_zh":"正在等待 IPC/ExecuteGather 的会话","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 = 'IPC'\n  AND wait_event = 'ExecuteGather'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'ExecuteGather'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeGather.c","line":386,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_EXECUTE_GATHER","excerpt":"WAIT_EVENT_EXECUTE_GATHER);","grep_pattern":"WAIT_EVENT_EXECUTE_GATHER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeGather.c#L386"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":119,"kind":"catalog_definition","status":"live_trigger","symbol":"EXECUTE_GATHER","excerpt":"EXECUTE_GATHER\t\"Waiting for activity from a child process while executing a <literal>Gather</literal> plan node.\"","grep_pattern":"EXECUTE_GATHER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L119"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-batch-allocate","type":"IPC","name":"HashBatchAllocate","slug":"hash-batch-allocate","url":"/ipc/hash-batch-allocate/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for an elected Parallel Hash participant to allocate a hash table.","14":"Waiting for an elected Parallel Hash participant to allocate a hash table.","15":"Waiting for an elected Parallel Hash participant to allocate a hash table.","16":"Waiting for an elected Parallel Hash participant to allocate a hash table.","17":"Waiting for an elected Parallel Hash participant to allocate a hash table","18":"Waiting for an elected Parallel Hash participant to allocate a hash table"},"official_description_zh":"等待被选出的 Parallel Hash 参与者分配哈希表。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_BATCH_ALLOCATE` 位于 `src/backend/executor/nodeHashjoin.c:1321`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:120`。探针覆盖的操作是：等待被选出的 Parallel Hash 参与者分配哈希表。HashBatchAllocate 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashBatchAllocate","title_zh":"正在等待 IPC/HashBatchAllocate 的会话","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 = 'IPC'\n  AND wait_event = 'HashBatchAllocate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashBatchAllocate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHashjoin.c","line":1321,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_BATCH_ALLOCATE","excerpt":"WAIT_EVENT_HASH_BATCH_ALLOCATE);","grep_pattern":"WAIT_EVENT_HASH_BATCH_ALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHashjoin.c#L1321"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":120,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_BATCH_ALLOCATE","excerpt":"HASH_BATCH_ALLOCATE\t\"Waiting for an elected Parallel Hash participant to allocate a hash table.\"","grep_pattern":"HASH_BATCH_ALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L120"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-batch-elect","type":"IPC","name":"HashBatchElect","slug":"hash-batch-elect","url":"/ipc/hash-batch-elect/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to elect a Parallel Hash participant to allocate a hash table.","14":"Waiting to elect a Parallel Hash participant to allocate a hash table.","15":"Waiting to elect a Parallel Hash participant to allocate a hash table.","16":"Waiting to elect a Parallel Hash participant to allocate a hash table.","17":"Waiting to elect a Parallel Hash participant to allocate a hash table","18":"Waiting to elect a Parallel Hash participant to allocate a hash table"},"official_description_zh":"等待选出一个负责分配哈希表的 Parallel Hash 参与者。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_BATCH_ELECT` 位于 `src/backend/executor/nodeHashjoin.c:1314`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:121`。探针覆盖的操作是：等待选出一个负责分配哈希表的 Parallel Hash 参与者。HashBatchElect 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashBatchElect","title_zh":"正在等待 IPC/HashBatchElect 的会话","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 = 'IPC'\n  AND wait_event = 'HashBatchElect'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashBatchElect'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHashjoin.c","line":1314,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_BATCH_ELECT","excerpt":"WAIT_EVENT_HASH_BATCH_ELECT))","grep_pattern":"WAIT_EVENT_HASH_BATCH_ELECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHashjoin.c#L1314"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":121,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_BATCH_ELECT","excerpt":"HASH_BATCH_ELECT\t\"Waiting to elect a Parallel Hash participant to allocate a hash table.\"","grep_pattern":"HASH_BATCH_ELECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L121"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-batch-load","type":"IPC","name":"HashBatchLoad","slug":"hash-batch-load","url":"/ipc/hash-batch-load/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for other Parallel Hash participants to finish loading a hash table.","14":"Waiting for other Parallel Hash participants to finish loading a hash table.","15":"Waiting for other Parallel Hash participants to finish loading a hash table.","16":"Waiting for other Parallel Hash participants to finish loading a hash table.","17":"Waiting for other Parallel Hash participants to finish loading a hash table","18":"Waiting for other Parallel Hash participants to finish loading a hash table"},"official_description_zh":"等待其他 Parallel Hash 参与者完成哈希表加载。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_BATCH_LOAD` 位于 `src/backend/executor/nodeHashjoin.c:1341`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:122`。探针覆盖的操作是：等待其他 Parallel Hash 参与者完成哈希表加载。HashBatchLoad 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashBatchLoad","title_zh":"正在等待 IPC/HashBatchLoad 的会话","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 = 'IPC'\n  AND wait_event = 'HashBatchLoad'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashBatchLoad'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHashjoin.c","line":1341,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_BATCH_LOAD","excerpt":"WAIT_EVENT_HASH_BATCH_LOAD);","grep_pattern":"WAIT_EVENT_HASH_BATCH_LOAD","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHashjoin.c#L1341"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":122,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_BATCH_LOAD","excerpt":"HASH_BATCH_LOAD\t\"Waiting for other Parallel Hash participants to finish loading a hash table.\"","grep_pattern":"HASH_BATCH_LOAD","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L122"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-build-allocate","type":"IPC","name":"HashBuildAllocate","slug":"hash-build-allocate","url":"/ipc/hash-build-allocate/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for an elected Parallel Hash participant to allocate the initial hash table.","14":"Waiting for an elected Parallel Hash participant to allocate the initial hash table.","15":"Waiting for an elected Parallel Hash participant to allocate the initial hash table.","16":"Waiting for an elected Parallel Hash participant to allocate the initial hash table.","17":"Waiting for an elected Parallel Hash participant to allocate the initial hash table","18":"Waiting for an elected Parallel Hash participant to allocate the initial hash table"},"official_description_zh":"等待被选出的 Parallel Hash 参与者分配初始哈希表。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_BUILD_ALLOCATE` 位于 `src/backend/executor/nodeHash.c:261`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:123`。探针覆盖的操作是：等待被选出的 Parallel Hash 参与者分配初始哈希表。HashBuildAllocate 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashBuildAllocate","title_zh":"正在等待 IPC/HashBuildAllocate 的会话","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 = 'IPC'\n  AND wait_event = 'HashBuildAllocate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashBuildAllocate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":261,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_BUILD_ALLOCATE","excerpt":"BarrierArriveAndWait(build_barrier, WAIT_EVENT_HASH_BUILD_ALLOCATE);","grep_pattern":"WAIT_EVENT_HASH_BUILD_ALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L261"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":123,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_BUILD_ALLOCATE","excerpt":"HASH_BUILD_ALLOCATE\t\"Waiting for an elected Parallel Hash participant to allocate the initial hash table.\"","grep_pattern":"HASH_BUILD_ALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L123"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-build-elect","type":"IPC","name":"HashBuildElect","slug":"hash-build-elect","url":"/ipc/hash-build-elect/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to elect a Parallel Hash participant to allocate the initial hash table.","14":"Waiting to elect a Parallel Hash participant to allocate the initial hash table.","15":"Waiting to elect a Parallel Hash participant to allocate the initial hash table.","16":"Waiting to elect a Parallel Hash participant to allocate the initial hash table.","17":"Waiting to elect a Parallel Hash participant to allocate the initial hash table","18":"Waiting to elect a Parallel Hash participant to allocate the initial hash table"},"official_description_zh":"等待选出一个负责分配初始哈希表的 Parallel Hash 参与者。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_BUILD_ELECT` 位于 `src/backend/executor/nodeHash.c:598`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:124`。探针覆盖的操作是：等待选出一个负责分配初始哈希表的 Parallel Hash 参与者。HashBuildElect 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashBuildElect","title_zh":"正在等待 IPC/HashBuildElect 的会话","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 = 'IPC'\n  AND wait_event = 'HashBuildElect'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashBuildElect'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":598,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_BUILD_ELECT","excerpt":"BarrierArriveAndWait(build_barrier, WAIT_EVENT_HASH_BUILD_ELECT))","grep_pattern":"WAIT_EVENT_HASH_BUILD_ELECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L598"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":124,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_BUILD_ELECT","excerpt":"HASH_BUILD_ELECT\t\"Waiting to elect a Parallel Hash participant to allocate the initial hash table.\"","grep_pattern":"HASH_BUILD_ELECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L124"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-build-hash-inner","type":"IPC","name":"HashBuildHashInner","slug":"hash-build-hash-inner","url":"/ipc/hash-build-hash-inner/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for other Parallel Hash participants to finish hashing the inner relation.","14":"Waiting for other Parallel Hash participants to finish hashing the inner relation.","15":"Waiting for other Parallel Hash participants to finish hashing the inner relation.","16":"Waiting for other Parallel Hash participants to finish hashing the inner relation.","17":"Waiting for other Parallel Hash participants to finish hashing the inner relation","18":"Waiting for other Parallel Hash participants to finish hashing the inner relation"},"official_description_zh":"等待其他 Parallel Hash 参与者完成对 inner relation 的哈希处理。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_BUILD_HASH_INNER` 位于 `src/backend/executor/nodeHash.c:324`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:125`。探针覆盖的操作是：等待其他 Parallel Hash 参与者完成对 inner relation 的哈希处理。HashBuildHashInner 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashBuildHashInner","title_zh":"正在等待 IPC/HashBuildHashInner 的会话","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 = 'IPC'\n  AND wait_event = 'HashBuildHashInner'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashBuildHashInner'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":324,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_BUILD_HASH_INNER","excerpt":"WAIT_EVENT_HASH_BUILD_HASH_INNER))","grep_pattern":"WAIT_EVENT_HASH_BUILD_HASH_INNER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L324"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":125,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_BUILD_HASH_INNER","excerpt":"HASH_BUILD_HASH_INNER\t\"Waiting for other Parallel Hash participants to finish hashing the inner relation.\"","grep_pattern":"HASH_BUILD_HASH_INNER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L125"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-build-hash-outer","type":"IPC","name":"HashBuildHashOuter","slug":"hash-build-hash-outer","url":"/ipc/hash-build-hash-outer/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for other Parallel Hash participants to finish partitioning the outer relation.","14":"Waiting for other Parallel Hash participants to finish partitioning the outer relation.","15":"Waiting for other Parallel Hash participants to finish partitioning the outer relation.","16":"Waiting for other Parallel Hash participants to finish partitioning the outer relation.","17":"Waiting for other Parallel Hash participants to finish partitioning the outer relation","18":"Waiting for other Parallel Hash participants to finish partitioning the outer relation"},"official_description_zh":"等待其他 Parallel Hash 参与者完成对 outer relation 的分区。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_BUILD_HASH_OUTER` 位于 `src/backend/executor/nodeHashjoin.c:397`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:126`。探针覆盖的操作是：等待其他 Parallel Hash 参与者完成对 outer relation 的分区。HashBuildHashOuter 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashBuildHashOuter","title_zh":"正在等待 IPC/HashBuildHashOuter 的会话","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 = 'IPC'\n  AND wait_event = 'HashBuildHashOuter'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashBuildHashOuter'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHashjoin.c","line":397,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_BUILD_HASH_OUTER","excerpt":"WAIT_EVENT_HASH_BUILD_HASH_OUTER);","grep_pattern":"WAIT_EVENT_HASH_BUILD_HASH_OUTER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHashjoin.c#L397"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":126,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_BUILD_HASH_OUTER","excerpt":"HASH_BUILD_HASH_OUTER\t\"Waiting for other Parallel Hash participants to finish partitioning the outer relation.\"","grep_pattern":"HASH_BUILD_HASH_OUTER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L126"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-grow-batches-decide","type":"IPC","name":"HashGrowBatchesDecide","slug":"hash-grow-batches-decide","url":"/ipc/hash-grow-batches-decide/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to elect a Parallel Hash participant to decide on future batch growth.","14":"Waiting to elect a Parallel Hash participant to decide on future batch growth.","15":"Waiting to elect a Parallel Hash participant to decide on future batch growth.","16":"Waiting to elect a Parallel Hash participant to decide on future batch growth.","17":"Waiting to elect a Parallel Hash participant to decide on future batch growth","18":"Waiting to elect a Parallel Hash participant to decide on future batch growth"},"official_description_zh":"等待选出一个 Parallel Hash 参与者，以决定后续 batch 扩容。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_GROW_BATCHES_DECIDE` 位于 `src/backend/executor/nodeHash.c:1363`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:127`。探针覆盖的操作是：等待选出一个 Parallel Hash 参与者，以决定后续 batch 扩容。HashGrowBatchesDecide 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashGrowBatchesDecide","title_zh":"正在等待 IPC/HashGrowBatchesDecide 的会话","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 = 'IPC'\n  AND wait_event = 'HashGrowBatchesDecide'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashGrowBatchesDecide'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":1363,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_GROW_BATCHES_DECIDE","excerpt":"WAIT_EVENT_HASH_GROW_BATCHES_DECIDE))","grep_pattern":"WAIT_EVENT_HASH_GROW_BATCHES_DECIDE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L1363"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":127,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_GROW_BATCHES_DECIDE","excerpt":"HASH_GROW_BATCHES_DECIDE\t\"Waiting to elect a Parallel Hash participant to decide on future batch growth.\"","grep_pattern":"HASH_GROW_BATCHES_DECIDE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L127"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-grow-batches-elect","type":"IPC","name":"HashGrowBatchesElect","slug":"hash-grow-batches-elect","url":"/ipc/hash-grow-batches-elect/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to elect a Parallel Hash participant to allocate more batches.","14":"Waiting to elect a Parallel Hash participant to allocate more batches.","15":"Waiting to elect a Parallel Hash participant to allocate more batches.","16":"Waiting to elect a Parallel Hash participant to allocate more batches.","17":"Waiting to elect a Parallel Hash participant to allocate more batches","18":"Waiting to elect a Parallel Hash participant to allocate more batches"},"official_description_zh":"等待选出一个负责分配更多 batch 的 Parallel Hash 参与者。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_GROW_BATCHES_ELECT` 位于 `src/backend/executor/nodeHash.c:1220`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:128`。探针覆盖的操作是：等待选出一个负责分配更多 batch 的 Parallel Hash 参与者。HashGrowBatchesElect 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashGrowBatchesElect","title_zh":"正在等待 IPC/HashGrowBatchesElect 的会话","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 = 'IPC'\n  AND wait_event = 'HashGrowBatchesElect'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashGrowBatchesElect'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":1220,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_GROW_BATCHES_ELECT","excerpt":"WAIT_EVENT_HASH_GROW_BATCHES_ELECT))","grep_pattern":"WAIT_EVENT_HASH_GROW_BATCHES_ELECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L1220"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":128,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_GROW_BATCHES_ELECT","excerpt":"HASH_GROW_BATCHES_ELECT\t\"Waiting to elect a Parallel Hash participant to allocate more batches.\"","grep_pattern":"HASH_GROW_BATCHES_ELECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L128"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-grow-batches-finish","type":"IPC","name":"HashGrowBatchesFinish","slug":"hash-grow-batches-finish","url":"/ipc/hash-grow-batches-finish/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for an elected Parallel Hash participant to decide on future batch growth.","14":"Waiting for an elected Parallel Hash participant to decide on future batch growth.","15":"Waiting for an elected Parallel Hash participant to decide on future batch growth.","16":"Waiting for an elected Parallel Hash participant to decide on future batch growth.","17":"Waiting for an elected Parallel Hash participant to decide on future batch growth","18":"Waiting for an elected Parallel Hash participant to decide on future batch growth"},"official_description_zh":"等待被选出的 Parallel Hash 参与者决定后续 batch 扩容。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_GROW_BATCHES_FINISH` 位于 `src/backend/executor/nodeHash.c:1420`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:129`。探针覆盖的操作是：等待被选出的 Parallel Hash 参与者决定后续 batch 扩容。HashGrowBatchesFinish 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashGrowBatchesFinish","title_zh":"正在等待 IPC/HashGrowBatchesFinish 的会话","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 = 'IPC'\n  AND wait_event = 'HashGrowBatchesFinish'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashGrowBatchesFinish'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":1420,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_GROW_BATCHES_FINISH","excerpt":"WAIT_EVENT_HASH_GROW_BATCHES_FINISH);","grep_pattern":"WAIT_EVENT_HASH_GROW_BATCHES_FINISH","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L1420"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":129,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_GROW_BATCHES_FINISH","excerpt":"HASH_GROW_BATCHES_FINISH\t\"Waiting for an elected Parallel Hash participant to decide on future batch growth.\"","grep_pattern":"HASH_GROW_BATCHES_FINISH","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L129"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-grow-batches-reallocate","type":"IPC","name":"HashGrowBatchesReallocate","slug":"hash-grow-batches-reallocate","url":"/ipc/hash-grow-batches-reallocate/","versions":[16,17,18],"version_range":"16-18","availability":{},"aliases":[{"type":"IPC","name":"HashGrowBatchesAllocate","versions":"13-15","version_list":[13,14,15],"change":"rename"}],"official_descriptions":{"16":"Waiting for an elected Parallel Hash participant to allocate more batches.","17":"Waiting for an elected Parallel Hash participant to allocate more batches","18":"Waiting for an elected Parallel Hash participant to allocate more batches"},"official_description_zh":"等待被选出的 Parallel Hash 参与者分配更多 batch。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_GROW_BATCHES_ALLOCATE` 位于 `src/backend/executor/nodeHash.c:1229`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:368`。探针覆盖的操作是：等待被选出的 Parallel Hash 参与者分配更多 batch。HashGrowBatchesReallocate 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashGrowBatchesReallocate","title_zh":"正在等待 IPC/HashGrowBatchesReallocate 的会话","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 = 'IPC'\n  AND wait_event = 'HashGrowBatchesReallocate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashGrowBatchesReallocate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":15,"version":"15.19","tag":"REL_15_19","commit":"2ff1375b5dd8bf09d8cb0e795974528180fd75ca","path":"src/backend/executor/nodeHash.c","line":1229,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_GROW_BATCHES_ALLOCATE","excerpt":"WAIT_EVENT_HASH_GROW_BATCHES_ALLOCATE);","grep_pattern":"WAIT_EVENT_HASH_GROW_BATCHES_ALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_15_19/src/backend/executor/nodeHash.c#L1229"},{"major":15,"version":"15.19","tag":"REL_15_19","commit":"2ff1375b5dd8bf09d8cb0e795974528180fd75ca","path":"src/backend/utils/activity/wait_event.c","line":368,"kind":"catalog_definition","status":"live_trigger","symbol":"HashGrowBatchesAllocate","excerpt":"event_name = \"HashGrowBatchesAllocate\";","grep_pattern":"HashGrowBatchesAllocate","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_15_19/src/backend/utils/activity/wait_event.c#L368"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":1339,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_GROW_BATCHES_REALLOCATE","excerpt":"WAIT_EVENT_HASH_GROW_BATCHES_REALLOCATE);","grep_pattern":"WAIT_EVENT_HASH_GROW_BATCHES_REALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L1339"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":130,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_GROW_BATCHES_REALLOCATE","excerpt":"HASH_GROW_BATCHES_REALLOCATE\t\"Waiting for an elected Parallel Hash participant to allocate more batches.\"","grep_pattern":"HASH_GROW_BATCHES_REALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L130"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-grow-batches-repartition","type":"IPC","name":"HashGrowBatchesRepartition","slug":"hash-grow-batches-repartition","url":"/ipc/hash-grow-batches-repartition/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for other Parallel Hash participants to finish repartitioning.","14":"Waiting for other Parallel Hash participants to finish repartitioning.","15":"Waiting for other Parallel Hash participants to finish repartitioning.","16":"Waiting for other Parallel Hash participants to finish repartitioning.","17":"Waiting for other Parallel Hash participants to finish repartitioning","18":"Waiting for other Parallel Hash participants to finish repartitioning"},"official_description_zh":"等待其他 Parallel Hash 参与者完成重新分区。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_GROW_BATCHES_REPARTITION` 位于 `src/backend/executor/nodeHash.c:1352`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:131`。探针覆盖的操作是：等待其他 Parallel Hash 参与者完成重新分区。HashGrowBatchesRepartition 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashGrowBatchesRepartition","title_zh":"正在等待 IPC/HashGrowBatchesRepartition 的会话","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 = 'IPC'\n  AND wait_event = 'HashGrowBatchesRepartition'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashGrowBatchesRepartition'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":1352,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_GROW_BATCHES_REPARTITION","excerpt":"WAIT_EVENT_HASH_GROW_BATCHES_REPARTITION);","grep_pattern":"WAIT_EVENT_HASH_GROW_BATCHES_REPARTITION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L1352"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":131,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_GROW_BATCHES_REPARTITION","excerpt":"HASH_GROW_BATCHES_REPARTITION\t\"Waiting for other Parallel Hash participants to finish repartitioning.\"","grep_pattern":"HASH_GROW_BATCHES_REPARTITION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L131"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-grow-buckets-elect","type":"IPC","name":"HashGrowBucketsElect","slug":"hash-grow-buckets-elect","url":"/ipc/hash-grow-buckets-elect/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to elect a Parallel Hash participant to allocate more buckets.","14":"Waiting to elect a Parallel Hash participant to allocate more buckets.","15":"Waiting to elect a Parallel Hash participant to allocate more buckets.","16":"Waiting to elect a Parallel Hash participant to allocate more buckets.","17":"Waiting to elect a Parallel Hash participant to allocate more buckets","18":"Waiting to elect a Parallel Hash participant to allocate more buckets"},"official_description_zh":"等待选出一个负责分配更多 bucket 的 Parallel Hash 参与者。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_GROW_BUCKETS_ELECT` 位于 `src/backend/executor/nodeHash.c:1669`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:132`。探针覆盖的操作是：等待选出一个负责分配更多 bucket 的 Parallel Hash 参与者。HashGrowBucketsElect 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashGrowBucketsElect","title_zh":"正在等待 IPC/HashGrowBucketsElect 的会话","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 = 'IPC'\n  AND wait_event = 'HashGrowBucketsElect'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashGrowBucketsElect'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":1669,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_GROW_BUCKETS_ELECT","excerpt":"WAIT_EVENT_HASH_GROW_BUCKETS_ELECT))","grep_pattern":"WAIT_EVENT_HASH_GROW_BUCKETS_ELECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L1669"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":132,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_GROW_BUCKETS_ELECT","excerpt":"HASH_GROW_BUCKETS_ELECT\t\"Waiting to elect a Parallel Hash participant to allocate more buckets.\"","grep_pattern":"HASH_GROW_BUCKETS_ELECT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L132"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-grow-buckets-reallocate","type":"IPC","name":"HashGrowBucketsReallocate","slug":"hash-grow-buckets-reallocate","url":"/ipc/hash-grow-buckets-reallocate/","versions":[16,17,18],"version_range":"16-18","availability":{},"aliases":[{"type":"IPC","name":"HashGrowBucketsAllocate","versions":"13-15","version_list":[13,14,15],"change":"rename"}],"official_descriptions":{"16":"Waiting for an elected Parallel Hash participant to finish allocating more buckets.","17":"Waiting for an elected Parallel Hash participant to finish allocating more buckets","18":"Waiting for an elected Parallel Hash participant to finish allocating more buckets"},"official_description_zh":"等待被选出的 Parallel Hash 参与者完成更多 bucket 的分配。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_GROW_BUCKETS_ALLOCATE` 位于 `src/backend/executor/nodeHash.c:1588`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:383`。探针覆盖的操作是：等待被选出的 Parallel Hash 参与者完成更多 bucket 的分配。HashGrowBucketsReallocate 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashGrowBucketsReallocate","title_zh":"正在等待 IPC/HashGrowBucketsReallocate 的会话","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 = 'IPC'\n  AND wait_event = 'HashGrowBucketsReallocate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashGrowBucketsReallocate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":15,"version":"15.19","tag":"REL_15_19","commit":"2ff1375b5dd8bf09d8cb0e795974528180fd75ca","path":"src/backend/executor/nodeHash.c","line":1588,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_GROW_BUCKETS_ALLOCATE","excerpt":"WAIT_EVENT_HASH_GROW_BUCKETS_ALLOCATE);","grep_pattern":"WAIT_EVENT_HASH_GROW_BUCKETS_ALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_15_19/src/backend/executor/nodeHash.c#L1588"},{"major":15,"version":"15.19","tag":"REL_15_19","commit":"2ff1375b5dd8bf09d8cb0e795974528180fd75ca","path":"src/backend/utils/activity/wait_event.c","line":383,"kind":"catalog_definition","status":"live_trigger","symbol":"HashGrowBucketsAllocate","excerpt":"event_name = \"HashGrowBucketsAllocate\";","grep_pattern":"HashGrowBucketsAllocate","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_15_19/src/backend/utils/activity/wait_event.c#L383"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":1698,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_GROW_BUCKETS_REALLOCATE","excerpt":"WAIT_EVENT_HASH_GROW_BUCKETS_REALLOCATE);","grep_pattern":"WAIT_EVENT_HASH_GROW_BUCKETS_REALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L1698"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":133,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_GROW_BUCKETS_REALLOCATE","excerpt":"HASH_GROW_BUCKETS_REALLOCATE\t\"Waiting for an elected Parallel Hash participant to finish allocating more buckets.\"","grep_pattern":"HASH_GROW_BUCKETS_REALLOCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L133"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-hash-grow-buckets-reinsert","type":"IPC","name":"HashGrowBucketsReinsert","slug":"hash-grow-buckets-reinsert","url":"/ipc/hash-grow-buckets-reinsert/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for other Parallel Hash participants to finish inserting tuples into new buckets.","14":"Waiting for other Parallel Hash participants to finish inserting tuples into new buckets.","15":"Waiting for other Parallel Hash participants to finish inserting tuples into new buckets.","16":"Waiting for other Parallel Hash participants to finish inserting tuples into new buckets.","17":"Waiting for other Parallel Hash participants to finish inserting tuples into new buckets","18":"Waiting for other Parallel Hash participants to finish inserting tuples into new buckets"},"official_description_zh":"等待其他 Parallel Hash 参与者完成将元组插入新 bucket。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_HASH_GROW_BUCKETS_REINSERT` 位于 `src/backend/executor/nodeHash.c:1733`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:134`。探针覆盖的操作是：等待其他 Parallel Hash 参与者完成将元组插入新 bucket。HashGrowBucketsReinsert 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/HashGrowBucketsReinsert","title_zh":"正在等待 IPC/HashGrowBucketsReinsert 的会话","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 = 'IPC'\n  AND wait_event = 'HashGrowBucketsReinsert'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'HashGrowBucketsReinsert'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":1733,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_HASH_GROW_BUCKETS_REINSERT","excerpt":"WAIT_EVENT_HASH_GROW_BUCKETS_REINSERT);","grep_pattern":"WAIT_EVENT_HASH_GROW_BUCKETS_REINSERT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L1733"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":134,"kind":"catalog_definition","status":"live_trigger","symbol":"HASH_GROW_BUCKETS_REINSERT","excerpt":"HASH_GROW_BUCKETS_REINSERT\t\"Waiting for other Parallel Hash participants to finish inserting tuples into new buckets.\"","grep_pattern":"HASH_GROW_BUCKETS_REINSERT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L134"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-logical-apply-send-data","type":"IPC","name":"LogicalApplySendData","slug":"logical-apply-send-data","url":"/ipc/logical-apply-send-data/","versions":[16,17,18],"version_range":"16-18","availability":{},"aliases":[],"official_descriptions":{"16":"Waiting for a logical replication leader apply process to send data to a parallel apply process.","17":"Waiting for a logical replication leader apply process to send data to a parallel apply process","18":"Waiting for a logical replication leader apply process to send data to a parallel apply process"},"official_description_zh":"等待逻辑复制 leader apply 进程向 parallel apply 进程发送数据。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_LOGICAL_APPLY_SEND_DATA` 位于 `src/backend/replication/logical/applyparallelworker.c:1204`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:135`。探针覆盖的操作是：等待逻辑复制 leader apply 进程向 parallel apply 进程发送数据。LogicalApplySendData 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/LogicalApplySendData","title_zh":"正在等待 IPC/LogicalApplySendData 的会话","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 = 'IPC'\n  AND wait_event = 'LogicalApplySendData'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'LogicalApplySendData'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/applyparallelworker.c","line":1204,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_APPLY_SEND_DATA","excerpt":"WAIT_EVENT_LOGICAL_APPLY_SEND_DATA);","grep_pattern":"WAIT_EVENT_LOGICAL_APPLY_SEND_DATA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/applyparallelworker.c#L1204"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":135,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_APPLY_SEND_DATA","excerpt":"LOGICAL_APPLY_SEND_DATA\t\"Waiting for a logical replication leader apply process to send data to a parallel apply process.\"","grep_pattern":"LOGICAL_APPLY_SEND_DATA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L135"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-logical-parallel-apply-state-change","type":"IPC","name":"LogicalParallelApplyStateChange","slug":"logical-parallel-apply-state-change","url":"/ipc/logical-parallel-apply-state-change/","versions":[16,17,18],"version_range":"16-18","availability":{},"aliases":[],"official_descriptions":{"16":"Waiting for a logical replication parallel apply process to change state.","17":"Waiting for a logical replication parallel apply process to change state","18":"Waiting for a logical replication parallel apply process to change state"},"official_description_zh":"等待逻辑复制 parallel apply 进程改变状态。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_LOGICAL_PARALLEL_APPLY_STATE_CHANGE` 位于 `src/backend/replication/logical/applyparallelworker.c:1276`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:136`。探针覆盖的操作是：等待逻辑复制 parallel apply 进程改变状态。LogicalParallelApplyStateChange 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/LogicalParallelApplyStateChange","title_zh":"正在等待 IPC/LogicalParallelApplyStateChange 的会话","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 = 'IPC'\n  AND wait_event = 'LogicalParallelApplyStateChange'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'LogicalParallelApplyStateChange'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/applyparallelworker.c","line":1276,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_PARALLEL_APPLY_STATE_CHANGE","excerpt":"WAIT_EVENT_LOGICAL_PARALLEL_APPLY_STATE_CHANGE);","grep_pattern":"WAIT_EVENT_LOGICAL_PARALLEL_APPLY_STATE_CHANGE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/applyparallelworker.c#L1276"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":136,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_PARALLEL_APPLY_STATE_CHANGE","excerpt":"LOGICAL_PARALLEL_APPLY_STATE_CHANGE\t\"Waiting for a logical replication parallel apply process to change state.\"","grep_pattern":"LOGICAL_PARALLEL_APPLY_STATE_CHANGE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L136"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-logical-sync-data","type":"IPC","name":"LogicalSyncData","slug":"logical-sync-data","url":"/ipc/logical-sync-data/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a logical replication remote server to send data for initial table synchronization.","14":"Waiting for a logical replication remote server to send data for initial table synchronization.","15":"Waiting for a logical replication remote server to send data for initial table synchronization.","16":"Waiting for a logical replication remote server to send data for initial table synchronization.","17":"Waiting for a logical replication remote server to send data for initial table synchronization","18":"Waiting for a logical replication remote server to send data for initial table synchronization"},"official_description_zh":"等待逻辑复制远端服务器发送用于初始表同步的数据。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_LOGICAL_SYNC_DATA` 位于 `src/backend/replication/logical/tablesync.c:807`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:137`。探针覆盖的操作是：等待逻辑复制远端服务器发送用于初始表同步的数据。LogicalSyncData 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/LogicalSyncData","title_zh":"正在等待 IPC/LogicalSyncData 的会话","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 = 'IPC'\n  AND wait_event = 'LogicalSyncData'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'LogicalSyncData'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/tablesync.c","line":807,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_SYNC_DATA","excerpt":"fd, 1000L, WAIT_EVENT_LOGICAL_SYNC_DATA);","grep_pattern":"WAIT_EVENT_LOGICAL_SYNC_DATA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/tablesync.c#L807"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":137,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_SYNC_DATA","excerpt":"LOGICAL_SYNC_DATA\t\"Waiting for a logical replication remote server to send data for initial table synchronization.\"","grep_pattern":"LOGICAL_SYNC_DATA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L137"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["synchronous_standby_names"],"metrics":["waiting_sessions","wait_event_share","replication_flush_lag"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-logical-sync-state-change","type":"IPC","name":"LogicalSyncStateChange","slug":"logical-sync-state-change","url":"/ipc/logical-sync-state-change/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a logical replication remote server to change state.","14":"Waiting for a logical replication remote server to change state.","15":"Waiting for a logical replication remote server to change state.","16":"Waiting for a logical replication remote server to change state.","17":"Waiting for a logical replication remote server to change state","18":"Waiting for a logical replication remote server to change state"},"official_description_zh":"等待逻辑复制远端服务器改变状态。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE` 位于 `src/backend/replication/logical/tablesync.c:214`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:138`。探针覆盖的操作是：等待逻辑复制远端服务器改变状态。LogicalSyncStateChange 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/LogicalSyncStateChange","title_zh":"正在等待 IPC/LogicalSyncStateChange 的会话","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 = 'IPC'\n  AND wait_event = 'LogicalSyncStateChange'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'LogicalSyncStateChange'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/tablesync.c","line":214,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE","excerpt":"1000L, WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE);","grep_pattern":"WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/tablesync.c#L214"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":138,"kind":"catalog_definition","status":"live_trigger","symbol":"LOGICAL_SYNC_STATE_CHANGE","excerpt":"LOGICAL_SYNC_STATE_CHANGE\t\"Waiting for a logical replication remote server to change state.\"","grep_pattern":"LOGICAL_SYNC_STATE_CHANGE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L138"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["synchronous_standby_names"],"metrics":["waiting_sessions","wait_event_share","replication_flush_lag"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-message-queue-internal","type":"IPC","name":"MessageQueueInternal","slug":"message-queue-internal","url":"/ipc/message-queue-internal/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for another process to be attached to a shared message queue.","14":"Waiting for another process to be attached to a shared message queue.","15":"Waiting for another process to be attached to a shared message queue.","16":"Waiting for another process to be attached to a shared message queue.","17":"Waiting for another process to be attached to a shared message queue","18":"Waiting for another process to be attached to a shared message queue"},"official_description_zh":"等待另一个进程附加到共享消息队列。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_MESSAGE_QUEUE_INTERNAL` 位于 `src/backend/storage/ipc/shm_mq.c:1254`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:139`。探针覆盖的操作是：等待另一个进程附加到共享消息队列。MessageQueueInternal 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/MessageQueueInternal","title_zh":"正在等待 IPC/MessageQueueInternal 的会话","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 = 'IPC'\n  AND wait_event = 'MessageQueueInternal'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'MessageQueueInternal'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/shm_mq.c","line":1254,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_MESSAGE_QUEUE_INTERNAL","excerpt":"WAIT_EVENT_MESSAGE_QUEUE_INTERNAL);","grep_pattern":"WAIT_EVENT_MESSAGE_QUEUE_INTERNAL","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/shm_mq.c#L1254"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":139,"kind":"catalog_definition","status":"live_trigger","symbol":"MESSAGE_QUEUE_INTERNAL","excerpt":"MESSAGE_QUEUE_INTERNAL\t\"Waiting for another process to be attached to a shared message queue.\"","grep_pattern":"MESSAGE_QUEUE_INTERNAL","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L139"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-message-queue-put-message","type":"IPC","name":"MessageQueuePutMessage","slug":"message-queue-put-message","url":"/ipc/message-queue-put-message/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to write a protocol message to a shared message queue.","14":"Waiting to write a protocol message to a shared message queue.","15":"Waiting to write a protocol message to a shared message queue.","16":"Waiting to write a protocol message to a shared message queue.","17":"Waiting to write a protocol message to a shared message queue","18":"Waiting to write a protocol message to a shared message queue"},"official_description_zh":"等待向共享消息队列写入协议消息。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_MESSAGE_QUEUE_PUT_MESSAGE` 位于 `src/backend/libpq/pqmq.c:185`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:140`。探针覆盖的操作是：等待向共享消息队列写入协议消息。MessageQueuePutMessage 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/MessageQueuePutMessage","title_zh":"正在等待 IPC/MessageQueuePutMessage 的会话","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 = 'IPC'\n  AND wait_event = 'MessageQueuePutMessage'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'MessageQueuePutMessage'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/libpq/pqmq.c","line":185,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_MESSAGE_QUEUE_PUT_MESSAGE","excerpt":"WAIT_EVENT_MESSAGE_QUEUE_PUT_MESSAGE);","grep_pattern":"WAIT_EVENT_MESSAGE_QUEUE_PUT_MESSAGE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/libpq/pqmq.c#L185"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":140,"kind":"catalog_definition","status":"live_trigger","symbol":"MESSAGE_QUEUE_PUT_MESSAGE","excerpt":"MESSAGE_QUEUE_PUT_MESSAGE\t\"Waiting to write a protocol message to a shared message queue.\"","grep_pattern":"MESSAGE_QUEUE_PUT_MESSAGE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L140"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-message-queue-receive","type":"IPC","name":"MessageQueueReceive","slug":"message-queue-receive","url":"/ipc/message-queue-receive/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to receive bytes from a shared message queue.","14":"Waiting to receive bytes from a shared message queue.","15":"Waiting to receive bytes from a shared message queue.","16":"Waiting to receive bytes from a shared message queue.","17":"Waiting to receive bytes from a shared message queue","18":"Waiting to receive bytes from a shared message queue"},"official_description_zh":"等待从共享消息队列接收字节。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_MESSAGE_QUEUE_RECEIVE` 位于 `src/backend/storage/ipc/shm_mq.c:1165`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:141`。探针覆盖的操作是：等待从共享消息队列接收字节。MessageQueueReceive 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/MessageQueueReceive","title_zh":"正在等待 IPC/MessageQueueReceive 的会话","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 = 'IPC'\n  AND wait_event = 'MessageQueueReceive'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'MessageQueueReceive'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/shm_mq.c","line":1165,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_MESSAGE_QUEUE_RECEIVE","excerpt":"WAIT_EVENT_MESSAGE_QUEUE_RECEIVE);","grep_pattern":"WAIT_EVENT_MESSAGE_QUEUE_RECEIVE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/shm_mq.c#L1165"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":141,"kind":"catalog_definition","status":"live_trigger","symbol":"MESSAGE_QUEUE_RECEIVE","excerpt":"MESSAGE_QUEUE_RECEIVE\t\"Waiting to receive bytes from a shared message queue.\"","grep_pattern":"MESSAGE_QUEUE_RECEIVE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L141"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-message-queue-send","type":"IPC","name":"MessageQueueSend","slug":"message-queue-send","url":"/ipc/message-queue-send/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to send bytes to a shared message queue.","14":"Waiting to send bytes to a shared message queue.","15":"Waiting to send bytes to a shared message queue.","16":"Waiting to send bytes to a shared message queue.","17":"Waiting to send bytes to a shared message queue","18":"Waiting to send bytes to a shared message queue"},"official_description_zh":"等待向共享消息队列发送字节。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_MESSAGE_QUEUE_SEND` 位于 `src/backend/storage/ipc/shm_mq.c:1019`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:142`。探针覆盖的操作是：等待向共享消息队列发送字节。MessageQueueSend 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/MessageQueueSend","title_zh":"正在等待 IPC/MessageQueueSend 的会话","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 = 'IPC'\n  AND wait_event = 'MessageQueueSend'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'MessageQueueSend'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/shm_mq.c","line":1019,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_MESSAGE_QUEUE_SEND","excerpt":"WAIT_EVENT_MESSAGE_QUEUE_SEND);","grep_pattern":"WAIT_EVENT_MESSAGE_QUEUE_SEND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/shm_mq.c#L1019"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":142,"kind":"catalog_definition","status":"live_trigger","symbol":"MESSAGE_QUEUE_SEND","excerpt":"MESSAGE_QUEUE_SEND\t\"Waiting to send bytes to a shared message queue.\"","grep_pattern":"MESSAGE_QUEUE_SEND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L142"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-multixact-creation","type":"IPC","name":"MultixactCreation","slug":"multixact-creation","url":"/ipc/multixact-creation/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting for a multixact creation to complete","18":"Waiting for a multixact creation to complete"},"official_description_zh":"等待 multixact 创建完成。","mechanism":{"en":"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](https://www.postgresql.org/docs/17/release-17-8.html), [PostgreSQL 18.2 release note](https://www.postgresql.org/docs/18/release-18-2.html).","zh":"目录中仍保留该身份，但源码审计确认在 17.8+, 18.2+ 已没有活动报告点。已知曾可触发范围：17.0-17.7, 18.0-18.1。下方定义位置作为负面证据保留；当前精确版本不会从核心代码路径发出此事件。 证据：[PostgreSQL 17.8 release note](https://www.postgresql.org/docs/17/release-17-8.html)、[PostgreSQL 18.2 release note](https://www.postgresql.org/docs/18/release-18-2.html)。"},"normal":{"en":"No live core occurrence is expected on the audited release.","zh":"在已审计的精确版本上，不应出现活动的核心触发。"},"trouble":{"en":"If telemetry shows it, verify the exact patch version, extension origin, and whether the sample is stale or came from a different server.","zh":"若监控仍显示它，应核对精确小版本、扩展来源，并确认样本是否陈旧或来自另一台服务器。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/MultixactCreation","title_zh":"正在等待 IPC/MultixactCreation 的会话","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 = 'IPC'\n  AND wait_event = 'MultixactCreation'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'MultixactCreation'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":143,"kind":"catalog_definition","status":"catalog_only","symbol":"MULTIXACT_CREATION","excerpt":"MULTIXACT_CREATION\t\"Waiting for a multixact creation to complete.\"","grep_pattern":"MULTIXACT_CREATION","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L143"}],"source_status":"catalog_only","emission":{"status":"dormant","active_ranges":["17.0-17.7","18.0-18.1"],"dormant_ranges":["17.8+","18.2+"],"reason":"wait loop removed while the catalog identity was retained for compatibility","evidence":[{"label":"PostgreSQL 17.8 release note","url":"https://www.postgresql.org/docs/17/release-17-8.html"},{"label":"PostgreSQL 18.2 release note","url":"https://www.postgresql.org/docs/18/release-18-2.html"}],"historical_triggers":[{"tag":"REL_17_7","path":"src/backend/access/transam/multixact.c","line":1484},{"tag":"REL_18_1","path":"src/backend/access/transam/multixact.c","line":1493}]},"gucs":["autovacuum_multixact_freeze_max_age","vacuum_multixact_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_multixact_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-parallel-bitmap-scan","type":"IPC","name":"ParallelBitmapScan","slug":"parallel-bitmap-scan","url":"/ipc/parallel-bitmap-scan/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for parallel bitmap scan to become initialized.","14":"Waiting for parallel bitmap scan to become initialized.","15":"Waiting for parallel bitmap scan to become initialized.","16":"Waiting for parallel bitmap scan to become initialized.","17":"Waiting for parallel bitmap scan to become initialized","18":"Waiting for parallel bitmap scan to become initialized"},"official_description_zh":"等待并行位图扫描完成初始化。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_PARALLEL_BITMAP_SCAN` 位于 `src/backend/executor/nodeBitmapHeapscan.c:437`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:144`。探针覆盖的操作是：等待并行位图扫描完成初始化。ParallelBitmapScan 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/ParallelBitmapScan","title_zh":"正在等待 IPC/ParallelBitmapScan 的会话","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 = 'IPC'\n  AND wait_event = 'ParallelBitmapScan'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'ParallelBitmapScan'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeBitmapHeapscan.c","line":437,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_PARALLEL_BITMAP_SCAN","excerpt":"ConditionVariableSleep(&pstate->cv, WAIT_EVENT_PARALLEL_BITMAP_SCAN);","grep_pattern":"WAIT_EVENT_PARALLEL_BITMAP_SCAN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeBitmapHeapscan.c#L437"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":144,"kind":"catalog_definition","status":"live_trigger","symbol":"PARALLEL_BITMAP_SCAN","excerpt":"PARALLEL_BITMAP_SCAN\t\"Waiting for parallel bitmap scan to become initialized.\"","grep_pattern":"PARALLEL_BITMAP_SCAN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L144"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-parallel-create-index-scan","type":"IPC","name":"ParallelCreateIndexScan","slug":"parallel-create-index-scan","url":"/ipc/parallel-create-index-scan/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for parallel CREATE INDEX workers to finish heap scan.","14":"Waiting for parallel CREATE INDEX workers to finish heap scan.","15":"Waiting for parallel CREATE INDEX workers to finish heap scan.","16":"Waiting for parallel CREATE INDEX workers to finish heap scan.","17":"Waiting for parallel CREATE INDEX workers to finish heap scan","18":"Waiting for parallel CREATE INDEX workers to finish heap scan"},"official_description_zh":"等待并行 CREATE INDEX 工作进程完成 heap 扫描。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_PARALLEL_CREATE_INDEX_SCAN` 位于 `src/backend/access/brin/brin.c:2600`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:145`。探针覆盖的操作是：等待并行 CREATE INDEX 工作进程完成 heap 扫描。ParallelCreateIndexScan 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/ParallelCreateIndexScan","title_zh":"正在等待 IPC/ParallelCreateIndexScan 的会话","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 = 'IPC'\n  AND wait_event = 'ParallelCreateIndexScan'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'ParallelCreateIndexScan'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/brin/brin.c","line":2600,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_PARALLEL_CREATE_INDEX_SCAN","excerpt":"WAIT_EVENT_PARALLEL_CREATE_INDEX_SCAN);","grep_pattern":"WAIT_EVENT_PARALLEL_CREATE_INDEX_SCAN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/brin/brin.c#L2600"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":145,"kind":"catalog_definition","status":"live_trigger","symbol":"PARALLEL_CREATE_INDEX_SCAN","excerpt":"PARALLEL_CREATE_INDEX_SCAN\t\"Waiting for parallel <command>CREATE INDEX</command> workers to finish heap scan.\"","grep_pattern":"PARALLEL_CREATE_INDEX_SCAN","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L145"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-parallel-finish","type":"IPC","name":"ParallelFinish","slug":"parallel-finish","url":"/ipc/parallel-finish/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for parallel workers to finish computing.","14":"Waiting for parallel workers to finish computing.","15":"Waiting for parallel workers to finish computing.","16":"Waiting for parallel workers to finish computing.","17":"Waiting for parallel workers to finish computing","18":"Waiting for parallel workers to finish computing"},"official_description_zh":"等待并行工作进程完成计算。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_PARALLEL_FINISH` 位于 `src/backend/access/transam/parallel.c:894`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:146`。探针覆盖的操作是：等待并行工作进程完成计算。ParallelFinish 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/ParallelFinish","title_zh":"正在等待 IPC/ParallelFinish 的会话","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 = 'IPC'\n  AND wait_event = 'ParallelFinish'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'ParallelFinish'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/parallel.c","line":894,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_PARALLEL_FINISH","excerpt":"WAIT_EVENT_PARALLEL_FINISH);","grep_pattern":"WAIT_EVENT_PARALLEL_FINISH","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/parallel.c#L894"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":146,"kind":"catalog_definition","status":"live_trigger","symbol":"PARALLEL_FINISH","excerpt":"PARALLEL_FINISH\t\"Waiting for parallel workers to finish computing.\"","grep_pattern":"PARALLEL_FINISH","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L146"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-proc-signal-barrier","type":"IPC","name":"ProcSignalBarrier","slug":"proc-signal-barrier","url":"/ipc/proc-signal-barrier/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a barrier event to be processed by all backends.","14":"Waiting for a barrier event to be processed by all backends.","15":"Waiting for a barrier event to be processed by all backends.","16":"Waiting for a barrier event to be processed by all backends.","17":"Waiting for a barrier event to be processed by all backends","18":"Waiting for a barrier event to be processed by all backends"},"official_description_zh":"等待所有后端处理完 barrier 事件。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_PROC_SIGNAL_BARRIER` 位于 `src/backend/storage/ipc/procsignal.c:458`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:148`。探针覆盖的操作是：等待所有后端处理完 barrier 事件。ProcSignalBarrier 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/ProcSignalBarrier","title_zh":"正在等待 IPC/ProcSignalBarrier 的会话","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 = 'IPC'\n  AND wait_event = 'ProcSignalBarrier'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'ProcSignalBarrier'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/procsignal.c","line":458,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_PROC_SIGNAL_BARRIER","excerpt":"WAIT_EVENT_PROC_SIGNAL_BARRIER))","grep_pattern":"WAIT_EVENT_PROC_SIGNAL_BARRIER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/procsignal.c#L458"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":148,"kind":"catalog_definition","status":"live_trigger","symbol":"PROC_SIGNAL_BARRIER","excerpt":"PROC_SIGNAL_BARRIER\t\"Waiting for a barrier event to be processed by all backends.\"","grep_pattern":"PROC_SIGNAL_BARRIER","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L148"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-procarray-group-update","type":"IPC","name":"ProcarrayGroupUpdate","slug":"procarray-group-update","url":"/ipc/procarray-group-update/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[{"type":"IPC","name":"ProcArrayGroupUpdate","versions":"13-16","version_list":[13,14,15,16],"change":"spelling"}],"official_descriptions":{"17":"Waiting for the group leader to clear the transaction ID at transaction end","18":"Waiting for the group leader to clear the transaction ID at transaction end"},"official_description_zh":"等待 group leader 在事务结束时清除事务 ID。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_PROCARRAY_GROUP_UPDATE` 位于 `src/backend/storage/ipc/procarray.c:829`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:428`。探针覆盖的操作是：等待 group leader 在事务结束时清除事务 ID。ProcarrayGroupUpdate 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/ProcarrayGroupUpdate","title_zh":"正在等待 IPC/ProcarrayGroupUpdate 的会话","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 = 'IPC'\n  AND wait_event = 'ProcarrayGroupUpdate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'ProcarrayGroupUpdate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/storage/ipc/procarray.c","line":829,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_PROCARRAY_GROUP_UPDATE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_PROCARRAY_GROUP_UPDATE);","grep_pattern":"WAIT_EVENT_PROCARRAY_GROUP_UPDATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/storage/ipc/procarray.c#L829"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/activity/wait_event.c","line":428,"kind":"catalog_definition","status":"live_trigger","symbol":"ProcArrayGroupUpdate","excerpt":"event_name = \"ProcArrayGroupUpdate\";","grep_pattern":"ProcArrayGroupUpdate","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/activity/wait_event.c#L428"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/procarray.c","line":827,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_PROCARRAY_GROUP_UPDATE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_PROCARRAY_GROUP_UPDATE);","grep_pattern":"WAIT_EVENT_PROCARRAY_GROUP_UPDATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/procarray.c#L827"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":147,"kind":"catalog_definition","status":"live_trigger","symbol":"PROCARRAY_GROUP_UPDATE","excerpt":"PROCARRAY_GROUP_UPDATE\t\"Waiting for the group leader to clear the transaction ID at transaction end.\"","grep_pattern":"PROCARRAY_GROUP_UPDATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L147"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-promote","type":"IPC","name":"Promote","slug":"promote","url":"/ipc/promote/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for standby promotion.","14":"Waiting for standby promotion.","15":"Waiting for standby promotion.","16":"Waiting for standby promotion.","17":"Waiting for standby promotion","18":"Waiting for standby promotion"},"official_description_zh":"等待备库提升。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_PROMOTE` 位于 `src/backend/access/transam/xlogfuncs.c:731`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:149`。探针覆盖的操作是：等待备库提升。Promote 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/Promote","title_zh":"正在等待 IPC/Promote 的会话","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 = 'IPC'\n  AND wait_event = 'Promote'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'Promote'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlogfuncs.c","line":731,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_PROMOTE","excerpt":"WAIT_EVENT_PROMOTE);","grep_pattern":"WAIT_EVENT_PROMOTE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlogfuncs.c#L731"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":149,"kind":"catalog_definition","status":"live_trigger","symbol":"PROMOTE","excerpt":"PROMOTE\t\"Waiting for standby promotion.\"","grep_pattern":"PROMOTE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L149"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-recovery-conflict-snapshot","type":"IPC","name":"RecoveryConflictSnapshot","slug":"recovery-conflict-snapshot","url":"/ipc/recovery-conflict-snapshot/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for recovery conflict resolution for a vacuum cleanup.","14":"Waiting for recovery conflict resolution for a vacuum cleanup.","15":"Waiting for recovery conflict resolution for a vacuum cleanup.","16":"Waiting for recovery conflict resolution for a vacuum cleanup.","17":"Waiting for recovery conflict resolution for a vacuum cleanup","18":"Waiting for recovery conflict resolution for a vacuum cleanup"},"official_description_zh":"等待解决与 vacuum cleanup 有关的恢复冲突。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_RECOVERY_CONFLICT_SNAPSHOT` 位于 `src/backend/storage/ipc/standby.c:493`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:150`。探针覆盖的操作是：等待解决与 vacuum cleanup 有关的恢复冲突。RecoveryConflictSnapshot 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/RecoveryConflictSnapshot","title_zh":"正在等待 IPC/RecoveryConflictSnapshot 的会话","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 = 'IPC'\n  AND wait_event = 'RecoveryConflictSnapshot'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'RecoveryConflictSnapshot'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/standby.c","line":493,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RECOVERY_CONFLICT_SNAPSHOT","excerpt":"WAIT_EVENT_RECOVERY_CONFLICT_SNAPSHOT,","grep_pattern":"WAIT_EVENT_RECOVERY_CONFLICT_SNAPSHOT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/standby.c#L493"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":150,"kind":"catalog_definition","status":"live_trigger","symbol":"RECOVERY_CONFLICT_SNAPSHOT","excerpt":"RECOVERY_CONFLICT_SNAPSHOT\t\"Waiting for recovery conflict resolution for a vacuum cleanup.\"","grep_pattern":"RECOVERY_CONFLICT_SNAPSHOT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L150"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-recovery-conflict-tablespace","type":"IPC","name":"RecoveryConflictTablespace","slug":"recovery-conflict-tablespace","url":"/ipc/recovery-conflict-tablespace/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for recovery conflict resolution for dropping a tablespace.","14":"Waiting for recovery conflict resolution for dropping a tablespace.","15":"Waiting for recovery conflict resolution for dropping a tablespace.","16":"Waiting for recovery conflict resolution for dropping a tablespace.","17":"Waiting for recovery conflict resolution for dropping a tablespace","18":"Waiting for recovery conflict resolution for dropping a tablespace"},"official_description_zh":"等待解决与删除表空间有关的恢复冲突。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_RECOVERY_CONFLICT_TABLESPACE` 位于 `src/backend/storage/ipc/standby.c:564`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:151`。探针覆盖的操作是：等待解决与删除表空间有关的恢复冲突。RecoveryConflictTablespace 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/RecoveryConflictTablespace","title_zh":"正在等待 IPC/RecoveryConflictTablespace 的会话","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 = 'IPC'\n  AND wait_event = 'RecoveryConflictTablespace'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'RecoveryConflictTablespace'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/standby.c","line":564,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RECOVERY_CONFLICT_TABLESPACE","excerpt":"WAIT_EVENT_RECOVERY_CONFLICT_TABLESPACE,","grep_pattern":"WAIT_EVENT_RECOVERY_CONFLICT_TABLESPACE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/standby.c#L564"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":151,"kind":"catalog_definition","status":"live_trigger","symbol":"RECOVERY_CONFLICT_TABLESPACE","excerpt":"RECOVERY_CONFLICT_TABLESPACE\t\"Waiting for recovery conflict resolution for dropping a tablespace.\"","grep_pattern":"RECOVERY_CONFLICT_TABLESPACE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L151"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-recovery-end-command","type":"IPC","name":"RecoveryEndCommand","slug":"recovery-end-command","url":"/ipc/recovery-end-command/","versions":[15,16,17,18],"version_range":"15-18","availability":{},"aliases":[],"official_descriptions":{"15":"Waiting for recovery_end_command to complete.","16":"Waiting for recovery_end_command to complete.","17":"Waiting for recovery_end_command to complete","18":"Waiting for recovery_end_command to complete"},"official_description_zh":"等待 recovery_end_command 完成。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_RECOVERY_END_COMMAND` 位于 `src/backend/access/transam/xlog.c:5337`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:152`。探针覆盖的操作是：等待 recovery_end_command 完成。RecoveryEndCommand 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/RecoveryEndCommand","title_zh":"正在等待 IPC/RecoveryEndCommand 的会话","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 = 'IPC'\n  AND wait_event = 'RecoveryEndCommand'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'RecoveryEndCommand'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":5337,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RECOVERY_END_COMMAND","excerpt":"WAIT_EVENT_RECOVERY_END_COMMAND);","grep_pattern":"WAIT_EVENT_RECOVERY_END_COMMAND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L5337"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":152,"kind":"catalog_definition","status":"live_trigger","symbol":"RECOVERY_END_COMMAND","excerpt":"RECOVERY_END_COMMAND\t\"Waiting for <xref linkend=\"guc-recovery-end-command\"/> to complete.\"","grep_pattern":"RECOVERY_END_COMMAND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L152"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-recovery-pause","type":"IPC","name":"RecoveryPause","slug":"recovery-pause","url":"/ipc/recovery-pause/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for recovery to be resumed.","14":"Waiting for recovery to be resumed.","15":"Waiting for recovery to be resumed.","16":"Waiting for recovery to be resumed.","17":"Waiting for recovery to be resumed","18":"Waiting for recovery to be resumed"},"official_description_zh":"等待恢复操作继续执行。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_RECOVERY_PAUSE` 位于 `src/backend/access/transam/xlogrecovery.c:2994`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:153`。探针覆盖的操作是：等待恢复操作继续执行。RecoveryPause 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/RecoveryPause","title_zh":"正在等待 IPC/RecoveryPause 的会话","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 = 'IPC'\n  AND wait_event = 'RecoveryPause'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'RecoveryPause'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlogrecovery.c","line":2994,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RECOVERY_PAUSE","excerpt":"WAIT_EVENT_RECOVERY_PAUSE);","grep_pattern":"WAIT_EVENT_RECOVERY_PAUSE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlogrecovery.c#L2994"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":153,"kind":"catalog_definition","status":"live_trigger","symbol":"RECOVERY_PAUSE","excerpt":"RECOVERY_PAUSE\t\"Waiting for recovery to be resumed.\"","grep_pattern":"RECOVERY_PAUSE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L153"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-replication-origin-drop","type":"IPC","name":"ReplicationOriginDrop","slug":"replication-origin-drop","url":"/ipc/replication-origin-drop/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a replication origin to become inactive so it can be dropped.","14":"Waiting for a replication origin to become inactive so it can be dropped.","15":"Waiting for a replication origin to become inactive so it can be dropped.","16":"Waiting for a replication origin to become inactive so it can be dropped.","17":"Waiting for a replication origin to become inactive so it can be dropped","18":"Waiting for a replication origin to become inactive so it can be dropped"},"official_description_zh":"等待复制源变为非活动状态，以便将其删除。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_REPLICATION_ORIGIN_DROP` 位于 `src/backend/replication/logical/origin.c:408`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:154`。探针覆盖的操作是：等待复制源变为非活动状态，以便将其删除。ReplicationOriginDrop 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/ReplicationOriginDrop","title_zh":"正在等待 IPC/ReplicationOriginDrop 的会话","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 = 'IPC'\n  AND wait_event = 'ReplicationOriginDrop'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'ReplicationOriginDrop'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/origin.c","line":408,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REPLICATION_ORIGIN_DROP","excerpt":"ConditionVariableSleep(cv, WAIT_EVENT_REPLICATION_ORIGIN_DROP);","grep_pattern":"WAIT_EVENT_REPLICATION_ORIGIN_DROP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/origin.c#L408"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":154,"kind":"catalog_definition","status":"live_trigger","symbol":"REPLICATION_ORIGIN_DROP","excerpt":"REPLICATION_ORIGIN_DROP\t\"Waiting for a replication origin to become inactive so it can be dropped.\"","grep_pattern":"REPLICATION_ORIGIN_DROP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L154"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-replication-slot-drop","type":"IPC","name":"ReplicationSlotDrop","slug":"replication-slot-drop","url":"/ipc/replication-slot-drop/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a replication slot to become inactive so it can be dropped.","14":"Waiting for a replication slot to become inactive so it can be dropped.","15":"Waiting for a replication slot to become inactive so it can be dropped.","16":"Waiting for a replication slot to become inactive so it can be dropped.","17":"Waiting for a replication slot to become inactive so it can be dropped","18":"Waiting for a replication slot to become inactive so it can be dropped"},"official_description_zh":"等待复制槽变为非活动状态，以便将其删除。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_REPLICATION_SLOT_DROP` 位于 `src/backend/replication/slot.c:657`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:155`。探针覆盖的操作是：等待复制槽变为非活动状态，以便将其删除。ReplicationSlotDrop 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/ReplicationSlotDrop","title_zh":"正在等待 IPC/ReplicationSlotDrop 的会话","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 = 'IPC'\n  AND wait_event = 'ReplicationSlotDrop'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'ReplicationSlotDrop'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/slot.c","line":657,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REPLICATION_SLOT_DROP","excerpt":"WAIT_EVENT_REPLICATION_SLOT_DROP);","grep_pattern":"WAIT_EVENT_REPLICATION_SLOT_DROP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/slot.c#L657"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":155,"kind":"catalog_definition","status":"live_trigger","symbol":"REPLICATION_SLOT_DROP","excerpt":"REPLICATION_SLOT_DROP\t\"Waiting for a replication slot to become inactive so it can be dropped.\"","grep_pattern":"REPLICATION_SLOT_DROP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L155"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-restore-command","type":"IPC","name":"RestoreCommand","slug":"restore-command","url":"/ipc/restore-command/","versions":[15,16,17,18],"version_range":"15-18","availability":{},"aliases":[],"official_descriptions":{"15":"Waiting for restore_command to complete.","16":"Waiting for restore_command to complete.","17":"Waiting for restore_command to complete","18":"Waiting for restore_command to complete"},"official_description_zh":"等待 restore_command 完成。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_RESTORE_COMMAND` 位于 `src/backend/access/transam/xlogarchive.c:162`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:156`。探针覆盖的操作是：等待 restore_command 完成。RestoreCommand 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/RestoreCommand","title_zh":"正在等待 IPC/RestoreCommand 的会话","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 = 'IPC'\n  AND wait_event = 'RestoreCommand'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'RestoreCommand'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlogarchive.c","line":162,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RESTORE_COMMAND","excerpt":"pgstat_report_wait_start(WAIT_EVENT_RESTORE_COMMAND);","grep_pattern":"WAIT_EVENT_RESTORE_COMMAND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlogarchive.c#L162"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":156,"kind":"catalog_definition","status":"live_trigger","symbol":"RESTORE_COMMAND","excerpt":"RESTORE_COMMAND\t\"Waiting for <xref linkend=\"guc-restore-command\"/> to complete.\"","grep_pattern":"RESTORE_COMMAND","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L156"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-safe-snapshot","type":"IPC","name":"SafeSnapshot","slug":"safe-snapshot","url":"/ipc/safe-snapshot/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction.","14":"Waiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction.","15":"Waiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction.","16":"Waiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction.","17":"Waiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction","18":"Waiting to obtain a valid snapshot for a READ ONLY DEFERRABLE transaction"},"official_description_zh":"等待为 READ ONLY DEFERRABLE 事务获取有效 snapshot。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_SAFE_SNAPSHOT` 位于 `src/backend/storage/lmgr/predicate.c:1589`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:157`。探针覆盖的操作是：等待为 READ ONLY DEFERRABLE 事务获取有效 snapshot。SafeSnapshot 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/SafeSnapshot","title_zh":"正在等待 IPC/SafeSnapshot 的会话","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 = 'IPC'\n  AND wait_event = 'SafeSnapshot'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'SafeSnapshot'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/predicate.c","line":1589,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SAFE_SNAPSHOT","excerpt":"ProcWaitForSignal(WAIT_EVENT_SAFE_SNAPSHOT);","grep_pattern":"WAIT_EVENT_SAFE_SNAPSHOT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/predicate.c#L1589"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":157,"kind":"catalog_definition","status":"live_trigger","symbol":"SAFE_SNAPSHOT","excerpt":"SAFE_SNAPSHOT\t\"Waiting to obtain a valid snapshot for a <literal>READ ONLY DEFERRABLE</literal> transaction.\"","grep_pattern":"SAFE_SNAPSHOT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L157"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-sync-rep","type":"IPC","name":"SyncRep","slug":"sync-rep","url":"/ipc/sync-rep/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for confirmation from a remote server during synchronous replication.","14":"Waiting for confirmation from a remote server during synchronous replication.","15":"Waiting for confirmation from a remote server during synchronous replication.","16":"Waiting for confirmation from a remote server during synchronous replication.","17":"Waiting for confirmation from a remote server during synchronous replication","18":"Waiting for confirmation from a remote server during synchronous replication"},"official_description_zh":"等待同步复制期间来自远端服务器的确认。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_SYNC_REP` 位于 `src/backend/replication/syncrep.c:332`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:158`。探针覆盖的操作是：等待同步复制期间来自远端服务器的确认。SyncRep 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/SyncRep","title_zh":"正在等待 IPC/SyncRep 的会话","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 = 'IPC'\n  AND wait_event = 'SyncRep'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'SyncRep'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/syncrep.c","line":332,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SYNC_REP","excerpt":"WAIT_EVENT_SYNC_REP);","grep_pattern":"WAIT_EVENT_SYNC_REP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/syncrep.c#L332"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":158,"kind":"catalog_definition","status":"live_trigger","symbol":"SYNC_REP","excerpt":"SYNC_REP\t\"Waiting for confirmation from a remote server during synchronous replication.\"","grep_pattern":"SYNC_REP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L158"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["synchronous_standby_names"],"metrics":["waiting_sessions","wait_event_share","replication_flush_lag"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-wal-receiver-exit","type":"IPC","name":"WalReceiverExit","slug":"wal-receiver-exit","url":"/ipc/wal-receiver-exit/","versions":[14,15,16,17,18],"version_range":"14-18","availability":{},"aliases":[],"official_descriptions":{"14":"Waiting for the WAL receiver to exit.","15":"Waiting for the WAL receiver to exit.","16":"Waiting for the WAL receiver to exit.","17":"Waiting for the WAL receiver to exit","18":"Waiting for the WAL receiver to exit"},"official_description_zh":"等待 WAL receiver 退出。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_WAL_RECEIVER_EXIT` 位于 `src/backend/replication/walreceiverfuncs.c:228`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:159`。探针覆盖的操作是：等待 WAL receiver 退出。WalReceiverExit 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/WalReceiverExit","title_zh":"正在等待 IPC/WalReceiverExit 的会话","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 = 'IPC'\n  AND wait_event = 'WalReceiverExit'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'WalReceiverExit'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/walreceiverfuncs.c","line":228,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_RECEIVER_EXIT","excerpt":"WAIT_EVENT_WAL_RECEIVER_EXIT);","grep_pattern":"WAIT_EVENT_WAL_RECEIVER_EXIT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/walreceiverfuncs.c#L228"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":159,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_RECEIVER_EXIT","excerpt":"WAL_RECEIVER_EXIT\t\"Waiting for the WAL receiver to exit.\"","grep_pattern":"WAL_RECEIVER_EXIT","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L159"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-wal-receiver-upstream-catchup","type":"IPC","name":"WalReceiverUpstreamCatchup","slug":"wal-receiver-upstream-catchup","url":"/ipc/wal-receiver-upstream-catchup/","versions":[17,18],"version_range":"17-18","availability":{"observed_releases":["17.11","18.6"],"not_observed":["17.10","18.4"],"en":"Observed in 17.11+ and 18.6+; it is absent from 17.10 and 18.4, so the major-only range is insufficient.","zh":"实测从 17.11+ 与 18.6+ 出现；17.10 与 18.4 中不存在，因此不能只写大版本范围。"},"aliases":[],"official_descriptions":{"17":"Waiting for upstream server WAL flush position to catch up to requested start point","18":"Waiting for upstream server WAL flush position to catch up to requested start point"},"official_description_zh":"等待上游服务器的 WAL flush 位置追上请求的起始点。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_WAL_RECEIVER_UPSTREAM_CATCHUP` 位于 `src/backend/replication/walreceiver.c:398`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:165`。探针覆盖的操作是：等待上游服务器的 WAL flush 位置追上请求的起始点。WalReceiverUpstreamCatchup 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/WalReceiverUpstreamCatchup","title_zh":"正在等待 IPC/WalReceiverUpstreamCatchup 的会话","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 = 'IPC'\n  AND wait_event = 'WalReceiverUpstreamCatchup'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'WalReceiverUpstreamCatchup'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/walreceiver.c","line":398,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_RECEIVER_UPSTREAM_CATCHUP","excerpt":"WAIT_EVENT_WAL_RECEIVER_UPSTREAM_CATCHUP);","grep_pattern":"WAIT_EVENT_WAL_RECEIVER_UPSTREAM_CATCHUP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/walreceiver.c#L398"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":165,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_RECEIVER_UPSTREAM_CATCHUP","excerpt":"WAL_RECEIVER_UPSTREAM_CATCHUP\t\"Waiting for upstream server WAL flush position to catch up to requested start point.\"","grep_pattern":"WAL_RECEIVER_UPSTREAM_CATCHUP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L165"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-wal-receiver-wait-start","type":"IPC","name":"WalReceiverWaitStart","slug":"wal-receiver-wait-start","url":"/ipc/wal-receiver-wait-start/","versions":[14,15,16,17,18],"version_range":"14-18","availability":{},"aliases":[{"type":"Client","name":"WalReceiverWaitStart","versions":"13","version_list":[13],"change":"type_move"}],"official_descriptions":{"14":"Waiting for startup process to send initial data for streaming replication.","15":"Waiting for startup process to send initial data for streaming replication.","16":"Waiting for startup process to send initial data for streaming replication.","17":"Waiting for startup process to send initial data for streaming replication","18":"Waiting for startup process to send initial data for streaming replication"},"official_description_zh":"等待 startup 进程发送流复制的初始数据。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_WAL_RECEIVER_WAIT_START` 位于 `src/backend/postmaster/pgstat.c:3738`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/postmaster/pgstat.c:3739`。探针覆盖的操作是：等待 startup 进程发送流复制的初始数据。WalReceiverWaitStart 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/WalReceiverWaitStart","title_zh":"正在等待 IPC/WalReceiverWaitStart 的会话","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 = 'IPC'\n  AND wait_event = 'WalReceiverWaitStart'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'WalReceiverWaitStart'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":13,"version":"13.23","tag":"REL_13_23","commit":"89df812eb890814b105d871185935b580478e660","path":"src/backend/postmaster/pgstat.c","line":3738,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_RECEIVER_WAIT_START","excerpt":"case WAIT_EVENT_WAL_RECEIVER_WAIT_START:","grep_pattern":"WAIT_EVENT_WAL_RECEIVER_WAIT_START","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_13_23/src/backend/postmaster/pgstat.c#L3738"},{"major":13,"version":"13.23","tag":"REL_13_23","commit":"89df812eb890814b105d871185935b580478e660","path":"src/backend/postmaster/pgstat.c","line":3739,"kind":"catalog_definition","status":"live_trigger","symbol":"WalReceiverWaitStart","excerpt":"event_name = \"WalReceiverWaitStart\";","grep_pattern":"WalReceiverWaitStart","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_13_23/src/backend/postmaster/pgstat.c#L3739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/walreceiver.c","line":784,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_RECEIVER_WAIT_START","excerpt":"WAIT_EVENT_WAL_RECEIVER_WAIT_START);","grep_pattern":"WAIT_EVENT_WAL_RECEIVER_WAIT_START","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/walreceiver.c#L784"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":160,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_RECEIVER_WAIT_START","excerpt":"WAL_RECEIVER_WAIT_START\t\"Waiting for startup process to send initial data for streaming replication.\"","grep_pattern":"WAL_RECEIVER_WAIT_START","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L160"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-wal-summary-ready","type":"IPC","name":"WalSummaryReady","slug":"wal-summary-ready","url":"/ipc/wal-summary-ready/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting for a new WAL summary to be generated","18":"Waiting for a new WAL summary to be generated"},"official_description_zh":"等待生成新的 WAL summary。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_WAL_SUMMARY_READY` 位于 `src/backend/postmaster/walsummarizer.c:821`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:161`。探针覆盖的操作是：等待生成新的 WAL summary。WalSummaryReady 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/WalSummaryReady","title_zh":"正在等待 IPC/WalSummaryReady 的会话","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 = 'IPC'\n  AND wait_event = 'WalSummaryReady'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'WalSummaryReady'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/walsummarizer.c","line":821,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SUMMARY_READY","excerpt":"WAIT_EVENT_WAL_SUMMARY_READY);","grep_pattern":"WAIT_EVENT_WAL_SUMMARY_READY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/walsummarizer.c#L821"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":161,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_SUMMARY_READY","excerpt":"WAL_SUMMARY_READY\t\"Waiting for a new WAL summary to be generated.\"","grep_pattern":"WAL_SUMMARY_READY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L161"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"ipc-xact-group-update","type":"IPC","name":"XactGroupUpdate","slug":"xact-group-update","url":"/ipc/xact-group-update/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for the group leader to update transaction status at transaction end.","14":"Waiting for the group leader to update transaction status at transaction end.","15":"Waiting for the group leader to update transaction status at transaction end.","16":"Waiting for the group leader to update transaction status at transaction end.","17":"Waiting for the group leader to update transaction status at transaction end","18":"Waiting for the group leader to update transaction status at transaction end"},"official_description_zh":"等待 group leader 在事务结束时更新事务状态。","mechanism":{"en":"`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.","zh":"`WAIT_EVENT_XACT_GROUP_UPDATE` 位于 `src/backend/access/transam/clog.c:535`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:162`。探针覆盖的操作是：等待 group leader 在事务结束时更新事务状态。XactGroupUpdate 路径已经到达进程协调点，会休眠到对端、worker、屏障、队列或复制阶段发出进展信号。"},"normal":{"en":"Brief rendezvous is normal when every participant continues to advance.","zh":"只要所有参与者都在继续推进，短暂汇合就属正常。"},"trouble":{"en":"Investigate when the same phase persists across three samples, the expected peer is absent or blocked, or a queue and its dependants stop moving.","zh":"同一阶段连续三次采样仍存在、预期对端缺失或被阻塞，或队列及其依赖者停止推进时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on IPC/XactGroupUpdate","title_zh":"正在等待 IPC/XactGroupUpdate 的会话","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 = 'IPC'\n  AND wait_event = 'XactGroupUpdate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current IPC cohort","title_zh":"当前 IPC 等待分布","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 = 'IPC'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'IPC'\n  AND a.wait_event = 'XactGroupUpdate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the peer or phase named by the event.","Inspect that participant's wait, error, and progress state.","Repair the stalled participant or upstream dependency instead of treating the waiter as the root cause."],"zh":["确认事件所指的对端或阶段。","检查该参与者的等待、错误与进展状态。","修复停滞的参与者或上游依赖，不要把等待者当作根因。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/clog.c","line":535,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_XACT_GROUP_UPDATE","excerpt":"pgstat_report_wait_start(WAIT_EVENT_XACT_GROUP_UPDATE);","grep_pattern":"WAIT_EVENT_XACT_GROUP_UPDATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/clog.c#L535"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":162,"kind":"catalog_definition","status":"live_trigger","symbol":"XACT_GROUP_UPDATE","excerpt":"XACT_GROUP_UPDATE\t\"Waiting for the group leader to update transaction status at transaction end.\"","grep_pattern":"XACT_GROUP_UPDATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L162"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_freeze_max_age","vacuum_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-advisory","type":"Lock","name":"advisory","slug":"advisory","url":"/lock/advisory/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to acquire an advisory user lock.","14":"Waiting to acquire an advisory user lock.","15":"Waiting to acquire an advisory user lock.","16":"Waiting to acquire an advisory user lock.","17":"Waiting to acquire an advisory user lock","18":"Waiting to acquire an advisory user lock"},"official_description_zh":"等待获取用户 advisory lock。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:428`. The instrumented operation is: Waiting to acquire an advisory user lock. The lock manager could not grant the advisory heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:428`。探针覆盖的操作是：等待获取用户 advisory lock。锁管理器无法立即授予 advisory 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/advisory","title_zh":"正在等待 Lock/advisory 的会话","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 = 'Lock'\n  AND wait_event = 'advisory'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'advisory'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":428,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"advisory","excerpt":"advisory\t\"Waiting to acquire an advisory user lock.\"","grep_pattern":"advisory","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L428"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":39,"kind":"resource_path","status":"dynamic_trigger","symbol":"advisory","excerpt":"\"advisory\",","grep_pattern":"advisory","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L39"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-applytransaction","type":"Lock","name":"applytransaction","slug":"applytransaction","url":"/lock/applytransaction/","versions":[16,17,18],"version_range":"16-18","availability":{},"aliases":[],"official_descriptions":{"16":"Waiting to acquire a lock on a remote transaction being applied by a logical replication subscriber.","17":"Waiting to acquire a lock on a remote transaction being applied by a logical replication subscriber","18":"Waiting to acquire a lock on a remote transaction being applied by a logical replication subscriber"},"official_description_zh":"等待获取逻辑复制订阅端正在应用的远程事务上的锁。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:429`. The instrumented operation is: Waiting to acquire a lock on a remote transaction being applied by a logical replication subscriber. The lock manager could not grant the applytransaction heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:429`。探针覆盖的操作是：等待获取逻辑复制订阅端正在应用的远程事务上的锁。锁管理器无法立即授予 applytransaction 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/applytransaction","title_zh":"正在等待 Lock/applytransaction 的会话","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 = 'Lock'\n  AND wait_event = 'applytransaction'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'applytransaction'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":429,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"applytransaction","excerpt":"applytransaction\t\"Waiting to acquire a lock on a remote transaction being applied by a logical replication subscriber.\"","grep_pattern":"applytransaction","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L429"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":40,"kind":"resource_path","status":"dynamic_trigger","symbol":"applytransaction","excerpt":"\"applytransaction\"","grep_pattern":"applytransaction","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L40"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-extend","type":"Lock","name":"extend","slug":"extend","url":"/lock/extend/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to extend a relation.","14":"Waiting to extend a relation.","15":"Waiting to extend a relation.","16":"Waiting to extend a relation.","17":"Waiting to extend a relation","18":"Waiting to extend a relation"},"official_description_zh":"等待扩展 relation。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:419`. The instrumented operation is: Waiting to extend a relation. The lock manager could not grant the extend heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:419`。探针覆盖的操作是：等待扩展 relation。锁管理器无法立即授予 extend 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/extend","title_zh":"正在等待 Lock/extend 的会话","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 = 'Lock'\n  AND wait_event = 'extend'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'extend'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":419,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"extend","excerpt":"extend\t\"Waiting to extend a relation.\"","grep_pattern":"extend","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L419"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":30,"kind":"resource_path","status":"dynamic_trigger","symbol":"extend","excerpt":"\"extend\",","grep_pattern":"extend","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L30"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-frozenid","type":"Lock","name":"frozenid","slug":"frozenid","url":"/lock/frozenid/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to update pg_database.datfrozenxid and pg_database.datminmxid.","14":"Waiting to update pg_database.datfrozenxid and pg_database.datminmxid.","15":"Waiting to update pg_database.datfrozenxid and pg_database.datminmxid.","16":"Waiting to update pg_database.datfrozenxid and pg_database.datminmxid.","17":"Waiting to update pg_database.datfrozenxid and pg_database.datminmxid","18":"Waiting to update pg_database.datfrozenxid and pg_database.datminmxid"},"official_description_zh":"等待更新 pg_database.datfrozenxid 和 pg_database.datminmxid。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:420`. The instrumented operation is: Waiting to update pg_database.datfrozenxid and pg_database.datminmxid. The lock manager could not grant the frozenid heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:420`。探针覆盖的操作是：等待更新 pg_database.datfrozenxid 和 pg_database.datminmxid。锁管理器无法立即授予 frozenid 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/frozenid","title_zh":"正在等待 Lock/frozenid 的会话","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 = 'Lock'\n  AND wait_event = 'frozenid'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'frozenid'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":420,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"frozenid","excerpt":"frozenid\t\"Waiting to update <structname>pg_database</structname>.<structfield>datfrozenxid</structfield> and <structname>pg_database</structname>.<structfield>datminmxid</structfield>.\"","grep_pattern":"frozenid","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L420"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":31,"kind":"resource_path","status":"dynamic_trigger","symbol":"frozenid","excerpt":"\"frozenid\",","grep_pattern":"frozenid","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L31"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-object","type":"Lock","name":"object","slug":"object","url":"/lock/object/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to acquire a lock on a non-relation database object.","14":"Waiting to acquire a lock on a non-relation database object.","15":"Waiting to acquire a lock on a non-relation database object.","16":"Waiting to acquire a lock on a non-relation database object.","17":"Waiting to acquire a lock on a non-relation database object","18":"Waiting to acquire a lock on a non-relation database object"},"official_description_zh":"等待获取非 relation 数据库对象上的锁。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:426`. The instrumented operation is: Waiting to acquire a lock on a non-relation database object. The lock manager could not grant the object heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:426`。探针覆盖的操作是：等待获取非 relation 数据库对象上的锁。锁管理器无法立即授予 object 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/object","title_zh":"正在等待 Lock/object 的会话","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 = 'Lock'\n  AND wait_event = 'object'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'object'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":426,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"object","excerpt":"object\t\"Waiting to acquire a lock on a non-relation database object.\"","grep_pattern":"object","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L426"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":37,"kind":"resource_path","status":"dynamic_trigger","symbol":"object","excerpt":"\"object\",","grep_pattern":"object","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L37"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-page","type":"Lock","name":"page","slug":"page","url":"/lock/page/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to acquire a lock on a page of a relation.","14":"Waiting to acquire a lock on a page of a relation.","15":"Waiting to acquire a lock on a page of a relation.","16":"Waiting to acquire a lock on a page of a relation.","17":"Waiting to acquire a lock on a page of a relation","18":"Waiting to acquire a lock on a page of a relation"},"official_description_zh":"等待获取 relation 页面上的锁。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:421`. The instrumented operation is: Waiting to acquire a lock on a page of a relation. The lock manager could not grant the page heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:421`。探针覆盖的操作是：等待获取 relation 页面上的锁。锁管理器无法立即授予 page 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/page","title_zh":"正在等待 Lock/page 的会话","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 = 'Lock'\n  AND wait_event = 'page'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'page'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":421,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"page","excerpt":"page\t\"Waiting to acquire a lock on a page of a relation.\"","grep_pattern":"page","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L421"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-relation","type":"Lock","name":"relation","slug":"relation","url":"/lock/relation/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to acquire a lock on a relation.","14":"Waiting to acquire a lock on a relation.","15":"Waiting to acquire a lock on a relation.","16":"Waiting to acquire a lock on a relation.","17":"Waiting to acquire a lock on a relation","18":"Waiting to acquire a lock on a relation"},"official_description_zh":"等待获取 relation 上的锁。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:418`. The instrumented operation is: Waiting to acquire a lock on a relation. The lock manager could not grant the relation heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:418`。探针覆盖的操作是：等待获取 relation 上的锁。锁管理器无法立即授予 relation 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/relation","title_zh":"正在等待 Lock/relation 的会话","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 = 'Lock'\n  AND wait_event = 'relation'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'relation'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":418,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"relation","excerpt":"relation\t\"Waiting to acquire a lock on a relation.\"","grep_pattern":"relation","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L418"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":29,"kind":"resource_path","status":"dynamic_trigger","symbol":"relation","excerpt":"\"relation\",","grep_pattern":"relation","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L29"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-spectoken","type":"Lock","name":"spectoken","slug":"spectoken","url":"/lock/spectoken/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to acquire a speculative insertion lock.","14":"Waiting to acquire a speculative insertion lock.","15":"Waiting to acquire a speculative insertion lock.","16":"Waiting to acquire a speculative insertion lock.","17":"Waiting to acquire a speculative insertion lock","18":"Waiting to acquire a speculative insertion lock"},"official_description_zh":"等待获取推测式插入锁。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:425`. The instrumented operation is: Waiting to acquire a speculative insertion lock. The lock manager could not grant the spectoken heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:425`。探针覆盖的操作是：等待获取推测式插入锁。锁管理器无法立即授予 spectoken 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/spectoken","title_zh":"正在等待 Lock/spectoken 的会话","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 = 'Lock'\n  AND wait_event = 'spectoken'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'spectoken'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":425,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"spectoken","excerpt":"spectoken\t\"Waiting to acquire a speculative insertion lock.\"","grep_pattern":"spectoken","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L425"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":36,"kind":"resource_path","status":"dynamic_trigger","symbol":"spectoken","excerpt":"\"spectoken\",","grep_pattern":"spectoken","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L36"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-transactionid","type":"Lock","name":"transactionid","slug":"transactionid","url":"/lock/transactionid/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for a transaction to finish.","14":"Waiting for a transaction to finish.","15":"Waiting for a transaction to finish.","16":"Waiting for a transaction to finish.","17":"Waiting for a transaction to finish","18":"Waiting for a transaction to finish"},"official_description_zh":"等待事务结束。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:423`. The instrumented operation is: Waiting for a transaction to finish. The lock manager could not grant the transactionid heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:423`。探针覆盖的操作是：等待事务结束。锁管理器无法立即授予 transactionid 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/transactionid","title_zh":"正在等待 Lock/transactionid 的会话","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 = 'Lock'\n  AND wait_event = 'transactionid'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'transactionid'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":423,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"transactionid","excerpt":"transactionid\t\"Waiting for a transaction to finish.\"","grep_pattern":"transactionid","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L423"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":34,"kind":"resource_path","status":"dynamic_trigger","symbol":"transactionid","excerpt":"\"transactionid\",","grep_pattern":"transactionid","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L34"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-tuple","type":"Lock","name":"tuple","slug":"tuple","url":"/lock/tuple/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to acquire a lock on a tuple.","14":"Waiting to acquire a lock on a tuple.","15":"Waiting to acquire a lock on a tuple.","16":"Waiting to acquire a lock on a tuple.","17":"Waiting to acquire a lock on a tuple","18":"Waiting to acquire a lock on a tuple"},"official_description_zh":"等待获取 tuple 上的锁。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:422`. The instrumented operation is: Waiting to acquire a lock on a tuple. The lock manager could not grant the tuple heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:422`。探针覆盖的操作是：等待获取 tuple 上的锁。锁管理器无法立即授予 tuple 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/tuple","title_zh":"正在等待 Lock/tuple 的会话","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 = 'Lock'\n  AND wait_event = 'tuple'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'tuple'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":422,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"tuple","excerpt":"tuple\t\"Waiting to acquire a lock on a tuple.\"","grep_pattern":"tuple","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L422"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":33,"kind":"resource_path","status":"dynamic_trigger","symbol":"tuple","excerpt":"\"tuple\",","grep_pattern":"tuple","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L33"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-userlock","type":"Lock","name":"userlock","slug":"userlock","url":"/lock/userlock/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to acquire a user lock.","14":"Waiting to acquire a user lock.","15":"Waiting to acquire a user lock.","16":"Waiting to acquire a user lock.","17":"Waiting to acquire a user lock","18":"Waiting to acquire a user lock"},"official_description_zh":"等待获取用户锁。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:427`. The instrumented operation is: Waiting to acquire a user lock. The lock manager could not grant the userlock heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:427`。探针覆盖的操作是：等待获取用户锁。锁管理器无法立即授予 userlock 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/userlock","title_zh":"正在等待 Lock/userlock 的会话","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 = 'Lock'\n  AND wait_event = 'userlock'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'userlock'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":427,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"userlock","excerpt":"userlock\t\"Waiting to acquire a user lock.\"","grep_pattern":"userlock","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L427"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":38,"kind":"resource_path","status":"dynamic_trigger","symbol":"userlock","excerpt":"\"userlock\",","grep_pattern":"userlock","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L38"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lock-virtualxid","type":"Lock","name":"virtualxid","slug":"virtualxid","url":"/lock/virtualxid/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to acquire a virtual transaction ID lock.","14":"Waiting to acquire a virtual transaction ID lock.","15":"Waiting to acquire a virtual transaction ID lock.","16":"Waiting to acquire a virtual transaction ID lock; see Section 74.1.","17":"Waiting to acquire a virtual transaction ID lock","18":"Waiting to acquire a virtual transaction ID lock"},"official_description_zh":"等待获取虚拟事务 ID 锁。","mechanism":{"en":"`PG_WAIT_LOCK` at `src/backend/storage/lmgr/proc.c:1487` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:424`. The instrumented operation is: Waiting to acquire a virtual transaction ID lock. The lock manager could not grant the virtualxid heavyweight lock immediately. ProcSleep reports the lock wait and parks the backend on the lock's wait queue until owners release or the request is cancelled.","zh":"`PG_WAIT_LOCK` 位于 `src/backend/storage/lmgr/proc.c:1487`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:424`。探针覆盖的操作是：等待获取虚拟事务 ID 锁。锁管理器无法立即授予 virtualxid 重量级锁；ProcSleep 报告等待，并把后端挂到该锁的等待队列，直到持有者释放或请求被取消。"},"normal":{"en":"Sub-second handoff during ordinary writes or planned DDL can be normal.","zh":"普通写入或计划内 DDL 的亚秒级锁交接可能正常。"},"trouble":{"en":"Investigate once a user-facing wait breaches its latency objective, a blocking chain grows, or the root holder is idle in transaction.","zh":"面向用户的等待超过延迟目标、阻塞链持续增长，或根持有者处于 idle in transaction 时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Lock/virtualxid","title_zh":"正在等待 Lock/virtualxid 的会话","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 = 'Lock'\n  AND wait_event = 'virtualxid'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Lock cohort","title_zh":"当前 Lock 等待分布","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 = 'Lock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Lock'\n  AND a.wait_event = 'virtualxid'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Build the pg_blocking_pids graph to its root.","Inspect the root holder's state, transaction age, and business purpose.","Choose cancellation, timeout, or workload sequencing only after identifying the safest root action."],"zh":["沿 pg_blocking_pids 构建到根节点的阻塞图。","检查根持有者状态、事务年龄与业务目的。","确认最安全的根动作后，再选择取消、超时或调整负载顺序。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/proc.c","line":1487,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"PG_WAIT_LOCK","excerpt":"PG_WAIT_LOCK | locallock->tag.lock.locktag_type);","grep_pattern":"PG_WAIT_LOCK","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/proc.c#L1487"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":424,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"virtualxid","excerpt":"virtualxid\t\"Waiting to acquire a virtual transaction ID lock; see <xref linkend=\"transaction-id\"/>.\"","grep_pattern":"virtualxid","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L424"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/lockfuncs.c","line":35,"kind":"resource_path","status":"dynamic_trigger","symbol":"virtualxid","excerpt":"\"virtualxid\",","grep_pattern":"virtualxid","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/lockfuncs.c#L35"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["lock_timeout","deadlock_timeout"],"metrics":["waiting_sessions","wait_event_share","blocked_sessions","locks_per_backend"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-addin-shmem-init","type":"LWLock","name":"AddinShmemInit","slug":"addin-shmem-init","url":"/lwlock/addin-shmem-init/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to manage an extension's space allocation in shared memory.","14":"Waiting to manage an extension's space allocation in shared memory.","15":"Waiting to manage an extension's space allocation in shared memory.","16":"Waiting to manage an extension's space allocation in shared memory.","17":"Waiting to manage an extension's space allocation in shared memory","18":"Waiting to manage an extension's space allocation in shared memory"},"official_description_zh":"等待管理扩展在共享内存中的空间分配。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:328`. The instrumented operation is: Waiting to manage an extension's space allocation in shared memory. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as AddinShmemInit. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:328`。探针覆盖的操作是：等待管理扩展在共享内存中的空间分配。LWLockAcquire 无法立即取得显示为 AddinShmemInit 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/AddinShmemInit","title_zh":"正在等待 LWLock/AddinShmemInit 的会话","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 = 'LWLock'\n  AND wait_event = 'AddinShmemInit'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'AddinShmemInit'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":328,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"AddinShmemInit","excerpt":"AddinShmemInit\t\"Waiting to manage an extension's space allocation in shared memory.\"","grep_pattern":"AddinShmemInit","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L328"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/test/modules/injection_points/injection_points.c","line":136,"kind":"resource_path","status":"dynamic_trigger","symbol":"AddinShmemInit","excerpt":"LWLockAcquire(AddinShmemInitLock, LW_EXCLUSIVE);","grep_pattern":"AddinShmemInit","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/test/modules/injection_points/injection_points.c#L136"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-aio-uring-completion","type":"LWLock","name":"AioUringCompletion","slug":"aio-uring-completion","url":"/lwlock/aio-uring-completion/","versions":[18],"version_range":"18","availability":{},"aliases":[],"official_descriptions":{"18":"Waiting for another process to complete IO via io_uring"},"official_description_zh":"等待另一个进程通过 io_uring 完成 I/O。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:180`. The instrumented operation is: Waiting for another process to complete IO via io_uring. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as AioUringCompletion. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:180`。探针覆盖的操作是：等待另一个进程通过 io_uring 完成 I/O。LWLockAcquire 无法立即取得显示为 AioUringCompletion 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/AioUringCompletion","title_zh":"正在等待 LWLock/AioUringCompletion 的会话","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 = 'LWLock'\n  AND wait_event = 'AioUringCompletion'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'AioUringCompletion'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":180,"kind":"resource_path","status":"dynamic_trigger","symbol":"AioUringCompletion","excerpt":"[LWTRANCHE_AIO_URING_COMPLETION] = \"AioUringCompletion\",","grep_pattern":"AioUringCompletion","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L180"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":405,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"AioUringCompletion","excerpt":"AioUringCompletion\t\"Waiting for another process to complete IO via io_uring.\"","grep_pattern":"AioUringCompletion","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L405"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-aio-worker-submission-queue","type":"LWLock","name":"AioWorkerSubmissionQueue","slug":"aio-worker-submission-queue","url":"/lwlock/aio-worker-submission-queue/","versions":[18],"version_range":"18","availability":{},"aliases":[],"official_descriptions":{"18":"Waiting to access AIO worker submission queue"},"official_description_zh":"等待访问 AIO worker 提交队列。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/aio/method_worker.c:253`. The instrumented operation is: Waiting to access AIO worker submission queue. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as AioWorkerSubmissionQueue. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/aio/method_worker.c:253`。探针覆盖的操作是：等待访问 AIO worker 提交队列。LWLockAcquire 无法立即取得显示为 AioWorkerSubmissionQueue 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/AioWorkerSubmissionQueue","title_zh":"正在等待 LWLock/AioWorkerSubmissionQueue 的会话","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 = 'LWLock'\n  AND wait_event = 'AioWorkerSubmissionQueue'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'AioWorkerSubmissionQueue'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/aio/method_worker.c","line":253,"kind":"resource_path","status":"dynamic_trigger","symbol":"AioWorkerSubmissionQueue","excerpt":"LWLockAcquire(AioWorkerSubmissionQueueLock, LW_EXCLUSIVE);","grep_pattern":"AioWorkerSubmissionQueue","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/aio/method_worker.c#L253"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":355,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"AioWorkerSubmissionQueue","excerpt":"AioWorkerSubmissionQueue\t\"Waiting to access AIO worker submission queue.\"","grep_pattern":"AioWorkerSubmissionQueue","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L355"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-auto-file","type":"LWLock","name":"AutoFile","slug":"auto-file","url":"/lwlock/auto-file/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to update the postgresql.auto.conf file.","14":"Waiting to update the postgresql.auto.conf file.","15":"Waiting to update the postgresql.auto.conf file.","16":"Waiting to update the postgresql.auto.conf file.","17":"Waiting to update the postgresql.auto.conf file","18":"Waiting to update the postgresql.auto.conf file"},"official_description_zh":"等待更新 postgresql.auto.conf 文件。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:340`. The instrumented operation is: Waiting to update the postgresql.auto.conf file. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as AutoFile. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:340`。探针覆盖的操作是：等待更新 postgresql.auto.conf 文件。LWLockAcquire 无法立即取得显示为 AutoFile 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/AutoFile","title_zh":"正在等待 LWLock/AutoFile 的会话","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 = 'LWLock'\n  AND wait_event = 'AutoFile'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'AutoFile'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":340,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"AutoFile","excerpt":"AutoFile\t\"Waiting to update the <filename>postgresql.auto.conf</filename> file.\"","grep_pattern":"AutoFile","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L340"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/misc/guc.c","line":4760,"kind":"resource_path","status":"dynamic_trigger","symbol":"AutoFile","excerpt":"LWLockAcquire(AutoFileLock, LW_EXCLUSIVE);","grep_pattern":"AutoFile","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/misc/guc.c#L4760"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-autovacuum","type":"LWLock","name":"Autovacuum","slug":"autovacuum","url":"/lwlock/autovacuum/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update the current state of autovacuum workers.","14":"Waiting to read or update the current state of autovacuum workers.","15":"Waiting to read or update the current state of autovacuum workers.","16":"Waiting to read or update the current state of autovacuum workers.","17":"Waiting to read or update the current state of autovacuum workers","18":"Waiting to read or update the current state of autovacuum workers"},"official_description_zh":"等待读取或更新 autovacuum worker 的当前状态。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/postmaster/autovacuum.c:611`. The instrumented operation is: Waiting to read or update the current state of autovacuum workers. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as Autovacuum. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/postmaster/autovacuum.c:611`。探针覆盖的操作是：等待读取或更新 autovacuum worker 的当前状态。LWLockAcquire 无法立即取得显示为 Autovacuum 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/Autovacuum","title_zh":"正在等待 LWLock/Autovacuum 的会话","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 = 'LWLock'\n  AND wait_event = 'Autovacuum'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'Autovacuum'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/autovacuum.c","line":611,"kind":"resource_path","status":"dynamic_trigger","symbol":"Autovacuum","excerpt":"LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);","grep_pattern":"Autovacuum","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/autovacuum.c#L611"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":329,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"Autovacuum","excerpt":"Autovacuum\t\"Waiting to read or update the current state of autovacuum workers.\"","grep_pattern":"Autovacuum","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L329"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_naptime"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-autovacuum-schedule","type":"LWLock","name":"AutovacuumSchedule","slug":"autovacuum-schedule","url":"/lwlock/autovacuum-schedule/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to ensure that a table selected for autovacuum still needs vacuuming.","14":"Waiting to ensure that a table selected for autovacuum still needs vacuuming.","15":"Waiting to ensure that a table selected for autovacuum still needs vacuuming.","16":"Waiting to ensure that a table selected for autovacuum still needs vacuuming.","17":"Waiting to ensure that a table selected for autovacuum still needs vacuuming","18":"Waiting to ensure that a table selected for autovacuum still needs vacuuming"},"official_description_zh":"等待确认被选中进行 autovacuum 的表仍需要 vacuum。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/postmaster/autovacuum.c:2337`. The instrumented operation is: Waiting to ensure that a table selected for autovacuum still needs vacuuming. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as AutovacuumSchedule. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/postmaster/autovacuum.c:2337`。探针覆盖的操作是：等待确认被选中进行 autovacuum 的表仍需要 vacuum。LWLockAcquire 无法立即取得显示为 AutovacuumSchedule 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/AutovacuumSchedule","title_zh":"正在等待 LWLock/AutovacuumSchedule 的会话","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 = 'LWLock'\n  AND wait_event = 'AutovacuumSchedule'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'AutovacuumSchedule'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/autovacuum.c","line":2337,"kind":"resource_path","status":"dynamic_trigger","symbol":"AutovacuumSchedule","excerpt":"LWLockAcquire(AutovacuumScheduleLock, LW_EXCLUSIVE);","grep_pattern":"AutovacuumSchedule","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/autovacuum.c#L2337"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":330,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"AutovacuumSchedule","excerpt":"AutovacuumSchedule\t\"Waiting to ensure that a table selected for autovacuum still needs vacuuming.\"","grep_pattern":"AutovacuumSchedule","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L330"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_naptime"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-background-worker","type":"LWLock","name":"BackgroundWorker","slug":"background-worker","url":"/lwlock/background-worker/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update background worker state.","14":"Waiting to read or update background worker state.","15":"Waiting to read or update background worker state.","16":"Waiting to read or update background worker state.","17":"Waiting to read or update background worker state","18":"Waiting to read or update background worker state"},"official_description_zh":"等待读取或更新后台 worker 的状态。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/postmaster/bgworker.c:1070`. The instrumented operation is: Waiting to read or update background worker state. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as BackgroundWorker. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/postmaster/bgworker.c:1070`。探针覆盖的操作是：等待读取或更新后台 worker 的状态。LWLockAcquire 无法立即取得显示为 BackgroundWorker 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/BackgroundWorker","title_zh":"正在等待 LWLock/BackgroundWorker 的会话","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 = 'LWLock'\n  AND wait_event = 'BackgroundWorker'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'BackgroundWorker'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/bgworker.c","line":1070,"kind":"resource_path","status":"dynamic_trigger","symbol":"BackgroundWorker","excerpt":"LWLockAcquire(BackgroundWorkerLock, LW_EXCLUSIVE);","grep_pattern":"BackgroundWorker","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/bgworker.c#L1070"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":338,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"BackgroundWorker","excerpt":"BackgroundWorker\t\"Waiting to read or update background worker state.\"","grep_pattern":"BackgroundWorker","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L338"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-btree-vacuum","type":"LWLock","name":"BtreeVacuum","slug":"btree-vacuum","url":"/lwlock/btree-vacuum/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update vacuum-related information for a B-tree index.","14":"Waiting to read or update vacuum-related information for a B-tree index.","15":"Waiting to read or update vacuum-related information for a B-tree index.","16":"Waiting to read or update vacuum-related information for a B-tree index.","17":"Waiting to read or update vacuum-related information for a B-tree index","18":"Waiting to read or update vacuum-related information for a B-tree index"},"official_description_zh":"等待读取或更新 B-tree 索引中与 vacuum 相关的信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/access/nbtree/nbtutils.c:3519`. The instrumented operation is: Waiting to read or update vacuum-related information for a B-tree index. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as BtreeVacuum. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/nbtree/nbtutils.c:3519`。探针覆盖的操作是：等待读取或更新 B-tree 索引中与 vacuum 相关的信息。LWLockAcquire 无法立即取得显示为 BtreeVacuum 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/BtreeVacuum","title_zh":"正在等待 LWLock/BtreeVacuum 的会话","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 = 'LWLock'\n  AND wait_event = 'BtreeVacuum'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'BtreeVacuum'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/nbtree/nbtutils.c","line":3519,"kind":"resource_path","status":"dynamic_trigger","symbol":"BtreeVacuum","excerpt":"LWLockAcquire(BtreeVacuumLock, LW_SHARED);","grep_pattern":"BtreeVacuum","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/nbtree/nbtutils.c#L3519"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":327,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"BtreeVacuum","excerpt":"BtreeVacuum\t\"Waiting to read or update vacuum-related information for a B-tree index.\"","grep_pattern":"BtreeVacuum","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L327"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_naptime"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-buffer-content","type":"LWLock","name":"BufferContent","slug":"buffer-content","url":"/lwlock/buffer-content/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access a data page in memory.","14":"Waiting to access a data page in memory.","15":"Waiting to access a data page in memory.","16":"Waiting to access a data page in memory.","17":"Waiting to access a data page in memory","18":"Waiting to access a data page in memory"},"official_description_zh":"等待访问内存中的数据页。","mechanism":{"en":"A backend has found the shared buffer it needs but cannot yet take that buffer descriptor's content lock. Heap and index code acquire this lock before reading or changing the in-memory page, so many workers touching one page can serialize here.","zh":"后端已经找到所需的共享缓冲区，但尚未取得该 buffer descriptor 的 content lock。堆表与索引代码在读取或修改内存页前都会取得此锁，因此大量工作进程访问同一页面时会在这里串行化。"},"normal":{"en":"Short samples are routine while concurrent readers and writers touch shared pages.","zh":"并发读写共享页面时，零星而短暂的样本很常见。"},"trouble":{"en":"Repeated samples on many foreground sessions usually point to a hot heap/index page, a right-growing index, or concurrent maintenance on the same blocks.","zh":"大量前台会话连续命中时，通常指向热点堆表/索引页、向右增长的索引，或与业务同时访问相同块的维护任务。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/BufferContent","title_zh":"正在等待 LWLock/BufferContent 的会话","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 = 'LWLock'\n  AND wait_event = 'BufferContent'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'BufferContent'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Find the relations and statements shared by the waiters.","Use page/index evidence to confirm a hotspot; do not infer one from the wait name alone.","Spread hot keys, batch writes, or move maintenance away from the peak before considering capacity changes."],"zh":["找出等待会话共同访问的关系与语句。","用页面与索引证据确认热点，不能只凭等待名称下结论。","先分散热点键、批量写入或错峰维护，再考虑容量调整。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":148,"kind":"resource_path","status":"dynamic_trigger","symbol":"BufferContent","excerpt":"[LWTRANCHE_BUFFER_CONTENT] = \"BufferContent\",","grep_pattern":"BufferContent","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L148"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":373,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"BufferContent","excerpt":"BufferContent\t\"Waiting to access a data page in memory.\"","grep_pattern":"BufferContent","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L373"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["shared_buffers"],"metrics":["waiting_sessions","wait_event_share","statement_latency"],"incident_pattern":{"en":"A monotonically increasing key concentrates concurrent B-tree inserts on the rightmost leaf page; BufferContent rises with insert latency.","zh":"单调递增键让并发 B-tree 插入集中到最右叶子页，BufferContent 与插入延迟同步上升。"}}
{"schema_version":1,"record_kind":"event","id":"lwlock-buffer-mapping","type":"LWLock","name":"BufferMapping","slug":"buffer-mapping","url":"/lwlock/buffer-mapping/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to associate a data block with a buffer in the buffer pool.","14":"Waiting to associate a data block with a buffer in the buffer pool.","15":"Waiting to associate a data block with a buffer in the buffer pool.","16":"Waiting to associate a data block with a buffer in the buffer pool.","17":"Waiting to associate a data block with a buffer in the buffer pool","18":"Waiting to associate a data block with a buffer in the buffer pool"},"official_description_zh":"等待将数据块关联到 buffer pool 中的 buffer。","mechanism":{"en":"The buffer manager hashes a relation/fork/block tag into a partition protected by BufferMappingLock. Lookup, insertion, eviction, and tag reassignment briefly take that partition lock; broad concurrent misses or buffer churn increase collisions.","zh":"缓冲区管理器把 relation/fork/block 标签哈希到由 BufferMappingLock 保护的分区。查找、插入、淘汰和重新分配标签都会短暂取得该分区锁；大规模并发未命中或缓冲区抖动会增加碰撞。"},"normal":{"en":"Brief waits occur when pages enter or leave shared buffers.","zh":"页面进入或离开共享缓冲区时，短暂等待属于正常现象。"},"trouble":{"en":"Sustained recurrence suggests a working set that churns through shared buffers, many parallel scans, or concentrated access mapping into a few partitions.","zh":"持续出现通常意味着工作集反复冲刷 shared buffers、大量并行扫描，或访问集中映射到少数分区。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/BufferMapping","title_zh":"正在等待 LWLock/BufferMapping 的会话","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 = 'LWLock'\n  AND wait_event = 'BufferMapping'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'BufferMapping'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Correlate with buffer hit ratio and read volume by database and statement.","Look for a new scan, undersized cache, or concurrency jump.","Reduce concurrent scan fan-out or fix the access path before simply enlarging shared_buffers."],"zh":["按数据库与语句关联缓冲命中率和读取量。","检查是否出现新扫描、缓存过小或并发突增。","先降低并发扫描扇出或修正访问路径，再决定是否扩大 shared_buffers。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":152,"kind":"resource_path","status":"dynamic_trigger","symbol":"BufferMapping","excerpt":"[LWTRANCHE_BUFFER_MAPPING] = \"BufferMapping\",","grep_pattern":"BufferMapping","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L152"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":377,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"BufferMapping","excerpt":"BufferMapping\t\"Waiting to associate a data block with a buffer in the buffer pool.\"","grep_pattern":"BufferMapping","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L377"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["shared_buffers","max_parallel_workers_per_gather"],"metrics":["waiting_sessions","wait_event_share","buffer_hit_ratio","blocks_read"],"incident_pattern":{"en":"A plan regression launches many concurrent large scans; buffer-table partitions become hot while useful pages churn out of cache.","zh":"执行计划退化引发大量并发大扫描，缓冲映射分区变热，同时有用页面被挤出缓存。"}}
{"schema_version":1,"record_kind":"event","id":"lwlock-checkpoint","type":"LWLock","name":"Checkpoint","slug":"checkpoint","url":"/lwlock/checkpoint/","versions":[13],"version_range":"13","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to begin a checkpoint."},"official_description_zh":"等待开始执行检查点。","mechanism":{"en":"`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/xlog.c:8957`. The instrumented operation is: Waiting to begin a checkpoint. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as Checkpoint. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:765`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/transam/xlog.c:8957`。探针覆盖的操作是：等待开始执行检查点。LWLockAcquire 无法立即取得显示为 Checkpoint 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/Checkpoint","title_zh":"正在等待 LWLock/Checkpoint 的会话","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 = 'LWLock'\n  AND wait_event = 'Checkpoint'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'Checkpoint'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":13,"version":"13.23","tag":"REL_13_23","commit":"89df812eb890814b105d871185935b580478e660","path":"src/backend/access/transam/xlog.c","line":8957,"kind":"resource_path","status":"dynamic_trigger","symbol":"Checkpoint","excerpt":"LWLockAcquire(CheckpointLock, LW_EXCLUSIVE);","grep_pattern":"Checkpoint","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_13_23/src/backend/access/transam/xlog.c#L8957"},{"major":13,"version":"13.23","tag":"REL_13_23","commit":"89df812eb890814b105d871185935b580478e660","path":"src/backend/storage/lmgr/lwlock.c","line":765,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_13_23/src/backend/storage/lmgr/lwlock.c#L765"},{"major":13,"version":"13.23","tag":"REL_13_23","commit":"89df812eb890814b105d871185935b580478e660","path":"src/backend/storage/lmgr/lwlocknames.c","line":14,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"Checkpoint","excerpt":"\"Checkpoint\",","grep_pattern":"Checkpoint","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_13_23/src/backend/storage/lmgr/lwlocknames.c#L14"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"13.23"},"gucs":["checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","checkpoint_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-checkpointer-comm","type":"LWLock","name":"CheckpointerComm","slug":"checkpointer-comm","url":"/lwlock/checkpointer-comm/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to manage fsync requests.","14":"Waiting to manage fsync requests.","15":"Waiting to manage fsync requests.","16":"Waiting to manage fsync requests.","17":"Waiting to manage fsync requests","18":"Waiting to manage fsync requests"},"official_description_zh":"等待管理 fsync 请求。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/postmaster/checkpointer.c:1164`. The instrumented operation is: Waiting to manage fsync requests. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as CheckpointerComm. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/postmaster/checkpointer.c:1164`。探针覆盖的操作是：等待管理 fsync 请求。LWLockAcquire 无法立即取得显示为 CheckpointerComm 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/CheckpointerComm","title_zh":"正在等待 LWLock/CheckpointerComm 的会话","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 = 'LWLock'\n  AND wait_event = 'CheckpointerComm'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'CheckpointerComm'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/checkpointer.c","line":1164,"kind":"resource_path","status":"dynamic_trigger","symbol":"CheckpointerComm","excerpt":"LWLockAcquire(CheckpointerCommLock, LW_EXCLUSIVE);","grep_pattern":"CheckpointerComm","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/checkpointer.c#L1164"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":324,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"CheckpointerComm","excerpt":"CheckpointerComm\t\"Waiting to manage fsync requests.\"","grep_pattern":"CheckpointerComm","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L324"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","checkpoint_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-commit-ts","type":"LWLock","name":"CommitTs","slug":"commit-ts","url":"/lwlock/commit-ts/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update the last value set for a transaction commit timestamp.","14":"Waiting to read or update the last value set for a transaction commit timestamp.","15":"Waiting to read or update the last value set for a transaction commit timestamp.","16":"Waiting to read or update the last value set for a transaction commit timestamp.","17":"Waiting to read or update the last value set for a transaction commit timestamp","18":"Waiting to read or update the last value set for a transaction commit timestamp"},"official_description_zh":"等待读取或更新事务提交时间戳的最近设定值。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/access/transam/commit_ts.c:206`. The instrumented operation is: Waiting to read or update the last value set for a transaction commit timestamp. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as CommitTs. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/transam/commit_ts.c:206`。探针覆盖的操作是：等待读取或更新事务提交时间戳的最近设定值。LWLockAcquire 无法立即取得显示为 CommitTs 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/CommitTs","title_zh":"正在等待 LWLock/CommitTs 的会话","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 = 'LWLock'\n  AND wait_event = 'CommitTs'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'CommitTs'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/commit_ts.c","line":206,"kind":"resource_path","status":"dynamic_trigger","symbol":"CommitTs","excerpt":"LWLockAcquire(CommitTsLock, LW_EXCLUSIVE);","grep_pattern":"CommitTs","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/commit_ts.c#L206"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":343,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"CommitTs","excerpt":"CommitTs\t\"Waiting to read or update the last value set for a transaction commit timestamp.\"","grep_pattern":"CommitTs","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L343"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-commit-ts-buffer","type":"LWLock","name":"CommitTsBuffer","slug":"commit-ts-buffer","url":"/lwlock/commit-ts-buffer/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for I/O on a commit timestamp SLRU buffer.","14":"Waiting for I/O on a commit timestamp SLRU buffer.","15":"Waiting for I/O on a commit timestamp SLRU buffer.","16":"Waiting for I/O on a commit timestamp SLRU buffer.","17":"Waiting for I/O on a commit timestamp SLRU buffer","18":"Waiting for I/O on a commit timestamp SLRU buffer"},"official_description_zh":"等待事务提交时间戳 SLRU buffer 上的 I/O。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:141`. The instrumented operation is: Waiting for I/O on a commit timestamp SLRU buffer. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as CommitTsBuffer. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:141`。探针覆盖的操作是：等待事务提交时间戳 SLRU buffer 上的 I/O。LWLockAcquire 无法立即取得显示为 CommitTsBuffer 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/CommitTsBuffer","title_zh":"正在等待 LWLock/CommitTsBuffer 的会话","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 = 'LWLock'\n  AND wait_event = 'CommitTsBuffer'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'CommitTsBuffer'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":141,"kind":"resource_path","status":"dynamic_trigger","symbol":"CommitTsBuffer","excerpt":"[LWTRANCHE_COMMITTS_BUFFER] = \"CommitTsBuffer\",","grep_pattern":"CommitTsBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L141"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":366,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"CommitTsBuffer","excerpt":"CommitTsBuffer\t\"Waiting for I/O on a commit timestamp SLRU buffer.\"","grep_pattern":"CommitTsBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L366"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-commit-ts-slru","type":"LWLock","name":"CommitTsSLRU","slug":"commit-ts-slru","url":"/lwlock/commit-ts-slru/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the commit timestamp SLRU cache.","14":"Waiting to access the commit timestamp SLRU cache.","15":"Waiting to access the commit timestamp SLRU cache.","16":"Waiting to access the commit timestamp SLRU cache.","17":"Waiting to access the commit timestamp SLRU cache","18":"Waiting to access the commit timestamp SLRU cache"},"official_description_zh":"等待访问事务提交时间戳 SLRU 缓存。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:172`. The instrumented operation is: Waiting to access the commit timestamp SLRU cache. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as CommitTsSLRU. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:172`。探针覆盖的操作是：等待访问事务提交时间戳 SLRU 缓存。LWLockAcquire 无法立即取得显示为 CommitTsSLRU 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/CommitTsSLRU","title_zh":"正在等待 LWLock/CommitTsSLRU 的会话","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 = 'LWLock'\n  AND wait_event = 'CommitTsSLRU'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'CommitTsSLRU'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":172,"kind":"resource_path","status":"dynamic_trigger","symbol":"CommitTsSLRU","excerpt":"[LWTRANCHE_COMMITTS_SLRU] = \"CommitTsSLRU\",","grep_pattern":"CommitTsSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L172"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":397,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"CommitTsSLRU","excerpt":"CommitTsSLRU\t\"Waiting to access the commit timestamp SLRU cache.\"","grep_pattern":"CommitTsSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L397"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-control-file","type":"LWLock","name":"ControlFile","slug":"control-file","url":"/lwlock/control-file/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update the pg_control file or create a new WAL file.","14":"Waiting to read or update the pg_control file or create a new WAL file.","15":"Waiting to read or update the pg_control file or create a new WAL file.","16":"Waiting to read or update the pg_control file or create a new WAL file.","17":"Waiting to read or update the pg_control file or create a new WAL file","18":"Waiting to read or update the pg_control file or create a new WAL file"},"official_description_zh":"等待读取或更新 pg_control 文件，或创建新的 WAL 文件。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/access/transam/xlog.c:2723`. The instrumented operation is: Waiting to read or update the pg_control file or create a new WAL file. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ControlFile. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/transam/xlog.c:2723`。探针覆盖的操作是：等待读取或更新 pg_control 文件，或创建新的 WAL 文件。LWLockAcquire 无法立即取得显示为 ControlFile 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ControlFile","title_zh":"正在等待 LWLock/ControlFile 的会话","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 = 'LWLock'\n  AND wait_event = 'ControlFile'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ControlFile'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":2723,"kind":"resource_path","status":"dynamic_trigger","symbol":"ControlFile","excerpt":"LWLockAcquire(ControlFileLock, LW_EXCLUSIVE);","grep_pattern":"ControlFile","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L2723"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":321,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ControlFile","excerpt":"ControlFile\t\"Waiting to read or update the <filename>pg_control</filename> file or create a new WAL file.\"","grep_pattern":"ControlFile","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L321"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-dsm-registry","type":"LWLock","name":"DSMRegistry","slug":"dsm-registry","url":"/lwlock/dsm-registry/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting to read or update the dynamic shared memory registry","18":"Waiting to read or update the dynamic shared memory registry"},"official_description_zh":"等待读取或更新动态共享内存注册表。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/ipc/dsm_registry.c:98`. The instrumented operation is: Waiting to read or update the dynamic shared memory registry. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as DSMRegistry. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/ipc/dsm_registry.c:98`。探针覆盖的操作是：等待读取或更新动态共享内存注册表。LWLockAcquire 无法立即取得显示为 DSMRegistry 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/DSMRegistry","title_zh":"正在等待 LWLock/DSMRegistry 的会话","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 = 'LWLock'\n  AND wait_event = 'DSMRegistry'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'DSMRegistry'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/dsm_registry.c","line":98,"kind":"resource_path","status":"dynamic_trigger","symbol":"DSMRegistry","excerpt":"LWLockAcquire(DSMRegistryLock, LW_EXCLUSIVE);","grep_pattern":"DSMRegistry","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/dsm_registry.c#L98"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":352,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"DSMRegistry","excerpt":"DSMRegistry\t\"Waiting to read or update the dynamic shared memory registry.\"","grep_pattern":"DSMRegistry","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L352"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-dsm-registry-dsa","type":"LWLock","name":"DSMRegistryDSA","slug":"dsm-registry-dsa","url":"/lwlock/dsm-registry-dsa/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting to access dynamic shared memory registry's dynamic shared memory allocator","18":"Waiting to access dynamic shared memory registry's dynamic shared memory allocator"},"official_description_zh":"等待访问动态共享内存注册表的动态共享内存分配器。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:170`. The instrumented operation is: Waiting to access dynamic shared memory registry's dynamic shared memory allocator. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as DSMRegistryDSA. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:170`。探针覆盖的操作是：等待访问动态共享内存注册表的动态共享内存分配器。LWLockAcquire 无法立即取得显示为 DSMRegistryDSA 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/DSMRegistryDSA","title_zh":"正在等待 LWLock/DSMRegistryDSA 的会话","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 = 'LWLock'\n  AND wait_event = 'DSMRegistryDSA'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'DSMRegistryDSA'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":170,"kind":"resource_path","status":"dynamic_trigger","symbol":"DSMRegistryDSA","excerpt":"[LWTRANCHE_DSM_REGISTRY_DSA] = \"DSMRegistryDSA\",","grep_pattern":"DSMRegistryDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L170"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":395,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"DSMRegistryDSA","excerpt":"DSMRegistryDSA\t\"Waiting to access dynamic shared memory registry's dynamic shared memory allocator.\"","grep_pattern":"DSMRegistryDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L395"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-dsm-registry-hash","type":"LWLock","name":"DSMRegistryHash","slug":"dsm-registry-hash","url":"/lwlock/dsm-registry-hash/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting to access dynamic shared memory registry's shared hash table","18":"Waiting to access dynamic shared memory registry's shared hash table"},"official_description_zh":"等待访问动态共享内存注册表的共享哈希表。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:171`. The instrumented operation is: Waiting to access dynamic shared memory registry's shared hash table. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as DSMRegistryHash. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:171`。探针覆盖的操作是：等待访问动态共享内存注册表的共享哈希表。LWLockAcquire 无法立即取得显示为 DSMRegistryHash 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/DSMRegistryHash","title_zh":"正在等待 LWLock/DSMRegistryHash 的会话","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 = 'LWLock'\n  AND wait_event = 'DSMRegistryHash'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'DSMRegistryHash'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":171,"kind":"resource_path","status":"dynamic_trigger","symbol":"DSMRegistryHash","excerpt":"[LWTRANCHE_DSM_REGISTRY_HASH] = \"DSMRegistryHash\",","grep_pattern":"DSMRegistryHash","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L171"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":396,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"DSMRegistryHash","excerpt":"DSMRegistryHash\t\"Waiting to access dynamic shared memory registry's shared hash table.\"","grep_pattern":"DSMRegistryHash","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L396"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-dynamic-shared-memory-control","type":"LWLock","name":"DynamicSharedMemoryControl","slug":"dynamic-shared-memory-control","url":"/lwlock/dynamic-shared-memory-control/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update dynamic shared memory allocation information.","14":"Waiting to read or update dynamic shared memory allocation information.","15":"Waiting to read or update dynamic shared memory allocation information.","16":"Waiting to read or update dynamic shared memory allocation information.","17":"Waiting to read or update dynamic shared memory allocation information","18":"Waiting to read or update dynamic shared memory allocation information"},"official_description_zh":"等待读取或更新动态共享内存分配信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/ipc/dsm.c:549`. The instrumented operation is: Waiting to read or update dynamic shared memory allocation information. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as DynamicSharedMemoryControl. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/ipc/dsm.c:549`。探针覆盖的操作是：等待读取或更新动态共享内存分配信息。LWLockAcquire 无法立即取得显示为 DynamicSharedMemoryControl 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/DynamicSharedMemoryControl","title_zh":"正在等待 LWLock/DynamicSharedMemoryControl 的会话","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 = 'LWLock'\n  AND wait_event = 'DynamicSharedMemoryControl'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'DynamicSharedMemoryControl'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/dsm.c","line":549,"kind":"resource_path","status":"dynamic_trigger","symbol":"DynamicSharedMemoryControl","excerpt":"LWLockAcquire(DynamicSharedMemoryControlLock, LW_EXCLUSIVE);","grep_pattern":"DynamicSharedMemoryControl","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/dsm.c#L549"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":339,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"DynamicSharedMemoryControl","excerpt":"DynamicSharedMemoryControl\t\"Waiting to read or update dynamic shared memory allocation information.\"","grep_pattern":"DynamicSharedMemoryControl","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L339"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-injection-point","type":"LWLock","name":"InjectionPoint","slug":"injection-point","url":"/lwlock/injection-point/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting to read or update information related to injection points","18":"Waiting to read or update information related to injection points"},"official_description_zh":"等待读取或更新与注入点相关的信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:353`. The instrumented operation is: Waiting to read or update information related to injection points. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as InjectionPoint. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:353`。探针覆盖的操作是：等待读取或更新与注入点相关的信息。LWLockAcquire 无法立即取得显示为 InjectionPoint 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/InjectionPoint","title_zh":"正在等待 LWLock/InjectionPoint 的会话","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 = 'LWLock'\n  AND wait_event = 'InjectionPoint'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'InjectionPoint'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":353,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"InjectionPoint","excerpt":"InjectionPoint\t\"Waiting to read or update information related to injection points.\"","grep_pattern":"InjectionPoint","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L353"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/misc/injection_point.c","line":302,"kind":"resource_path","status":"dynamic_trigger","symbol":"InjectionPoint","excerpt":"LWLockAcquire(InjectionPointLock, LW_EXCLUSIVE);","grep_pattern":"InjectionPoint","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/misc/injection_point.c#L302"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-lock-fast-path","type":"LWLock","name":"LockFastPath","slug":"lock-fast-path","url":"/lwlock/lock-fast-path/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update a process' fast-path lock information.","14":"Waiting to read or update a process' fast-path lock information.","15":"Waiting to read or update a process' fast-path lock information.","16":"Waiting to read or update a process' fast-path lock information.","17":"Waiting to read or update a process' fast-path lock information","18":"Waiting to read or update a process' fast-path lock information"},"official_description_zh":"等待读取或更新进程的快速路径锁信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:151`. The instrumented operation is: Waiting to read or update a process' fast-path lock information. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as LockFastPath. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:151`。探针覆盖的操作是：等待读取或更新进程的快速路径锁信息。LWLockAcquire 无法立即取得显示为 LockFastPath 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/LockFastPath","title_zh":"正在等待 LWLock/LockFastPath 的会话","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 = 'LWLock'\n  AND wait_event = 'LockFastPath'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'LockFastPath'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":151,"kind":"resource_path","status":"dynamic_trigger","symbol":"LockFastPath","excerpt":"[LWTRANCHE_LOCK_FASTPATH] = \"LockFastPath\",","grep_pattern":"LockFastPath","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L151"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":376,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"LockFastPath","excerpt":"LockFastPath\t\"Waiting to read or update a process' fast-path lock information.\"","grep_pattern":"LockFastPath","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L376"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-lock-manager","type":"LWLock","name":"LockManager","slug":"lock-manager","url":"/lwlock/lock-manager/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update information about “heavyweight” locks.","14":"Waiting to read or update information about “heavyweight” locks.","15":"Waiting to read or update information about “heavyweight” locks.","16":"Waiting to read or update information about “heavyweight” locks.","17":"Waiting to read or update information about \"heavyweight\" locks","18":"Waiting to read or update information about \"heavyweight\" locks"},"official_description_zh":"等待读取或更新“重量级”锁的信息。","mechanism":{"en":"Heavyweight lock bookkeeping is stored in shared hash tables partitioned by LockHashPartitionLock. Acquiring, granting, releasing, or inspecting many heavyweight locks can contend on the partition even when no SQL-level lock conflict exists.","zh":"重量级锁的账本存放在由 LockHashPartitionLock 分区保护的共享哈希表中。获取、授予、释放或检查大量重量级锁时，即使不存在 SQL 层锁冲突，也可能在分区锁上竞争。"},"normal":{"en":"Small bursts accompany ordinary relation and transaction lock traffic.","zh":"普通关系锁与事务锁流量会带来小规模突发。"},"trouble":{"en":"A sustained share often follows lock fan-out: very large transactions, many partitions, DDL churn, or thousands of waiting lock requests.","zh":"持续占比通常来自锁扇出：超大事务、大量分区、频繁 DDL，或成千上万的排队锁请求。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/LockManager","title_zh":"正在等待 LWLock/LockManager 的会话","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 = 'LWLock'\n  AND wait_event = 'LockManager'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'LockManager'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Count pg_locks rows per PID and inspect the blocking tree.","Identify statements touching many relations or partitions.","Shorten transactions and reduce lock fan-out; raise max_locks_per_transaction only for genuine capacity errors."],"zh":["按 PID 统计 pg_locks 行数并检查阻塞树。","定位一次触碰大量关系或分区的语句。","缩短事务并降低锁扇出；只有真实容量报错时才提高 max_locks_per_transaction。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/ipci.c","line":117,"kind":"resource_path","status":"dynamic_trigger","symbol":"LockManager","excerpt":"size = add_size(size, LockManagerShmemSize());","grep_pattern":"LockManager","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/ipci.c#L117"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":378,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"LockManager","excerpt":"LockManager\t\"Waiting to read or update information about <quote>heavyweight</quote> locks.\"","grep_pattern":"LockManager","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L378"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["max_locks_per_transaction","max_connections"],"metrics":["waiting_sessions","wait_event_share","locks_per_backend","blocked_sessions"],"incident_pattern":{"en":"A deployment runs DDL across thousands of partitions while application sessions acquire relation locks, creating internal lock-table contention before a clear blocker is visible.","zh":"发布过程对数千分区执行 DDL，同时业务会话获取关系锁；在明显阻塞者出现前，内部锁表已经发生竞争。"}}
{"schema_version":1,"record_kind":"event","id":"lwlock-logical-rep-launcher-dsa","type":"LWLock","name":"LogicalRepLauncherDSA","slug":"logical-rep-launcher-dsa","url":"/lwlock/logical-rep-launcher-dsa/","versions":[16,17,18],"version_range":"16-18","availability":{},"aliases":[],"official_descriptions":{"16":"Waiting to access logical replication launcher's dynamic shared memory allocator.","17":"Waiting to access logical replication launcher's dynamic shared memory allocator","18":"Waiting to access logical replication launcher's dynamic shared memory allocator"},"official_description_zh":"等待访问逻辑复制 launcher 的动态共享内存分配器。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:168`. The instrumented operation is: Waiting to access logical replication launcher's dynamic shared memory allocator. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as LogicalRepLauncherDSA. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:168`。探针覆盖的操作是：等待访问逻辑复制 launcher 的动态共享内存分配器。LWLockAcquire 无法立即取得显示为 LogicalRepLauncherDSA 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/LogicalRepLauncherDSA","title_zh":"正在等待 LWLock/LogicalRepLauncherDSA 的会话","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 = 'LWLock'\n  AND wait_event = 'LogicalRepLauncherDSA'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'LogicalRepLauncherDSA'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":168,"kind":"resource_path","status":"dynamic_trigger","symbol":"LogicalRepLauncherDSA","excerpt":"[LWTRANCHE_LAUNCHER_DSA] = \"LogicalRepLauncherDSA\",","grep_pattern":"LogicalRepLauncherDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L168"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":393,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"LogicalRepLauncherDSA","excerpt":"LogicalRepLauncherDSA\t\"Waiting to access logical replication launcher's dynamic shared memory allocator.\"","grep_pattern":"LogicalRepLauncherDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L393"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-logical-rep-launcher-hash","type":"LWLock","name":"LogicalRepLauncherHash","slug":"logical-rep-launcher-hash","url":"/lwlock/logical-rep-launcher-hash/","versions":[16,17,18],"version_range":"16-18","availability":{},"aliases":[],"official_descriptions":{"16":"Waiting to access logical replication launcher's shared hash table.","17":"Waiting to access logical replication launcher's shared hash table","18":"Waiting to access logical replication launcher's shared hash table"},"official_description_zh":"等待访问逻辑复制 launcher 的共享哈希表。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:169`. The instrumented operation is: Waiting to access logical replication launcher's shared hash table. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as LogicalRepLauncherHash. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:169`。探针覆盖的操作是：等待访问逻辑复制 launcher 的共享哈希表。LWLockAcquire 无法立即取得显示为 LogicalRepLauncherHash 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/LogicalRepLauncherHash","title_zh":"正在等待 LWLock/LogicalRepLauncherHash 的会话","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 = 'LWLock'\n  AND wait_event = 'LogicalRepLauncherHash'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'LogicalRepLauncherHash'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":169,"kind":"resource_path","status":"dynamic_trigger","symbol":"LogicalRepLauncherHash","excerpt":"[LWTRANCHE_LAUNCHER_HASH] = \"LogicalRepLauncherHash\",","grep_pattern":"LogicalRepLauncherHash","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L169"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":394,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"LogicalRepLauncherHash","excerpt":"LogicalRepLauncherHash\t\"Waiting to access logical replication launcher's shared hash table.\"","grep_pattern":"LogicalRepLauncherHash","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L394"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-logical-rep-worker","type":"LWLock","name":"LogicalRepWorker","slug":"logical-rep-worker","url":"/lwlock/logical-rep-worker/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update the state of logical replication workers.","14":"Waiting to read or update the state of logical replication workers.","15":"Waiting to read or update the state of logical replication workers.","16":"Waiting to read or update the state of logical replication workers.","17":"Waiting to read or update the state of logical replication workers","18":"Waiting to read or update the state of logical replication workers"},"official_description_zh":"等待读取或更新逻辑复制 worker 的状态。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/replication/logical/launcher.c:189`. The instrumented operation is: Waiting to read or update the state of logical replication workers. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as LogicalRepWorker. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/replication/logical/launcher.c:189`。探针覆盖的操作是：等待读取或更新逻辑复制 worker 的状态。LWLockAcquire 无法立即取得显示为 LogicalRepWorker 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/LogicalRepWorker","title_zh":"正在等待 LWLock/LogicalRepWorker 的会话","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 = 'LWLock'\n  AND wait_event = 'LogicalRepWorker'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'LogicalRepWorker'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/launcher.c","line":189,"kind":"resource_path","status":"dynamic_trigger","symbol":"LogicalRepWorker","excerpt":"LWLockAcquire(LogicalRepWorkerLock, LW_SHARED);","grep_pattern":"LogicalRepWorker","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/launcher.c#L189"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":346,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"LogicalRepWorker","excerpt":"LogicalRepWorker\t\"Waiting to read or update the state of logical replication workers.\"","grep_pattern":"LogicalRepWorker","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L346"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-multi-xact-gen","type":"LWLock","name":"MultiXactGen","slug":"multi-xact-gen","url":"/lwlock/multi-xact-gen/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update shared multixact state.","14":"Waiting to read or update shared multixact state.","15":"Waiting to read or update shared multixact state.","16":"Waiting to read or update shared multixact state.","17":"Waiting to read or update shared multixact state","18":"Waiting to read or update shared multixact state"},"official_description_zh":"等待读取或更新共享 multixact 状态。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/access/transam/multixact.c:738`. The instrumented operation is: Waiting to read or update shared multixact state. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as MultiXactGen. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/transam/multixact.c:738`。探针覆盖的操作是：等待读取或更新共享 multixact 状态。LWLockAcquire 无法立即取得显示为 MultiXactGen 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/MultiXactGen","title_zh":"正在等待 LWLock/MultiXactGen 的会话","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 = 'LWLock'\n  AND wait_event = 'MultiXactGen'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'MultiXactGen'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/multixact.c","line":738,"kind":"resource_path","status":"dynamic_trigger","symbol":"MultiXactGen","excerpt":"LWLockAcquire(MultiXactGenLock, LW_SHARED);","grep_pattern":"MultiXactGen","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/multixact.c#L738"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":322,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"MultiXactGen","excerpt":"MultiXactGen\t\"Waiting to read or update shared multixact state.\"","grep_pattern":"MultiXactGen","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L322"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_multixact_freeze_max_age","vacuum_multixact_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_multixact_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-multi-xact-member-buffer","type":"LWLock","name":"MultiXactMemberBuffer","slug":"multi-xact-member-buffer","url":"/lwlock/multi-xact-member-buffer/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for I/O on a multixact member SLRU buffer.","14":"Waiting for I/O on a multixact member SLRU buffer.","15":"Waiting for I/O on a multixact member SLRU buffer.","16":"Waiting for I/O on a multixact member SLRU buffer.","17":"Waiting for I/O on a multixact member SLRU buffer","18":"Waiting for I/O on a multixact member SLRU buffer"},"official_description_zh":"等待 multixact member SLRU buffer 上的 I/O。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:144`. The instrumented operation is: Waiting for I/O on a multixact member SLRU buffer. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as MultiXactMemberBuffer. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:144`。探针覆盖的操作是：等待 multixact member SLRU buffer 上的 I/O。LWLockAcquire 无法立即取得显示为 MultiXactMemberBuffer 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/MultiXactMemberBuffer","title_zh":"正在等待 LWLock/MultiXactMemberBuffer 的会话","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 = 'LWLock'\n  AND wait_event = 'MultiXactMemberBuffer'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'MultiXactMemberBuffer'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":144,"kind":"resource_path","status":"dynamic_trigger","symbol":"MultiXactMemberBuffer","excerpt":"[LWTRANCHE_MULTIXACTMEMBER_BUFFER] = \"MultiXactMemberBuffer\",","grep_pattern":"MultiXactMemberBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L144"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":369,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"MultiXactMemberBuffer","excerpt":"MultiXactMemberBuffer\t\"Waiting for I/O on a multixact member SLRU buffer.\"","grep_pattern":"MultiXactMemberBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L369"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_multixact_freeze_max_age","vacuum_multixact_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_multixact_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-multi-xact-member-slru","type":"LWLock","name":"MultiXactMemberSLRU","slug":"multi-xact-member-slru","url":"/lwlock/multi-xact-member-slru/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the multixact member SLRU cache.","14":"Waiting to access the multixact member SLRU cache.","15":"Waiting to access the multixact member SLRU cache.","16":"Waiting to access the multixact member SLRU cache.","17":"Waiting to access the multixact member SLRU cache","18":"Waiting to access the multixact member SLRU cache"},"official_description_zh":"等待访问 multixact member SLRU 缓存。","mechanism":{"en":"This lock protects the SLRU cache for pg_multixact/members, which stores the transaction members of multitransaction IDs used by shared row locks. Concurrent row-lock creation and old member lookups meet here.","zh":"此锁保护 pg_multixact/members 的 SLRU 缓存；这里保存共享行锁使用的 multitransaction ID 成员事务。并发行锁创建与旧成员查询会在这里相遇。"},"normal":{"en":"Brief waits occur in workloads that use SELECT FOR SHARE/KEY SHARE or create multixacts through foreign-key checks.","zh":"使用 SELECT FOR SHARE/KEY SHARE，或因外键检查创建 multixact 的负载中会短暂出现。"},"trouble":{"en":"Sustained contention points to heavy shared row locking, multixact churn, lagging freeze, or slow pg_multixact storage.","zh":"持续竞争指向大量共享行锁、multixact 抖动、冻结落后，或 pg_multixact 存储缓慢。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/MultiXactMemberSLRU","title_zh":"正在等待 LWLock/MultiXactMemberSLRU 的会话","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 = 'LWLock'\n  AND wait_event = 'MultiXactMemberSLRU'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'MultiXactMemberSLRU'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Find statements and tables creating many shared row locks.","Check multixact age and autovacuum progress.","Reduce lock fan-out and unblock multixact freeze; investigate member SLRU I/O if paired with buffer waits."],"zh":["找出制造大量共享行锁的语句与表。","检查 multixact 年龄与 autovacuum 进度。","降低锁扇出并解除 multixact 冻结阻塞；若同时出现 buffer 等待，再查 member SLRU I/O。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":174,"kind":"resource_path","status":"dynamic_trigger","symbol":"MultiXactMemberSLRU","excerpt":"[LWTRANCHE_MULTIXACTMEMBER_SLRU] = \"MultiXactMemberSLRU\",","grep_pattern":"MultiXactMemberSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L174"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":399,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"MultiXactMemberSLRU","excerpt":"MultiXactMemberSLRU\t\"Waiting to access the multixact member SLRU cache.\"","grep_pattern":"MultiXactMemberSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L399"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_multixact_freeze_max_age","vacuum_multixact_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_multixact_age","multixact_member_io"],"incident_pattern":{"en":"A high-fan-out foreign-key workload locks many parent rows while a long transaction delays multixact cleanup, driving member-cache contention.","zh":"高扇出的外键负载锁住大量父表行，同时长事务推迟 multixact 清理，最终引发 member 缓存竞争。"}}
{"schema_version":1,"record_kind":"event","id":"lwlock-multi-xact-offset-buffer","type":"LWLock","name":"MultiXactOffsetBuffer","slug":"multi-xact-offset-buffer","url":"/lwlock/multi-xact-offset-buffer/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for I/O on a multixact offset SLRU buffer.","14":"Waiting for I/O on a multixact offset SLRU buffer.","15":"Waiting for I/O on a multixact offset SLRU buffer.","16":"Waiting for I/O on a multixact offset SLRU buffer.","17":"Waiting for I/O on a multixact offset SLRU buffer","18":"Waiting for I/O on a multixact offset SLRU buffer"},"official_description_zh":"等待 multixact offset SLRU buffer 上的 I/O。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:143`. The instrumented operation is: Waiting for I/O on a multixact offset SLRU buffer. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as MultiXactOffsetBuffer. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:143`。探针覆盖的操作是：等待 multixact offset SLRU buffer 上的 I/O。LWLockAcquire 无法立即取得显示为 MultiXactOffsetBuffer 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/MultiXactOffsetBuffer","title_zh":"正在等待 LWLock/MultiXactOffsetBuffer 的会话","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 = 'LWLock'\n  AND wait_event = 'MultiXactOffsetBuffer'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'MultiXactOffsetBuffer'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":143,"kind":"resource_path","status":"dynamic_trigger","symbol":"MultiXactOffsetBuffer","excerpt":"[LWTRANCHE_MULTIXACTOFFSET_BUFFER] = \"MultiXactOffsetBuffer\",","grep_pattern":"MultiXactOffsetBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L143"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":368,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"MultiXactOffsetBuffer","excerpt":"MultiXactOffsetBuffer\t\"Waiting for I/O on a multixact offset SLRU buffer.\"","grep_pattern":"MultiXactOffsetBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L368"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_multixact_freeze_max_age","vacuum_multixact_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_multixact_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-multi-xact-offset-slru","type":"LWLock","name":"MultiXactOffsetSLRU","slug":"multi-xact-offset-slru","url":"/lwlock/multi-xact-offset-slru/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the multixact offset SLRU cache.","14":"Waiting to access the multixact offset SLRU cache.","15":"Waiting to access the multixact offset SLRU cache.","16":"Waiting to access the multixact offset SLRU cache.","17":"Waiting to access the multixact offset SLRU cache","18":"Waiting to access the multixact offset SLRU cache"},"official_description_zh":"等待访问 multixact offset SLRU 缓存。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:173`. The instrumented operation is: Waiting to access the multixact offset SLRU cache. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as MultiXactOffsetSLRU. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:173`。探针覆盖的操作是：等待访问 multixact offset SLRU 缓存。LWLockAcquire 无法立即取得显示为 MultiXactOffsetSLRU 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/MultiXactOffsetSLRU","title_zh":"正在等待 LWLock/MultiXactOffsetSLRU 的会话","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 = 'LWLock'\n  AND wait_event = 'MultiXactOffsetSLRU'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'MultiXactOffsetSLRU'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":173,"kind":"resource_path","status":"dynamic_trigger","symbol":"MultiXactOffsetSLRU","excerpt":"[LWTRANCHE_MULTIXACTOFFSET_SLRU] = \"MultiXactOffsetSLRU\",","grep_pattern":"MultiXactOffsetSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L173"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":398,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"MultiXactOffsetSLRU","excerpt":"MultiXactOffsetSLRU\t\"Waiting to access the multixact offset SLRU cache.\"","grep_pattern":"MultiXactOffsetSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L398"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_multixact_freeze_max_age","vacuum_multixact_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_multixact_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-multi-xact-truncation","type":"LWLock","name":"MultiXactTruncation","slug":"multi-xact-truncation","url":"/lwlock/multi-xact-truncation/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or truncate multixact information.","14":"Waiting to read or truncate multixact information.","15":"Waiting to read or truncate multixact information.","16":"Waiting to read or truncate multixact information.","17":"Waiting to read or truncate multixact information","18":"Waiting to read or truncate multixact information"},"official_description_zh":"等待读取或截断 multixact 信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/access/transam/multixact.c:2901`. The instrumented operation is: Waiting to read or truncate multixact information. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as MultiXactTruncation. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/transam/multixact.c:2901`。探针覆盖的操作是：等待读取或截断 multixact 信息。LWLockAcquire 无法立即取得显示为 MultiXactTruncation 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/MultiXactTruncation","title_zh":"正在等待 LWLock/MultiXactTruncation 的会话","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 = 'LWLock'\n  AND wait_event = 'MultiXactTruncation'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'MultiXactTruncation'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/multixact.c","line":2901,"kind":"resource_path","status":"dynamic_trigger","symbol":"MultiXactTruncation","excerpt":"LWLockAcquire(MultiXactTruncationLock, LW_SHARED);","grep_pattern":"MultiXactTruncation","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/multixact.c#L2901"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":345,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"MultiXactTruncation","excerpt":"MultiXactTruncation\t\"Waiting to read or truncate multixact information.\"","grep_pattern":"MultiXactTruncation","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L345"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_multixact_freeze_max_age","vacuum_multixact_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_multixact_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-notify-buffer","type":"LWLock","name":"NotifyBuffer","slug":"notify-buffer","url":"/lwlock/notify-buffer/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for I/O on a NOTIFY message SLRU buffer.","14":"Waiting for I/O on a NOTIFY message SLRU buffer.","15":"Waiting for I/O on a NOTIFY message SLRU buffer.","16":"Waiting for I/O on a NOTIFY message SLRU buffer.","17":"Waiting for I/O on a NOTIFY message SLRU buffer","18":"Waiting for I/O on a NOTIFY message SLRU buffer"},"official_description_zh":"等待 NOTIFY 消息 SLRU buffer 上的 I/O。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:145`. The instrumented operation is: Waiting for I/O on a NOTIFY message SLRU buffer. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as NotifyBuffer. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:145`。探针覆盖的操作是：等待 NOTIFY 消息 SLRU buffer 上的 I/O。LWLockAcquire 无法立即取得显示为 NotifyBuffer 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/NotifyBuffer","title_zh":"正在等待 LWLock/NotifyBuffer 的会话","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 = 'LWLock'\n  AND wait_event = 'NotifyBuffer'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'NotifyBuffer'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":145,"kind":"resource_path","status":"dynamic_trigger","symbol":"NotifyBuffer","excerpt":"[LWTRANCHE_NOTIFY_BUFFER] = \"NotifyBuffer\",","grep_pattern":"NotifyBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L145"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":370,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"NotifyBuffer","excerpt":"NotifyBuffer\t\"Waiting for I/O on a <command>NOTIFY</command> message SLRU buffer.\"","grep_pattern":"NotifyBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L370"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-notify-queue","type":"LWLock","name":"NotifyQueue","slug":"notify-queue","url":"/lwlock/notify-queue/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update NOTIFY messages.","14":"Waiting to read or update NOTIFY messages.","15":"Waiting to read or update NOTIFY messages.","16":"Waiting to read or update NOTIFY messages.","17":"Waiting to read or update NOTIFY messages","18":"Waiting to read or update NOTIFY messages"},"official_description_zh":"等待读取或更新 NOTIFY 消息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/commands/async.c:940`. The instrumented operation is: Waiting to read or update NOTIFY messages. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as NotifyQueue. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/commands/async.c:940`。探针覆盖的操作是：等待读取或更新 NOTIFY 消息。LWLockAcquire 无法立即取得显示为 NotifyQueue 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/NotifyQueue","title_zh":"正在等待 LWLock/NotifyQueue 的会话","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 = 'LWLock'\n  AND wait_event = 'NotifyQueue'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'NotifyQueue'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/commands/async.c","line":940,"kind":"resource_path","status":"dynamic_trigger","symbol":"NotifyQueue","excerpt":"LWLockAcquire(NotifyQueueLock, LW_EXCLUSIVE);","grep_pattern":"NotifyQueue","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/commands/async.c#L940"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":333,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"NotifyQueue","excerpt":"NotifyQueue\t\"Waiting to read or update <command>NOTIFY</command> messages.\"","grep_pattern":"NotifyQueue","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L333"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-notify-queue-tail","type":"LWLock","name":"NotifyQueueTail","slug":"notify-queue-tail","url":"/lwlock/notify-queue-tail/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to update limit on NOTIFY message storage.","14":"Waiting to update limit on NOTIFY message storage.","15":"Waiting to update limit on NOTIFY message storage.","16":"Waiting to update limit on NOTIFY message storage.","17":"Waiting to update limit on NOTIFY message storage","18":"Waiting to update limit on NOTIFY message storage"},"official_description_zh":"等待更新 NOTIFY 消息的存储上限。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/commands/async.c:2126`. The instrumented operation is: Waiting to update limit on NOTIFY message storage. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as NotifyQueueTail. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/commands/async.c:2126`。探针覆盖的操作是：等待更新 NOTIFY 消息的存储上限。LWLockAcquire 无法立即取得显示为 NotifyQueueTail 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/NotifyQueueTail","title_zh":"正在等待 LWLock/NotifyQueueTail 的会话","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 = 'LWLock'\n  AND wait_event = 'NotifyQueueTail'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'NotifyQueueTail'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/commands/async.c","line":2126,"kind":"resource_path","status":"dynamic_trigger","symbol":"NotifyQueueTail","excerpt":"LWLockAcquire(NotifyQueueTailLock, LW_EXCLUSIVE);","grep_pattern":"NotifyQueueTail","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/commands/async.c#L2126"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":349,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"NotifyQueueTail","excerpt":"NotifyQueueTail\t\"Waiting to update limit on <command>NOTIFY</command> message storage.\"","grep_pattern":"NotifyQueueTail","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L349"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-notify-slru","type":"LWLock","name":"NotifySLRU","slug":"notify-slru","url":"/lwlock/notify-slru/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the NOTIFY message SLRU cache.","14":"Waiting to access the NOTIFY message SLRU cache.","15":"Waiting to access the NOTIFY message SLRU cache.","16":"Waiting to access the NOTIFY message SLRU cache.","17":"Waiting to access the NOTIFY message SLRU cache","18":"Waiting to access the NOTIFY message SLRU cache"},"official_description_zh":"等待访问 NOTIFY 消息 SLRU 缓存。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:175`. The instrumented operation is: Waiting to access the NOTIFY message SLRU cache. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as NotifySLRU. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:175`。探针覆盖的操作是：等待访问 NOTIFY 消息 SLRU 缓存。LWLockAcquire 无法立即取得显示为 NotifySLRU 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/NotifySLRU","title_zh":"正在等待 LWLock/NotifySLRU 的会话","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 = 'LWLock'\n  AND wait_event = 'NotifySLRU'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'NotifySLRU'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":175,"kind":"resource_path","status":"dynamic_trigger","symbol":"NotifySLRU","excerpt":"[LWTRANCHE_NOTIFY_SLRU] = \"NotifySLRU\",","grep_pattern":"NotifySLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L175"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":400,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"NotifySLRU","excerpt":"NotifySLRU\t\"Waiting to access the <command>NOTIFY</command> message SLRU cache.\"","grep_pattern":"NotifySLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L400"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-oid-gen","type":"LWLock","name":"OidGen","slug":"oid-gen","url":"/lwlock/oid-gen/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to allocate a new OID.","14":"Waiting to allocate a new OID.","15":"Waiting to allocate a new OID.","16":"Waiting to allocate a new OID.","17":"Waiting to allocate a new OID","18":"Waiting to allocate a new OID"},"official_description_zh":"等待分配新的 OID。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/access/transam/varsup.c:563`. The instrumented operation is: Waiting to allocate a new OID. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as OidGen. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/transam/varsup.c:563`。探针覆盖的操作是：等待分配新的 OID。LWLockAcquire 无法立即取得显示为 OidGen 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/OidGen","title_zh":"正在等待 LWLock/OidGen 的会话","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 = 'LWLock'\n  AND wait_event = 'OidGen'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'OidGen'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/varsup.c","line":563,"kind":"resource_path","status":"dynamic_trigger","symbol":"OidGen","excerpt":"LWLockAcquire(OidGenLock, LW_EXCLUSIVE);","grep_pattern":"OidGen","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/varsup.c#L563"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":314,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"OidGen","excerpt":"OidGen\t\"Waiting to allocate a new OID.\"","grep_pattern":"OidGen","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L314"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-old-snapshot-time-map","type":"LWLock","name":"OldSnapshotTimeMap","slug":"old-snapshot-time-map","url":"/lwlock/old-snapshot-time-map/","versions":[13,14,15,16],"version_range":"13-16","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update old snapshot control information.","14":"Waiting to read or update old snapshot control information.","15":"Waiting to read or update old snapshot control information.","16":"Waiting to read or update old snapshot control information."},"official_description_zh":"等待读取或更新旧快照控制信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:750` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/time/snapmgr.c:1758`. The instrumented operation is: Waiting to read or update old snapshot control information. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as OldSnapshotTimeMap. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:750`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/time/snapmgr.c:1758`。探针覆盖的操作是：等待读取或更新旧快照控制信息。LWLockAcquire 无法立即取得显示为 OldSnapshotTimeMap 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/OldSnapshotTimeMap","title_zh":"正在等待 LWLock/OldSnapshotTimeMap 的会话","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 = 'LWLock'\n  AND wait_event = 'OldSnapshotTimeMap'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'OldSnapshotTimeMap'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/storage/lmgr/lwlock.c","line":750,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/storage/lmgr/lwlock.c#L750"},{"major":16,"version":"16.15","tag":"REL_16_15","commit":"7d3e000c5961a544302072058a1184e9a588837b","path":"src/backend/utils/time/snapmgr.c","line":1758,"kind":"resource_path","status":"dynamic_trigger","symbol":"OldSnapshotTimeMap","excerpt":"LWLockAcquire(OldSnapshotTimeMapLock, LW_SHARED);","grep_pattern":"OldSnapshotTimeMap","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_16_15/src/backend/utils/time/snapmgr.c#L1758"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"16.15"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-parallel-append","type":"LWLock","name":"ParallelAppend","slug":"parallel-append","url":"/lwlock/parallel-append/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to choose the next subplan during Parallel Append plan execution.","14":"Waiting to choose the next subplan during Parallel Append plan execution.","15":"Waiting to choose the next subplan during Parallel Append plan execution.","16":"Waiting to choose the next subplan during Parallel Append plan execution.","17":"Waiting to choose the next subplan during Parallel Append plan execution","18":"Waiting to choose the next subplan during Parallel Append plan execution"},"official_description_zh":"执行 Parallel Append 计划期间，等待选择下一个子计划。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/executor/nodeAppend.c:69`. The instrumented operation is: Waiting to choose the next subplan during Parallel Append plan execution. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ParallelAppend. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/executor/nodeAppend.c:69`。探针覆盖的操作是：执行 Parallel Append 计划期间，等待选择下一个子计划。LWLockAcquire 无法立即取得显示为 ParallelAppend 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ParallelAppend","title_zh":"正在等待 LWLock/ParallelAppend 的会话","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 = 'LWLock'\n  AND wait_event = 'ParallelAppend'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ParallelAppend'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeAppend.c","line":69,"kind":"resource_path","status":"dynamic_trigger","symbol":"ParallelAppend","excerpt":"struct ParallelAppendState","grep_pattern":"ParallelAppend","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeAppend.c#L69"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":388,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ParallelAppend","excerpt":"ParallelAppend\t\"Waiting to choose the next subplan during Parallel Append plan execution.\"","grep_pattern":"ParallelAppend","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L388"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-parallel-btree-scan","type":"LWLock","name":"ParallelBtreeScan","slug":"parallel-btree-scan","url":"/lwlock/parallel-btree-scan/","versions":[18],"version_range":"18","availability":{},"aliases":[],"official_descriptions":{"18":"Waiting to synchronize workers during Parallel B-tree scan plan execution"},"official_description_zh":"执行 Parallel B-tree Scan 计划期间，等待同步 worker。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:156`. The instrumented operation is: Waiting to synchronize workers during Parallel B-tree scan plan execution. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ParallelBtreeScan. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:156`。探针覆盖的操作是：执行 Parallel B-tree Scan 计划期间，等待同步 worker。LWLockAcquire 无法立即取得显示为 ParallelBtreeScan 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ParallelBtreeScan","title_zh":"正在等待 LWLock/ParallelBtreeScan 的会话","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 = 'LWLock'\n  AND wait_event = 'ParallelBtreeScan'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ParallelBtreeScan'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":156,"kind":"resource_path","status":"dynamic_trigger","symbol":"ParallelBtreeScan","excerpt":"[LWTRANCHE_PARALLEL_BTREE_SCAN] = \"ParallelBtreeScan\",","grep_pattern":"ParallelBtreeScan","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L156"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":381,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ParallelBtreeScan","excerpt":"ParallelBtreeScan\t\"Waiting to synchronize workers during Parallel B-tree scan plan execution.\"","grep_pattern":"ParallelBtreeScan","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L381"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-parallel-hash-join","type":"LWLock","name":"ParallelHashJoin","slug":"parallel-hash-join","url":"/lwlock/parallel-hash-join/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to synchronize workers during Parallel Hash Join plan execution.","14":"Waiting to synchronize workers during Parallel Hash Join plan execution.","15":"Waiting to synchronize workers during Parallel Hash Join plan execution.","16":"Waiting to synchronize workers during Parallel Hash Join plan execution.","17":"Waiting to synchronize workers during Parallel Hash Join plan execution","18":"Waiting to synchronize workers during Parallel Hash Join plan execution"},"official_description_zh":"执行 Parallel Hash Join 计划期间，等待同步 worker。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/executor/nodeHash.c:71`. The instrumented operation is: Waiting to synchronize workers during Parallel Hash Join plan execution. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ParallelHashJoin. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/executor/nodeHash.c:71`。探针覆盖的操作是：执行 Parallel Hash Join 计划期间，等待同步 worker。LWLockAcquire 无法立即取得显示为 ParallelHashJoin 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ParallelHashJoin","title_zh":"正在等待 LWLock/ParallelHashJoin 的会话","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 = 'LWLock'\n  AND wait_event = 'ParallelHashJoin'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ParallelHashJoin'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/executor/nodeHash.c","line":71,"kind":"resource_path","status":"dynamic_trigger","symbol":"ParallelHashJoin","excerpt":"static void ExecParallelHashJoinSetUpBatches(HashJoinTable hashtable, int nbatch);","grep_pattern":"ParallelHashJoin","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/executor/nodeHash.c#L71"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":380,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ParallelHashJoin","excerpt":"ParallelHashJoin\t\"Waiting to synchronize workers during Parallel Hash Join plan execution.\"","grep_pattern":"ParallelHashJoin","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L380"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-parallel-query-dsa","type":"LWLock","name":"ParallelQueryDSA","slug":"parallel-query-dsa","url":"/lwlock/parallel-query-dsa/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for parallel query dynamic shared memory allocation.","14":"Waiting for parallel query dynamic shared memory allocation.","15":"Waiting for parallel query dynamic shared memory allocation.","16":"Waiting for parallel query dynamic shared memory allocation.","17":"Waiting for parallel query dynamic shared memory allocation","18":"Waiting for parallel query dynamic shared memory allocation"},"official_description_zh":"等待并行查询的动态共享内存分配。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:157`. The instrumented operation is: Waiting for parallel query dynamic shared memory allocation. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ParallelQueryDSA. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:157`。探针覆盖的操作是：等待并行查询的动态共享内存分配。LWLockAcquire 无法立即取得显示为 ParallelQueryDSA 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ParallelQueryDSA","title_zh":"正在等待 LWLock/ParallelQueryDSA 的会话","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 = 'LWLock'\n  AND wait_event = 'ParallelQueryDSA'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ParallelQueryDSA'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":157,"kind":"resource_path","status":"dynamic_trigger","symbol":"ParallelQueryDSA","excerpt":"[LWTRANCHE_PARALLEL_QUERY_DSA] = \"ParallelQueryDSA\",","grep_pattern":"ParallelQueryDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L157"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":382,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ParallelQueryDSA","excerpt":"ParallelQueryDSA\t\"Waiting for parallel query dynamic shared memory allocation.\"","grep_pattern":"ParallelQueryDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L382"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-parallel-vacuum-dsa","type":"LWLock","name":"ParallelVacuumDSA","slug":"parallel-vacuum-dsa","url":"/lwlock/parallel-vacuum-dsa/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting for parallel vacuum dynamic shared memory allocation","18":"Waiting for parallel vacuum dynamic shared memory allocation"},"official_description_zh":"等待并行 vacuum 的动态共享内存分配。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:179`. The instrumented operation is: Waiting for parallel vacuum dynamic shared memory allocation. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ParallelVacuumDSA. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:179`。探针覆盖的操作是：等待并行 vacuum 的动态共享内存分配。LWLockAcquire 无法立即取得显示为 ParallelVacuumDSA 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ParallelVacuumDSA","title_zh":"正在等待 LWLock/ParallelVacuumDSA 的会话","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 = 'LWLock'\n  AND wait_event = 'ParallelVacuumDSA'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ParallelVacuumDSA'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":179,"kind":"resource_path","status":"dynamic_trigger","symbol":"ParallelVacuumDSA","excerpt":"[LWTRANCHE_PARALLEL_VACUUM_DSA] = \"ParallelVacuumDSA\",","grep_pattern":"ParallelVacuumDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L179"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":404,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ParallelVacuumDSA","excerpt":"ParallelVacuumDSA\t\"Waiting for parallel vacuum dynamic shared memory allocation.\"","grep_pattern":"ParallelVacuumDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L404"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_naptime"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-per-session-dsa","type":"LWLock","name":"PerSessionDSA","slug":"per-session-dsa","url":"/lwlock/per-session-dsa/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for parallel query dynamic shared memory allocation.","14":"Waiting for parallel query dynamic shared memory allocation.","15":"Waiting for parallel query dynamic shared memory allocation.","16":"Waiting for parallel query dynamic shared memory allocation.","17":"Waiting for parallel query dynamic shared memory allocation","18":"Waiting for parallel query dynamic shared memory allocation"},"official_description_zh":"等待并行查询的动态共享内存分配。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:158`. The instrumented operation is: Waiting for parallel query dynamic shared memory allocation. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as PerSessionDSA. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:158`。探针覆盖的操作是：等待并行查询的动态共享内存分配。LWLockAcquire 无法立即取得显示为 PerSessionDSA 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/PerSessionDSA","title_zh":"正在等待 LWLock/PerSessionDSA 的会话","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 = 'LWLock'\n  AND wait_event = 'PerSessionDSA'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'PerSessionDSA'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":158,"kind":"resource_path","status":"dynamic_trigger","symbol":"PerSessionDSA","excerpt":"[LWTRANCHE_PER_SESSION_DSA] = \"PerSessionDSA\",","grep_pattern":"PerSessionDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L158"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":383,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"PerSessionDSA","excerpt":"PerSessionDSA\t\"Waiting for parallel query dynamic shared memory allocation.\"","grep_pattern":"PerSessionDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L383"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-per-session-record-type","type":"LWLock","name":"PerSessionRecordType","slug":"per-session-record-type","url":"/lwlock/per-session-record-type/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access a parallel query's information about composite types.","14":"Waiting to access a parallel query's information about composite types.","15":"Waiting to access a parallel query's information about composite types.","16":"Waiting to access a parallel query's information about composite types.","17":"Waiting to access a parallel query's information about composite types","18":"Waiting to access a parallel query's information about composite types"},"official_description_zh":"等待访问并行查询的复合类型信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:159`. The instrumented operation is: Waiting to access a parallel query's information about composite types. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as PerSessionRecordType. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:159`。探针覆盖的操作是：等待访问并行查询的复合类型信息。LWLockAcquire 无法立即取得显示为 PerSessionRecordType 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/PerSessionRecordType","title_zh":"正在等待 LWLock/PerSessionRecordType 的会话","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 = 'LWLock'\n  AND wait_event = 'PerSessionRecordType'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'PerSessionRecordType'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":159,"kind":"resource_path","status":"dynamic_trigger","symbol":"PerSessionRecordType","excerpt":"[LWTRANCHE_PER_SESSION_RECORD_TYPE] = \"PerSessionRecordType\",","grep_pattern":"PerSessionRecordType","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L159"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":384,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"PerSessionRecordType","excerpt":"PerSessionRecordType\t\"Waiting to access a parallel query's information about composite types.\"","grep_pattern":"PerSessionRecordType","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L384"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-per-session-record-typmod","type":"LWLock","name":"PerSessionRecordTypmod","slug":"per-session-record-typmod","url":"/lwlock/per-session-record-typmod/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access a parallel query's information about type modifiers that identify anonymous record types.","14":"Waiting to access a parallel query's information about type modifiers that identify anonymous record types.","15":"Waiting to access a parallel query's information about type modifiers that identify anonymous record types.","16":"Waiting to access a parallel query's information about type modifiers that identify anonymous record types.","17":"Waiting to access a parallel query's information about type modifiers that identify anonymous record types","18":"Waiting to access a parallel query's information about type modifiers that identify anonymous record types"},"official_description_zh":"等待访问并行查询中用于标识匿名 record 类型的类型修饰符信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:160`. The instrumented operation is: Waiting to access a parallel query's information about type modifiers that identify anonymous record types. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as PerSessionRecordTypmod. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:160`。探针覆盖的操作是：等待访问并行查询中用于标识匿名 record 类型的类型修饰符信息。LWLockAcquire 无法立即取得显示为 PerSessionRecordTypmod 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/PerSessionRecordTypmod","title_zh":"正在等待 LWLock/PerSessionRecordTypmod 的会话","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 = 'LWLock'\n  AND wait_event = 'PerSessionRecordTypmod'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'PerSessionRecordTypmod'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":160,"kind":"resource_path","status":"dynamic_trigger","symbol":"PerSessionRecordTypmod","excerpt":"[LWTRANCHE_PER_SESSION_RECORD_TYPMOD] = \"PerSessionRecordTypmod\",","grep_pattern":"PerSessionRecordTypmod","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L160"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":385,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"PerSessionRecordTypmod","excerpt":"PerSessionRecordTypmod\t\"Waiting to access a parallel query's information about type modifiers that identify anonymous record types.\"","grep_pattern":"PerSessionRecordTypmod","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L385"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-per-xact-predicate-list","type":"LWLock","name":"PerXactPredicateList","slug":"per-xact-predicate-list","url":"/lwlock/per-xact-predicate-list/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the list of predicate locks held by the current serializable transaction during a parallel query.","14":"Waiting to access the list of predicate locks held by the current serializable transaction during a parallel query.","15":"Waiting to access the list of predicate locks held by the current serializable transaction during a parallel query.","16":"Waiting to access the list of predicate locks held by the current serializable transaction during a parallel query.","17":"Waiting to access the list of predicate locks held by the current serializable transaction during a parallel query","18":"Waiting to access the list of predicate locks held by the current serializable transaction during a parallel query"},"official_description_zh":"并行查询期间，等待访问当前可串行化事务所持有的谓词锁列表。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:164`. The instrumented operation is: Waiting to access the list of predicate locks held by the current serializable transaction during a parallel query. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as PerXactPredicateList. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:164`。探针覆盖的操作是：并行查询期间，等待访问当前可串行化事务所持有的谓词锁列表。LWLockAcquire 无法立即取得显示为 PerXactPredicateList 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/PerXactPredicateList","title_zh":"正在等待 LWLock/PerXactPredicateList 的会话","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 = 'LWLock'\n  AND wait_event = 'PerXactPredicateList'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'PerXactPredicateList'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":164,"kind":"resource_path","status":"dynamic_trigger","symbol":"PerXactPredicateList","excerpt":"[LWTRANCHE_PER_XACT_PREDICATE_LIST] = \"PerXactPredicateList\",","grep_pattern":"PerXactPredicateList","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L164"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":389,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"PerXactPredicateList","excerpt":"PerXactPredicateList\t\"Waiting to access the list of predicate locks held by the current serializable transaction during a parallel query.\"","grep_pattern":"PerXactPredicateList","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L389"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_freeze_max_age","vacuum_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-pg-stats-dsa","type":"LWLock","name":"PgStatsDSA","slug":"pg-stats-dsa","url":"/lwlock/pg-stats-dsa/","versions":[15,16,17,18],"version_range":"15-18","availability":{},"aliases":[],"official_descriptions":{"15":"Waiting for stats dynamic shared memory allocator access","16":"Waiting for stats dynamic shared memory allocator access","17":"Waiting for stats dynamic shared memory allocator access","18":"Waiting for stats dynamic shared memory allocator access"},"official_description_zh":"等待访问统计信息的动态共享内存分配器。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:165`. The instrumented operation is: Waiting for stats dynamic shared memory allocator access. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as PgStatsDSA. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:165`。探针覆盖的操作是：等待访问统计信息的动态共享内存分配器。LWLockAcquire 无法立即取得显示为 PgStatsDSA 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/PgStatsDSA","title_zh":"正在等待 LWLock/PgStatsDSA 的会话","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 = 'LWLock'\n  AND wait_event = 'PgStatsDSA'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'PgStatsDSA'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":165,"kind":"resource_path","status":"dynamic_trigger","symbol":"PgStatsDSA","excerpt":"[LWTRANCHE_PGSTATS_DSA] = \"PgStatsDSA\",","grep_pattern":"PgStatsDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L165"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":390,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"PgStatsDSA","excerpt":"PgStatsDSA\t\"Waiting for stats dynamic shared memory allocator access.\"","grep_pattern":"PgStatsDSA","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L390"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-pg-stats-data","type":"LWLock","name":"PgStatsData","slug":"pg-stats-data","url":"/lwlock/pg-stats-data/","versions":[15,16,17,18],"version_range":"15-18","availability":{},"aliases":[],"official_descriptions":{"15":"Waiting for shared memory stats data access","16":"Waiting for shared memory stats data access","17":"Waiting for shared memory stats data access","18":"Waiting for shared memory stats data access"},"official_description_zh":"等待访问共享内存中的统计数据。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:167`. The instrumented operation is: Waiting for shared memory stats data access. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as PgStatsData. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:167`。探针覆盖的操作是：等待访问共享内存中的统计数据。LWLockAcquire 无法立即取得显示为 PgStatsData 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/PgStatsData","title_zh":"正在等待 LWLock/PgStatsData 的会话","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 = 'LWLock'\n  AND wait_event = 'PgStatsData'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'PgStatsData'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":167,"kind":"resource_path","status":"dynamic_trigger","symbol":"PgStatsData","excerpt":"[LWTRANCHE_PGSTATS_DATA] = \"PgStatsData\",","grep_pattern":"PgStatsData","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L167"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":392,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"PgStatsData","excerpt":"PgStatsData\t\"Waiting for shared memory stats data access.\"","grep_pattern":"PgStatsData","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L392"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-pg-stats-hash","type":"LWLock","name":"PgStatsHash","slug":"pg-stats-hash","url":"/lwlock/pg-stats-hash/","versions":[15,16,17,18],"version_range":"15-18","availability":{},"aliases":[],"official_descriptions":{"15":"Waiting for stats shared memory hash table access","16":"Waiting for stats shared memory hash table access","17":"Waiting for stats shared memory hash table access","18":"Waiting for stats shared memory hash table access"},"official_description_zh":"等待访问统计信息的共享内存哈希表。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:166`. The instrumented operation is: Waiting for stats shared memory hash table access. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as PgStatsHash. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:166`。探针覆盖的操作是：等待访问统计信息的共享内存哈希表。LWLockAcquire 无法立即取得显示为 PgStatsHash 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/PgStatsHash","title_zh":"正在等待 LWLock/PgStatsHash 的会话","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 = 'LWLock'\n  AND wait_event = 'PgStatsHash'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'PgStatsHash'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":166,"kind":"resource_path","status":"dynamic_trigger","symbol":"PgStatsHash","excerpt":"[LWTRANCHE_PGSTATS_HASH] = \"PgStatsHash\",","grep_pattern":"PgStatsHash","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L166"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":391,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"PgStatsHash","excerpt":"PgStatsHash\t\"Waiting for stats shared memory hash table access.\"","grep_pattern":"PgStatsHash","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L391"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-predicate-lock-manager","type":"LWLock","name":"PredicateLockManager","slug":"predicate-lock-manager","url":"/lwlock/predicate-lock-manager/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access predicate lock information used by serializable transactions.","14":"Waiting to access predicate lock information used by serializable transactions.","15":"Waiting to access predicate lock information used by serializable transactions.","16":"Waiting to access predicate lock information used by serializable transactions.","17":"Waiting to access predicate lock information used by serializable transactions","18":"Waiting to access predicate lock information used by serializable transactions"},"official_description_zh":"等待访问可串行化事务使用的谓词锁信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:154`. The instrumented operation is: Waiting to access predicate lock information used by serializable transactions. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as PredicateLockManager. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:154`。探针覆盖的操作是：等待访问可串行化事务使用的谓词锁信息。LWLockAcquire 无法立即取得显示为 PredicateLockManager 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/PredicateLockManager","title_zh":"正在等待 LWLock/PredicateLockManager 的会话","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 = 'LWLock'\n  AND wait_event = 'PredicateLockManager'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'PredicateLockManager'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":154,"kind":"resource_path","status":"dynamic_trigger","symbol":"PredicateLockManager","excerpt":"[LWTRANCHE_PREDICATE_LOCK_MANAGER] = \"PredicateLockManager\",","grep_pattern":"PredicateLockManager","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L154"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":379,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"PredicateLockManager","excerpt":"PredicateLockManager\t\"Waiting to access predicate lock information used by serializable transactions.\"","grep_pattern":"PredicateLockManager","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L379"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-proc-array","type":"LWLock","name":"ProcArray","slug":"proc-array","url":"/lwlock/proc-array/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the shared per-process data structures (typically, to get a snapshot or report a session's transaction ID).","14":"Waiting to access the shared per-process data structures (typically, to get a snapshot or report a session's transaction ID).","15":"Waiting to access the shared per-process data structures (typically, to get a snapshot or report a session's transaction ID).","16":"Waiting to access the shared per-process data structures (typically, to get a snapshot or report a session's transaction ID).","17":"Waiting to access the shared per-process data structures (typically, to get a snapshot or report a session's transaction ID)","18":"Waiting to access the shared per-process data structures (typically, to get a snapshot or report a session's transaction ID)"},"official_description_zh":"等待访问共享的进程级数据结构（通常用于获取快照或报告会话的事务 ID）。","mechanism":{"en":"ProcArrayLock protects the shared PGPROC/PGXACT arrays used for snapshots, transaction visibility, and transaction end. Snapshot acquisition and updates to process transaction state must briefly coordinate through it.","zh":"ProcArrayLock 保护用于快照、事务可见性与事务结束处理的共享 PGPROC/PGXACT 数组。获取快照以及更新进程事务状态都必须短暂经过它协调。"},"normal":{"en":"Brief waits are expected on busy OLTP systems that start and finish many transactions.","zh":"大量事务开始与结束的繁忙 OLTP 系统中，短暂等待属于预期。"},"trouble":{"en":"Persistent contention can accompany extreme connection counts, snapshot-heavy workloads, long transactions, or bursts of transaction completion.","zh":"持续竞争可能伴随极高连接数、大量快照、长事务，或事务集中结束。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ProcArray","title_zh":"正在等待 LWLock/ProcArray 的会话","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 = 'LWLock'\n  AND wait_event = 'ProcArray'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ProcArray'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Measure active backends and transaction age, not only total connections.","Find long-running and idle-in-transaction sessions that keep visibility horizons old.","Pool connections, shorten transactions, and avoid synchronized bursts of tiny transactions."],"zh":["测量活动后端与事务年龄，不要只看总连接数。","找出让可见性边界停滞的长事务与 idle in transaction 会话。","使用连接池、缩短事务，并避免大量微事务同步突发。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":6121,"kind":"resource_path","status":"dynamic_trigger","symbol":"ProcArray","excerpt":"LWLockAcquire(ProcArrayLock, LW_EXCLUSIVE);","grep_pattern":"ProcArray","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L6121"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":316,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ProcArray","excerpt":"ProcArray\t\"Waiting to access the shared per-process data structures (typically, to get a snapshot or report a session's transaction ID).\"","grep_pattern":"ProcArray","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L316"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["max_connections","idle_in_transaction_session_timeout"],"metrics":["waiting_sessions","wait_event_share","active_backends","oldest_transaction_age"],"incident_pattern":{"en":"An application reconnect storm creates thousands of short transactions while a reporting query holds an old snapshot, amplifying ProcArray traffic.","zh":"应用重连风暴制造数千个短事务，同时报表查询持有旧快照，放大了 ProcArray 流量。"}}
{"schema_version":1,"record_kind":"event","id":"lwlock-rel-cache-init","type":"LWLock","name":"RelCacheInit","slug":"rel-cache-init","url":"/lwlock/rel-cache-init/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update a pg_internal.init relation cache initialization file.","14":"Waiting to read or update a pg_internal.init relation cache initialization file.","15":"Waiting to read or update a pg_internal.init relation cache initialization file.","16":"Waiting to read or update a pg_internal.init relation cache initialization file.","17":"Waiting to read or update a pg_internal.init relation cache initialization file","18":"Waiting to read or update a pg_internal.init relation cache initialization file"},"official_description_zh":"等待读取或更新 pg_internal.init relation cache 初始化文件。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:323`. The instrumented operation is: Waiting to read or update a pg_internal.init relation cache initialization file. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as RelCacheInit. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:323`。探针覆盖的操作是：等待读取或更新 pg_internal.init relation cache 初始化文件。LWLockAcquire 无法立即取得显示为 RelCacheInit 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/RelCacheInit","title_zh":"正在等待 LWLock/RelCacheInit 的会话","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 = 'LWLock'\n  AND wait_event = 'RelCacheInit'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'RelCacheInit'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":323,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"RelCacheInit","excerpt":"RelCacheInit\t\"Waiting to read or update a <filename>pg_internal.init</filename> relation cache initialization file.\"","grep_pattern":"RelCacheInit","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L323"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/cache/relcache.c","line":6765,"kind":"resource_path","status":"dynamic_trigger","symbol":"RelCacheInit","excerpt":"LWLockAcquire(RelCacheInitLock, LW_EXCLUSIVE);","grep_pattern":"RelCacheInit","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/cache/relcache.c#L6765"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-relation-mapping","type":"LWLock","name":"RelationMapping","slug":"relation-mapping","url":"/lwlock/relation-mapping/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update a pg_filenode.map file (used to track the filenode assignments of certain system catalogs).","14":"Waiting to read or update a pg_filenode.map file (used to track the filenode assignments of certain system catalogs).","15":"Waiting to read or update a pg_filenode.map file (used to track the filenode assignments of certain system catalogs).","16":"Waiting to read or update a pg_filenode.map file (used to track the filenode assignments of certain system catalogs).","17":"Waiting to read or update a pg_filenode.map file (used to track the filenode assignments of certain system catalogs)","18":"Waiting to read or update a pg_filenode.map file (used to track the filenode assignments of certain system catalogs)"},"official_description_zh":"等待读取或更新 pg_filenode.map 文件（用于跟踪某些系统目录的 filenode 分配）。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:332`. The instrumented operation is: Waiting to read or update a pg_filenode.map file (used to track the filenode assignments of certain system catalogs). LWLockAcquire could not immediately take the lightweight-lock tranche displayed as RelationMapping. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:332`。探针覆盖的操作是：等待读取或更新 pg_filenode.map 文件（用于跟踪某些系统目录的 filenode 分配）。LWLockAcquire 无法立即取得显示为 RelationMapping 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/RelationMapping","title_zh":"正在等待 LWLock/RelationMapping 的会话","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 = 'LWLock'\n  AND wait_event = 'RelationMapping'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'RelationMapping'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":332,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"RelationMapping","excerpt":"RelationMapping\t\"Waiting to read or update a <filename>pg_filenode.map</filename> file (used to track the filenode assignments of certain system catalogs).\"","grep_pattern":"RelationMapping","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L332"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/cache/relmapper.c","line":311,"kind":"resource_path","status":"dynamic_trigger","symbol":"RelationMapping","excerpt":"LWLockAcquire(RelationMappingLock, LW_EXCLUSIVE);","grep_pattern":"RelationMapping","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/cache/relmapper.c#L311"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-replication-origin","type":"LWLock","name":"ReplicationOrigin","slug":"replication-origin","url":"/lwlock/replication-origin/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to create, drop or use a replication origin.","14":"Waiting to create, drop or use a replication origin.","15":"Waiting to create, drop or use a replication origin.","16":"Waiting to create, drop or use a replication origin.","17":"Waiting to create, drop or use a replication origin","18":"Waiting to create, drop or use a replication origin"},"official_description_zh":"等待创建、删除或使用复制源。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/replication/logical/origin.c:377`. The instrumented operation is: Waiting to create, drop or use a replication origin. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ReplicationOrigin. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/replication/logical/origin.c:377`。探针覆盖的操作是：等待创建、删除或使用复制源。LWLockAcquire 无法立即取得显示为 ReplicationOrigin 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ReplicationOrigin","title_zh":"正在等待 LWLock/ReplicationOrigin 的会话","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 = 'LWLock'\n  AND wait_event = 'ReplicationOrigin'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ReplicationOrigin'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/origin.c","line":377,"kind":"resource_path","status":"dynamic_trigger","symbol":"ReplicationOrigin","excerpt":"LWLockAcquire(ReplicationOriginLock, LW_EXCLUSIVE);","grep_pattern":"ReplicationOrigin","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/origin.c#L377"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":344,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ReplicationOrigin","excerpt":"ReplicationOrigin\t\"Waiting to create, drop or use a replication origin.\"","grep_pattern":"ReplicationOrigin","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L344"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-replication-origin-state","type":"LWLock","name":"ReplicationOriginState","slug":"replication-origin-state","url":"/lwlock/replication-origin-state/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update the progress of one replication origin.","14":"Waiting to read or update the progress of one replication origin.","15":"Waiting to read or update the progress of one replication origin.","16":"Waiting to read or update the progress of one replication origin.","17":"Waiting to read or update the progress of one replication origin","18":"Waiting to read or update the progress of one replication origin"},"official_description_zh":"等待读取或更新一个复制源的进度。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/replication/logical/origin.c:557`. The instrumented operation is: Waiting to read or update the progress of one replication origin. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ReplicationOriginState. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/replication/logical/origin.c:557`。探针覆盖的操作是：等待读取或更新一个复制源的进度。LWLockAcquire 无法立即取得显示为 ReplicationOriginState 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ReplicationOriginState","title_zh":"正在等待 LWLock/ReplicationOriginState 的会话","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 = 'LWLock'\n  AND wait_event = 'ReplicationOriginState'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ReplicationOriginState'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/origin.c","line":557,"kind":"resource_path","status":"dynamic_trigger","symbol":"ReplicationOriginState","excerpt":"ShmemInitStruct(\"ReplicationOriginState\",","grep_pattern":"ReplicationOriginState","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/origin.c#L557"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":374,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ReplicationOriginState","excerpt":"ReplicationOriginState\t\"Waiting to read or update the progress of one replication origin.\"","grep_pattern":"ReplicationOriginState","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L374"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-replication-slot-allocation","type":"LWLock","name":"ReplicationSlotAllocation","slug":"replication-slot-allocation","url":"/lwlock/replication-slot-allocation/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to allocate or free a replication slot.","14":"Waiting to allocate or free a replication slot.","15":"Waiting to allocate or free a replication slot.","16":"Waiting to allocate or free a replication slot.","17":"Waiting to allocate or free a replication slot","18":"Waiting to allocate or free a replication slot"},"official_description_zh":"等待分配或释放复制槽。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/replication/logical/slotsync.c:543`. The instrumented operation is: Waiting to allocate or free a replication slot. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ReplicationSlotAllocation. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/replication/logical/slotsync.c:543`。探针覆盖的操作是：等待分配或释放复制槽。LWLockAcquire 无法立即取得显示为 ReplicationSlotAllocation 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ReplicationSlotAllocation","title_zh":"正在等待 LWLock/ReplicationSlotAllocation 的会话","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 = 'LWLock'\n  AND wait_event = 'ReplicationSlotAllocation'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ReplicationSlotAllocation'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/slotsync.c","line":543,"kind":"resource_path","status":"dynamic_trigger","symbol":"ReplicationSlotAllocation","excerpt":"LWLockAcquire(ReplicationSlotAllocationLock, LW_EXCLUSIVE);","grep_pattern":"ReplicationSlotAllocation","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/slotsync.c#L543"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":341,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ReplicationSlotAllocation","excerpt":"ReplicationSlotAllocation\t\"Waiting to allocate or free a replication slot.\"","grep_pattern":"ReplicationSlotAllocation","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L341"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-replication-slot-control","type":"LWLock","name":"ReplicationSlotControl","slug":"replication-slot-control","url":"/lwlock/replication-slot-control/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update replication slot state.","14":"Waiting to read or update replication slot state.","15":"Waiting to read or update replication slot state.","16":"Waiting to read or update replication slot state.","17":"Waiting to read or update replication slot state","18":"Waiting to read or update replication slot state"},"official_description_zh":"等待读取或更新复制槽状态。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/replication/logical/logical.c:492`. The instrumented operation is: Waiting to read or update replication slot state. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ReplicationSlotControl. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/replication/logical/logical.c:492`。探针覆盖的操作是：等待读取或更新复制槽状态。LWLockAcquire 无法立即取得显示为 ReplicationSlotControl 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ReplicationSlotControl","title_zh":"正在等待 LWLock/ReplicationSlotControl 的会话","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 = 'LWLock'\n  AND wait_event = 'ReplicationSlotControl'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ReplicationSlotControl'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/logical/logical.c","line":492,"kind":"resource_path","status":"dynamic_trigger","symbol":"ReplicationSlotControl","excerpt":"LWLockAcquire(ReplicationSlotControlLock, LW_EXCLUSIVE);","grep_pattern":"ReplicationSlotControl","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/logical/logical.c#L492"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":342,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ReplicationSlotControl","excerpt":"ReplicationSlotControl\t\"Waiting to read or update replication slot state.\"","grep_pattern":"ReplicationSlotControl","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L342"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-replication-slot-io","type":"LWLock","name":"ReplicationSlotIO","slug":"replication-slot-io","url":"/lwlock/replication-slot-io/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for I/O on a replication slot.","14":"Waiting for I/O on a replication slot.","15":"Waiting for I/O on a replication slot.","16":"Waiting for I/O on a replication slot.","17":"Waiting for I/O on a replication slot","18":"Waiting for I/O on a replication slot"},"official_description_zh":"等待复制槽上的 I/O。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:150`. The instrumented operation is: Waiting for I/O on a replication slot. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ReplicationSlotIO. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:150`。探针覆盖的操作是：等待复制槽上的 I/O。LWLockAcquire 无法立即取得显示为 ReplicationSlotIO 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ReplicationSlotIO","title_zh":"正在等待 LWLock/ReplicationSlotIO 的会话","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 = 'LWLock'\n  AND wait_event = 'ReplicationSlotIO'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ReplicationSlotIO'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":150,"kind":"resource_path","status":"dynamic_trigger","symbol":"ReplicationSlotIO","excerpt":"[LWTRANCHE_REPLICATION_SLOT_IO] = \"ReplicationSlotIO\",","grep_pattern":"ReplicationSlotIO","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L150"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":375,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ReplicationSlotIO","excerpt":"ReplicationSlotIO\t\"Waiting for I/O on a replication slot.\"","grep_pattern":"ReplicationSlotIO","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L375"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-s-inval-read","type":"LWLock","name":"SInvalRead","slug":"s-inval-read","url":"/lwlock/s-inval-read/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to retrieve messages from the shared catalog invalidation queue.","14":"Waiting to retrieve messages from the shared catalog invalidation queue.","15":"Waiting to retrieve messages from the shared catalog invalidation queue.","16":"Waiting to retrieve messages from the shared catalog invalidation queue.","17":"Waiting to retrieve messages from the shared catalog invalidation queue","18":"Waiting to retrieve messages from the shared catalog invalidation queue"},"official_description_zh":"等待从共享系统目录失效队列中取出消息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/ipc/sinvaladt.c:497`. The instrumented operation is: Waiting to retrieve messages from the shared catalog invalidation queue. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SInvalRead. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/ipc/sinvaladt.c:497`。探针覆盖的操作是：等待从共享系统目录失效队列中取出消息。LWLockAcquire 无法立即取得显示为 SInvalRead 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SInvalRead","title_zh":"正在等待 LWLock/SInvalRead 的会话","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 = 'LWLock'\n  AND wait_event = 'SInvalRead'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SInvalRead'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/sinvaladt.c","line":497,"kind":"resource_path","status":"dynamic_trigger","symbol":"SInvalRead","excerpt":"LWLockAcquire(SInvalReadLock, LW_SHARED);","grep_pattern":"SInvalRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/sinvaladt.c#L497"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":317,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SInvalRead","excerpt":"SInvalRead\t\"Waiting to retrieve messages from the shared catalog invalidation queue.\"","grep_pattern":"SInvalRead","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L317"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-s-inval-write","type":"LWLock","name":"SInvalWrite","slug":"s-inval-write","url":"/lwlock/s-inval-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to add a message to the shared catalog invalidation queue.","14":"Waiting to add a message to the shared catalog invalidation queue.","15":"Waiting to add a message to the shared catalog invalidation queue.","16":"Waiting to add a message to the shared catalog invalidation queue.","17":"Waiting to add a message to the shared catalog invalidation queue","18":"Waiting to add a message to the shared catalog invalidation queue"},"official_description_zh":"等待向共享系统目录失效队列中添加消息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/ipc/sinvaladt.c:290`. The instrumented operation is: Waiting to add a message to the shared catalog invalidation queue. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SInvalWrite. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/ipc/sinvaladt.c:290`。探针覆盖的操作是：等待向共享系统目录失效队列中添加消息。LWLockAcquire 无法立即取得显示为 SInvalWrite 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SInvalWrite","title_zh":"正在等待 LWLock/SInvalWrite 的会话","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 = 'LWLock'\n  AND wait_event = 'SInvalWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SInvalWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/sinvaladt.c","line":290,"kind":"resource_path","status":"dynamic_trigger","symbol":"SInvalWrite","excerpt":"LWLockAcquire(SInvalWriteLock, LW_EXCLUSIVE);","grep_pattern":"SInvalWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/sinvaladt.c#L290"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":318,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SInvalWrite","excerpt":"SInvalWrite\t\"Waiting to add a message to the shared catalog invalidation queue.\"","grep_pattern":"SInvalWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L318"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-serial-buffer","type":"LWLock","name":"SerialBuffer","slug":"serial-buffer","url":"/lwlock/serial-buffer/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for I/O on a serializable transaction conflict SLRU buffer.","14":"Waiting for I/O on a serializable transaction conflict SLRU buffer.","15":"Waiting for I/O on a serializable transaction conflict SLRU buffer.","16":"Waiting for I/O on a serializable transaction conflict SLRU buffer.","17":"Waiting for I/O on a serializable transaction conflict SLRU buffer","18":"Waiting for I/O on a serializable transaction conflict SLRU buffer"},"official_description_zh":"等待可串行化事务冲突 SLRU buffer 上的 I/O。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:146`. The instrumented operation is: Waiting for I/O on a serializable transaction conflict SLRU buffer. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SerialBuffer. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:146`。探针覆盖的操作是：等待可串行化事务冲突 SLRU buffer 上的 I/O。LWLockAcquire 无法立即取得显示为 SerialBuffer 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SerialBuffer","title_zh":"正在等待 LWLock/SerialBuffer 的会话","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 = 'LWLock'\n  AND wait_event = 'SerialBuffer'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SerialBuffer'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":146,"kind":"resource_path","status":"dynamic_trigger","symbol":"SerialBuffer","excerpt":"[LWTRANCHE_SERIAL_BUFFER] = \"SerialBuffer\",","grep_pattern":"SerialBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L146"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":371,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SerialBuffer","excerpt":"SerialBuffer\t\"Waiting for I/O on a serializable transaction conflict SLRU buffer.\"","grep_pattern":"SerialBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L371"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-serial-control","type":"LWLock","name":"SerialControl","slug":"serial-control","url":"/lwlock/serial-control/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting to read or update shared pg_serial state","18":"Waiting to read or update shared pg_serial state"},"official_description_zh":"等待读取或更新共享的 pg_serial 状态。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/predicate.c:835`. The instrumented operation is: Waiting to read or update shared pg_serial state. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SerialControl. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/predicate.c:835`。探针覆盖的操作是：等待读取或更新共享的 pg_serial 状态。LWLockAcquire 无法立即取得显示为 SerialControl 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SerialControl","title_zh":"正在等待 LWLock/SerialControl 的会话","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 = 'LWLock'\n  AND wait_event = 'SerialControl'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SerialControl'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/predicate.c","line":835,"kind":"resource_path","status":"dynamic_trigger","symbol":"SerialControl","excerpt":"LWLockAcquire(SerialControlLock, LW_EXCLUSIVE);","grep_pattern":"SerialControl","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/predicate.c#L835"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":354,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SerialControl","excerpt":"SerialControl\t\"Waiting to read or update shared <filename>pg_serial</filename> state.\"","grep_pattern":"SerialControl","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L354"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-serial-slru","type":"LWLock","name":"SerialSLRU","slug":"serial-slru","url":"/lwlock/serial-slru/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the serializable transaction conflict SLRU cache.","14":"Waiting to access the serializable transaction conflict SLRU cache.","15":"Waiting to access the serializable transaction conflict SLRU cache.","16":"Waiting to access the serializable transaction conflict SLRU cache.","17":"Waiting to access the serializable transaction conflict SLRU cache","18":"Waiting to access the serializable transaction conflict SLRU cache"},"official_description_zh":"等待访问可串行化事务冲突 SLRU 缓存。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:176`. The instrumented operation is: Waiting to access the serializable transaction conflict SLRU cache. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SerialSLRU. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:176`。探针覆盖的操作是：等待访问可串行化事务冲突 SLRU 缓存。LWLockAcquire 无法立即取得显示为 SerialSLRU 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SerialSLRU","title_zh":"正在等待 LWLock/SerialSLRU 的会话","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 = 'LWLock'\n  AND wait_event = 'SerialSLRU'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SerialSLRU'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":176,"kind":"resource_path","status":"dynamic_trigger","symbol":"SerialSLRU","excerpt":"[LWTRANCHE_SERIAL_SLRU] = \"SerialSLRU\",","grep_pattern":"SerialSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L176"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":401,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SerialSLRU","excerpt":"SerialSLRU\t\"Waiting to access the serializable transaction conflict SLRU cache.\"","grep_pattern":"SerialSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L401"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-serializable-finished-list","type":"LWLock","name":"SerializableFinishedList","slug":"serializable-finished-list","url":"/lwlock/serializable-finished-list/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the list of finished serializable transactions.","14":"Waiting to access the list of finished serializable transactions.","15":"Waiting to access the list of finished serializable transactions.","16":"Waiting to access the list of finished serializable transactions.","17":"Waiting to access the list of finished serializable transactions","18":"Waiting to access the list of finished serializable transactions"},"official_description_zh":"等待访问已结束的可串行化事务列表。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/predicate.c:1507`. The instrumented operation is: Waiting to access the list of finished serializable transactions. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SerializableFinishedList. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/predicate.c:1507`。探针覆盖的操作是：等待访问已结束的可串行化事务列表。LWLockAcquire 无法立即取得显示为 SerializableFinishedList 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SerializableFinishedList","title_zh":"正在等待 LWLock/SerializableFinishedList 的会话","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 = 'LWLock'\n  AND wait_event = 'SerializableFinishedList'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SerializableFinishedList'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/predicate.c","line":1507,"kind":"resource_path","status":"dynamic_trigger","symbol":"SerializableFinishedList","excerpt":"LWLockAcquire(SerializableFinishedListLock, LW_EXCLUSIVE);","grep_pattern":"SerializableFinishedList","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/predicate.c#L1507"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":335,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SerializableFinishedList","excerpt":"SerializableFinishedList\t\"Waiting to access the list of finished serializable transactions.\"","grep_pattern":"SerializableFinishedList","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L335"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-serializable-predicate-list","type":"LWLock","name":"SerializablePredicateList","slug":"serializable-predicate-list","url":"/lwlock/serializable-predicate-list/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the list of predicate locks held by serializable transactions.","14":"Waiting to access the list of predicate locks held by serializable transactions.","15":"Waiting to access the list of predicate locks held by serializable transactions.","16":"Waiting to access the list of predicate locks held by serializable transactions.","17":"Waiting to access the list of predicate locks held by serializable transactions","18":"Waiting to access the list of predicate locks held by serializable transactions"},"official_description_zh":"等待访问可串行化事务所持有的谓词锁列表。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/predicate.c:2220`. The instrumented operation is: Waiting to access the list of predicate locks held by serializable transactions. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SerializablePredicateList. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/predicate.c:2220`。探针覆盖的操作是：等待访问可串行化事务所持有的谓词锁列表。LWLockAcquire 无法立即取得显示为 SerializablePredicateList 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SerializablePredicateList","title_zh":"正在等待 LWLock/SerializablePredicateList 的会话","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 = 'LWLock'\n  AND wait_event = 'SerializablePredicateList'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SerializablePredicateList'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/predicate.c","line":2220,"kind":"resource_path","status":"dynamic_trigger","symbol":"SerializablePredicateList","excerpt":"LWLockAcquire(SerializablePredicateListLock, LW_SHARED);","grep_pattern":"SerializablePredicateList","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/predicate.c#L2220"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":336,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SerializablePredicateList","excerpt":"SerializablePredicateList\t\"Waiting to access the list of predicate locks held by serializable transactions.\"","grep_pattern":"SerializablePredicateList","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L336"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-serializable-xact-hash","type":"LWLock","name":"SerializableXactHash","slug":"serializable-xact-hash","url":"/lwlock/serializable-xact-hash/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update information about serializable transactions.","14":"Waiting to read or update information about serializable transactions.","15":"Waiting to read or update information about serializable transactions.","16":"Waiting to read or update information about serializable transactions.","17":"Waiting to read or update information about serializable transactions","18":"Waiting to read or update information about serializable transactions"},"official_description_zh":"等待读取或更新可串行化事务的信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/predicate.c:1462`. The instrumented operation is: Waiting to read or update information about serializable transactions. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SerializableXactHash. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/predicate.c:1462`。探针覆盖的操作是：等待读取或更新可串行化事务的信息。LWLockAcquire 无法立即取得显示为 SerializableXactHash 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SerializableXactHash","title_zh":"正在等待 LWLock/SerializableXactHash 的会话","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 = 'LWLock'\n  AND wait_event = 'SerializableXactHash'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SerializableXactHash'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/predicate.c","line":1462,"kind":"resource_path","status":"dynamic_trigger","symbol":"SerializableXactHash","excerpt":"LWLockAcquire(SerializableXactHashLock, LW_SHARED);","grep_pattern":"SerializableXactHash","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/predicate.c#L1462"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":334,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SerializableXactHash","excerpt":"SerializableXactHash\t\"Waiting to read or update information about serializable transactions.\"","grep_pattern":"SerializableXactHash","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L334"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_freeze_max_age","vacuum_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-shared-tid-bitmap","type":"LWLock","name":"SharedTidBitmap","slug":"shared-tid-bitmap","url":"/lwlock/shared-tid-bitmap/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access a shared TID bitmap during a parallel bitmap index scan.","14":"Waiting to access a shared TID bitmap during a parallel bitmap index scan.","15":"Waiting to access a shared TID bitmap during a parallel bitmap index scan.","16":"Waiting to access a shared TID bitmap during a parallel bitmap index scan.","17":"Waiting to access a shared TID bitmap during a parallel bitmap index scan","18":"Waiting to access a shared TID bitmap during a parallel bitmap index scan"},"official_description_zh":"并行 bitmap index scan 期间，等待访问共享 TID bitmap。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:162`. The instrumented operation is: Waiting to access a shared TID bitmap during a parallel bitmap index scan. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SharedTidBitmap. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:162`。探针覆盖的操作是：并行 bitmap index scan 期间，等待访问共享 TID bitmap。LWLockAcquire 无法立即取得显示为 SharedTidBitmap 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SharedTidBitmap","title_zh":"正在等待 LWLock/SharedTidBitmap 的会话","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 = 'LWLock'\n  AND wait_event = 'SharedTidBitmap'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SharedTidBitmap'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":162,"kind":"resource_path","status":"dynamic_trigger","symbol":"SharedTidBitmap","excerpt":"[LWTRANCHE_SHARED_TIDBITMAP] = \"SharedTidBitmap\",","grep_pattern":"SharedTidBitmap","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L162"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":387,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SharedTidBitmap","excerpt":"SharedTidBitmap\t\"Waiting to access a shared TID bitmap during a parallel bitmap index scan.\"","grep_pattern":"SharedTidBitmap","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L387"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-shared-tuple-store","type":"LWLock","name":"SharedTupleStore","slug":"shared-tuple-store","url":"/lwlock/shared-tuple-store/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access a shared tuple store during parallel query.","14":"Waiting to access a shared tuple store during parallel query.","15":"Waiting to access a shared tuple store during parallel query.","16":"Waiting to access a shared tuple store during parallel query.","17":"Waiting to access a shared tuple store during parallel query","18":"Waiting to access a shared tuple store during parallel query"},"official_description_zh":"并行查询期间，等待访问共享 tuple store。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:161`. The instrumented operation is: Waiting to access a shared tuple store during parallel query. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SharedTupleStore. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:161`。探针覆盖的操作是：并行查询期间，等待访问共享 tuple store。LWLockAcquire 无法立即取得显示为 SharedTupleStore 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SharedTupleStore","title_zh":"正在等待 LWLock/SharedTupleStore 的会话","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 = 'LWLock'\n  AND wait_event = 'SharedTupleStore'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SharedTupleStore'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":161,"kind":"resource_path","status":"dynamic_trigger","symbol":"SharedTupleStore","excerpt":"[LWTRANCHE_SHARED_TUPLESTORE] = \"SharedTupleStore\",","grep_pattern":"SharedTupleStore","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L161"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":386,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SharedTupleStore","excerpt":"SharedTupleStore\t\"Waiting to access a shared tuple store during parallel query.\"","grep_pattern":"SharedTupleStore","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L386"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-shmem-index","type":"LWLock","name":"ShmemIndex","slug":"shmem-index","url":"/lwlock/shmem-index/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to find or allocate space in shared memory.","14":"Waiting to find or allocate space in shared memory.","15":"Waiting to find or allocate space in shared memory.","16":"Waiting to find or allocate space in shared memory.","17":"Waiting to find or allocate space in shared memory","18":"Waiting to find or allocate space in shared memory"},"official_description_zh":"等待在共享内存中查找或分配空间。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/ipc/shmem.c:392`. The instrumented operation is: Waiting to find or allocate space in shared memory. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as ShmemIndex. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/ipc/shmem.c:392`。探针覆盖的操作是：等待在共享内存中查找或分配空间。LWLockAcquire 无法立即取得显示为 ShmemIndex 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/ShmemIndex","title_zh":"正在等待 LWLock/ShmemIndex 的会话","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 = 'LWLock'\n  AND wait_event = 'ShmemIndex'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'ShmemIndex'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/ipc/shmem.c","line":392,"kind":"resource_path","status":"dynamic_trigger","symbol":"ShmemIndex","excerpt":"LWLockAcquire(ShmemIndexLock, LW_EXCLUSIVE);","grep_pattern":"ShmemIndex","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/ipc/shmem.c#L392"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":313,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"ShmemIndex","excerpt":"ShmemIndex\t\"Waiting to find or allocate space in shared memory.\"","grep_pattern":"ShmemIndex","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L313"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-subtrans-buffer","type":"LWLock","name":"SubtransBuffer","slug":"subtrans-buffer","url":"/lwlock/subtrans-buffer/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for I/O on a sub-transaction SLRU buffer.","14":"Waiting for I/O on a sub-transaction SLRU buffer.","15":"Waiting for I/O on a sub-transaction SLRU buffer.","16":"Waiting for I/O on a sub-transaction SLRU buffer.","17":"Waiting for I/O on a sub-transaction SLRU buffer","18":"Waiting for I/O on a sub-transaction SLRU buffer"},"official_description_zh":"等待子事务 SLRU buffer 上的 I/O。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:142`. The instrumented operation is: Waiting for I/O on a sub-transaction SLRU buffer. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SubtransBuffer. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:142`。探针覆盖的操作是：等待子事务 SLRU buffer 上的 I/O。LWLockAcquire 无法立即取得显示为 SubtransBuffer 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SubtransBuffer","title_zh":"正在等待 LWLock/SubtransBuffer 的会话","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 = 'LWLock'\n  AND wait_event = 'SubtransBuffer'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SubtransBuffer'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":142,"kind":"resource_path","status":"dynamic_trigger","symbol":"SubtransBuffer","excerpt":"[LWTRANCHE_SUBTRANS_BUFFER] = \"SubtransBuffer\",","grep_pattern":"SubtransBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L142"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":367,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SubtransBuffer","excerpt":"SubtransBuffer\t\"Waiting for I/O on a sub-transaction SLRU buffer.\"","grep_pattern":"SubtransBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L367"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-subtrans-slru","type":"LWLock","name":"SubtransSLRU","slug":"subtrans-slru","url":"/lwlock/subtrans-slru/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the sub-transaction SLRU cache.","14":"Waiting to access the sub-transaction SLRU cache.","15":"Waiting to access the sub-transaction SLRU cache.","16":"Waiting to access the sub-transaction SLRU cache.","17":"Waiting to access the sub-transaction SLRU cache","18":"Waiting to access the sub-transaction SLRU cache"},"official_description_zh":"等待访问子事务 SLRU 缓存。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:177`. The instrumented operation is: Waiting to access the sub-transaction SLRU cache. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SubtransSLRU. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:177`。探针覆盖的操作是：等待访问子事务 SLRU 缓存。LWLockAcquire 无法立即取得显示为 SubtransSLRU 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SubtransSLRU","title_zh":"正在等待 LWLock/SubtransSLRU 的会话","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 = 'LWLock'\n  AND wait_event = 'SubtransSLRU'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SubtransSLRU'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":177,"kind":"resource_path","status":"dynamic_trigger","symbol":"SubtransSLRU","excerpt":"[LWTRANCHE_SUBTRANS_SLRU] = \"SubtransSLRU\",","grep_pattern":"SubtransSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L177"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":402,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SubtransSLRU","excerpt":"SubtransSLRU\t\"Waiting to access the sub-transaction SLRU cache.\"","grep_pattern":"SubtransSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L402"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-sync-rep","type":"LWLock","name":"SyncRep","slug":"sync-rep","url":"/lwlock/sync-rep/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update information about the state of synchronous replication.","14":"Waiting to read or update information about the state of synchronous replication.","15":"Waiting to read or update information about the state of synchronous replication.","16":"Waiting to read or update information about the state of synchronous replication.","17":"Waiting to read or update information about the state of synchronous replication","18":"Waiting to read or update information about the state of synchronous replication"},"official_description_zh":"等待读取或更新同步复制状态信息。","mechanism":{"en":"SyncRepLock protects synchronous-replication queues and shared sender state. Committers enqueue or inspect their wait position while WAL senders update which LSNs the configured synchronous standbys have acknowledged.","zh":"SyncRepLock 保护同步复制队列与共享 sender 状态。提交会话入队或检查等待位置，WAL sender 则更新已被同步备库确认的 LSN。"},"normal":{"en":"Small bursts occur as synchronous commits queue and WAL senders publish acknowledgements.","zh":"同步提交排队、WAL sender 发布确认位置时会有小规模突发。"},"trouble":{"en":"Sustained SyncRep LWLock contention is different from waiting for a standby acknowledgement: it means queue/state coordination itself is hot, usually under extreme commit concurrency or sender churn.","zh":"持续的 SyncRep LWLock 竞争不同于等待备库确认：它表示队列/状态协调本身过热，通常发生在极高提交并发或 sender 抖动时。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SyncRep","title_zh":"正在等待 LWLock/SyncRep 的会话","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 = 'LWLock'\n  AND wait_event = 'SyncRep'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SyncRep'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Separate LWLock/SyncRep from IPC/SyncRep and replication-lag waits.","Inspect synchronous standby health, sender churn, and commit rate.","Stabilize replication and smooth commit bursts; change durability policy only with explicit incident authority."],"zh":["区分 LWLock/SyncRep、IPC/SyncRep 与复制延迟等待。","检查同步备库健康度、sender 抖动与提交速率。","稳定复制并平滑提交突发；只有获得明确事故授权时才改变持久性策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/replication/syncrep.c","line":192,"kind":"resource_path","status":"dynamic_trigger","symbol":"SyncRep","excerpt":"LWLockAcquire(SyncRepLock, LW_EXCLUSIVE);","grep_pattern":"SyncRep","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/replication/syncrep.c#L192"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":337,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SyncRep","excerpt":"SyncRep\t\"Waiting to read or update information about the state of synchronous replication.\"","grep_pattern":"SyncRep","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L337"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["synchronous_standby_names","synchronous_commit","wal_sender_timeout"],"metrics":["waiting_sessions","wait_event_share","replication_flush_lag","commit_latency"],"incident_pattern":{"en":"A standby flaps while a burst of synchronous committers repeatedly enters and leaves the wait queue, making queue coordination visible as LWLock/SyncRep.","zh":"备库反复抖动，大量同步提交者频繁进出等待队列，使队列协调本身表现为 LWLock/SyncRep。"}}
{"schema_version":1,"record_kind":"event","id":"lwlock-sync-scan","type":"LWLock","name":"SyncScan","slug":"sync-scan","url":"/lwlock/sync-scan/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to select the starting location of a synchronized table scan.","14":"Waiting to select the starting location of a synchronized table scan.","15":"Waiting to select the starting location of a synchronized table scan.","16":"Waiting to select the starting location of a synchronized table scan.","17":"Waiting to select the starting location of a synchronized table scan","18":"Waiting to select the starting location of a synchronized table scan"},"official_description_zh":"等待选择同步表扫描的起始位置。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/access/common/syncscan.c:258`. The instrumented operation is: Waiting to select the starting location of a synchronized table scan. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as SyncScan. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/common/syncscan.c:258`。探针覆盖的操作是：等待选择同步表扫描的起始位置。LWLockAcquire 无法立即取得显示为 SyncScan 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/SyncScan","title_zh":"正在等待 LWLock/SyncScan 的会话","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 = 'LWLock'\n  AND wait_event = 'SyncScan'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'SyncScan'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/common/syncscan.c","line":258,"kind":"resource_path","status":"dynamic_trigger","symbol":"SyncScan","excerpt":"LWLockAcquire(SyncScanLock, LW_EXCLUSIVE);","grep_pattern":"SyncScan","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/common/syncscan.c#L258"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":331,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"SyncScan","excerpt":"SyncScan\t\"Waiting to select the starting location of a synchronized table scan.\"","grep_pattern":"SyncScan","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L331"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-tablespace-create","type":"LWLock","name":"TablespaceCreate","slug":"tablespace-create","url":"/lwlock/tablespace-create/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to create or drop a tablespace.","14":"Waiting to create or drop a tablespace.","15":"Waiting to create or drop a tablespace.","16":"Waiting to create or drop a tablespace.","17":"Waiting to create or drop a tablespace","18":"Waiting to create or drop a tablespace"},"official_description_zh":"等待创建或删除表空间。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/commands/tablespace.c:138`. The instrumented operation is: Waiting to create or drop a tablespace. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as TablespaceCreate. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/commands/tablespace.c:138`。探针覆盖的操作是：等待创建或删除表空间。LWLockAcquire 无法立即取得显示为 TablespaceCreate 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/TablespaceCreate","title_zh":"正在等待 LWLock/TablespaceCreate 的会话","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 = 'LWLock'\n  AND wait_event = 'TablespaceCreate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'TablespaceCreate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/commands/tablespace.c","line":138,"kind":"resource_path","status":"dynamic_trigger","symbol":"TablespaceCreate","excerpt":"LWLockAcquire(TablespaceCreateLock, LW_EXCLUSIVE);","grep_pattern":"TablespaceCreate","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/commands/tablespace.c#L138"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":326,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"TablespaceCreate","excerpt":"TablespaceCreate\t\"Waiting to create or drop a tablespace.\"","grep_pattern":"TablespaceCreate","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L326"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-two-phase-state","type":"LWLock","name":"TwoPhaseState","slug":"two-phase-state","url":"/lwlock/two-phase-state/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to read or update the state of prepared transactions.","14":"Waiting to read or update the state of prepared transactions.","15":"Waiting to read or update the state of prepared transactions.","16":"Waiting to read or update the state of prepared transactions.","17":"Waiting to read or update the state of prepared transactions","18":"Waiting to read or update the state of prepared transactions"},"official_description_zh":"等待读取或更新预备事务的状态。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/access/transam/twophase.c:329`. The instrumented operation is: Waiting to read or update the state of prepared transactions. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as TwoPhaseState. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/transam/twophase.c:329`。探针覆盖的操作是：等待读取或更新预备事务的状态。LWLockAcquire 无法立即取得显示为 TwoPhaseState 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/TwoPhaseState","title_zh":"正在等待 LWLock/TwoPhaseState 的会话","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 = 'LWLock'\n  AND wait_event = 'TwoPhaseState'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'TwoPhaseState'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/twophase.c","line":329,"kind":"resource_path","status":"dynamic_trigger","symbol":"TwoPhaseState","excerpt":"LWLockAcquire(TwoPhaseStateLock, LW_EXCLUSIVE);","grep_pattern":"TwoPhaseState","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/twophase.c#L329"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":325,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"TwoPhaseState","excerpt":"TwoPhaseState\t\"Waiting to read or update the state of prepared transactions.\"","grep_pattern":"TwoPhaseState","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L325"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-wal-buf-mapping","type":"LWLock","name":"WALBufMapping","slug":"wal-buf-mapping","url":"/lwlock/wal-buf-mapping/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to replace a page in WAL buffers.","14":"Waiting to replace a page in WAL buffers.","15":"Waiting to replace a page in WAL buffers.","16":"Waiting to replace a page in WAL buffers.","17":"Waiting to replace a page in WAL buffers","18":"Waiting to replace a page in WAL buffers"},"official_description_zh":"等待替换 WAL buffer 中的页面。","mechanism":{"en":"WALBufMappingLock coordinates the mapping between WAL page numbers and the finite wal_buffers slots. A backend needs it when advancing to or replacing a WAL buffer page.","zh":"WALBufMappingLock 协调 WAL 页号与有限 wal_buffers 槽位之间的映射。后端推进到新 WAL 页或替换缓冲页时需要取得此锁。"},"normal":{"en":"Short waits appear as WAL generation advances through buffer pages.","zh":"WAL 生成推进并跨越缓冲页时会短暂出现。"},"trouble":{"en":"Sustained contention suggests WAL generation is turning over buffers faster than the write path advances, often during write bursts or checkpoints.","zh":"持续竞争说明 WAL 生成换页速度超过写路径推进速度，常见于写突发或检查点期间。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/WALBufMapping","title_zh":"正在等待 LWLock/WALBufMapping 的会话","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 = 'LWLock'\n  AND wait_event = 'WALBufMapping'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'WALBufMapping'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Correlate with WAL bytes, WAL writes, and checkpoint timing.","Check whether wal_buffers is repeatedly exhausted during bursts.","Smooth write bursts and fix WAL device latency before tuning buffer size."],"zh":["关联 WAL 字节量、WAL 写入与检查点时间。","检查写突发期间 wal_buffers 是否反复耗尽。","先平滑写突发并解决 WAL 设备延迟，再调整缓冲区大小。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":1999,"kind":"resource_path","status":"dynamic_trigger","symbol":"WALBufMapping","excerpt":"LWLockAcquire(WALBufMappingLock, LW_EXCLUSIVE);","grep_pattern":"WALBufMapping","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L1999"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":319,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"WALBufMapping","excerpt":"WALBufMapping\t\"Waiting to replace a page in WAL buffers.\"","grep_pattern":"WALBufMapping","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L319"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"A bulk load saturates WAL generation while the WAL device stalls, forcing frequent WAL buffer remapping.","zh":"批量导入把 WAL 生成推到极限，同时 WAL 设备发生停顿，导致频繁的 WAL 缓冲页重映射。"}}
{"schema_version":1,"record_kind":"event","id":"lwlock-wal-insert","type":"LWLock","name":"WALInsert","slug":"wal-insert","url":"/lwlock/wal-insert/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to insert WAL data into a memory buffer.","14":"Waiting to insert WAL data into a memory buffer.","15":"Waiting to insert WAL data into a memory buffer.","16":"Waiting to insert WAL data into a memory buffer.","17":"Waiting to insert WAL data into a memory buffer","18":"Waiting to insert WAL data into a memory buffer"},"official_description_zh":"等待将 WAL 数据插入内存 buffer。","mechanism":{"en":"A backend must hold one of the WAL insertion locks while reserving and copying a WAL record into shared WAL buffers. High concurrent WAL producers can queue when insertion critical sections lengthen.","zh":"后端在共享 WAL 缓冲区中预留空间并复制 WAL 记录时，必须持有一个 WAL insertion lock。并发 WAL 生产者很多、插入临界区变长时，会在此排队。"},"normal":{"en":"Transient waits are normal during concurrent writes and commit bursts.","zh":"并发写入与提交突发期间的瞬时等待很正常。"},"trouble":{"en":"A recurring foreground pile-up indicates WAL insertion has become a serialization point, often with very high write concurrency, full-page images, or slow buffer turnover.","zh":"前台会话反复堆积说明 WAL 插入已成为串行点，常伴随极高写并发、全页镜像或缓冲区换页过慢。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/WALInsert","title_zh":"正在等待 LWLock/WALInsert 的会话","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 = 'LWLock'\n  AND wait_event = 'WALInsert'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'WALInsert'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Rank statements by WAL generation and call rate.","Check checkpoint/full-page-image timing and concurrent writer count.","Batch tiny writes, reduce needless index churn, and address WAL write latency."],"zh":["按 WAL 生成量与调用频率排序语句。","检查检查点/全页镜像时机与并发写会话数量。","批量合并微小写入、减少无效索引抖动，并处理 WAL 写延迟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":1399,"kind":"resource_path","status":"dynamic_trigger","symbol":"WALInsert","excerpt":"immed = LWLockAcquire(&WALInsertLocks[MyLockNo].l.lock, LW_EXCLUSIVE);","grep_pattern":"WALInsert","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L1399"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":372,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"WALInsert","excerpt":"WALInsert\t\"Waiting to insert WAL data into a memory buffer.\"","grep_pattern":"WALInsert","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L372"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","full_page_writes","checkpoint_timeout"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_fpi","statement_wal_bytes"],"incident_pattern":{"en":"A fan-out job issues many single-row commits immediately after a checkpoint; full-page images and writer concurrency turn WAL insertion into the bottleneck.","zh":"扇出任务在检查点后立即发起大量单行提交，全页镜像与写并发共同让 WAL 插入成为瓶颈。"}}
{"schema_version":1,"record_kind":"event","id":"lwlock-wal-summarizer","type":"LWLock","name":"WALSummarizer","slug":"wal-summarizer","url":"/lwlock/wal-summarizer/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting to read or update WAL summarization state","18":"Waiting to read or update WAL summarization state"},"official_description_zh":"等待读取或更新 WAL 汇总状态。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/postmaster/walsummarizer.c:273`. The instrumented operation is: Waiting to read or update WAL summarization state. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as WALSummarizer. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/postmaster/walsummarizer.c:273`。探针覆盖的操作是：等待读取或更新 WAL 汇总状态。LWLockAcquire 无法立即取得显示为 WALSummarizer 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/WALSummarizer","title_zh":"正在等待 LWLock/WALSummarizer 的会话","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 = 'LWLock'\n  AND wait_event = 'WALSummarizer'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'WALSummarizer'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/walsummarizer.c","line":273,"kind":"resource_path","status":"dynamic_trigger","symbol":"WALSummarizer","excerpt":"LWLockAcquire(WALSummarizerLock, LW_EXCLUSIVE);","grep_pattern":"WALSummarizer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/walsummarizer.c#L273"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":351,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"WALSummarizer","excerpt":"WALSummarizer\t\"Waiting to read or update WAL summarization state.\"","grep_pattern":"WALSummarizer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L351"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-wal-write","type":"LWLock","name":"WALWrite","slug":"wal-write","url":"/lwlock/wal-write/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for WAL buffers to be written to disk.","14":"Waiting for WAL buffers to be written to disk.","15":"Waiting for WAL buffers to be written to disk.","16":"Waiting for WAL buffers to be written to disk.","17":"Waiting for WAL buffers to be written to disk","18":"Waiting for WAL buffers to be written to disk"},"official_description_zh":"等待将 WAL buffer 写入磁盘。","mechanism":{"en":"WALWriteLock serializes progress that writes shared WAL buffers and advances the written/flushed WAL positions. A waiter is queued behind the backend currently performing or coordinating that work.","zh":"WALWriteLock 串行化共享 WAL 缓冲区写入，以及 written/flushed 位置的推进。等待者正在当前执行或协调这项工作的后端之后排队。"},"normal":{"en":"Brief waits occur when concurrent committers help write WAL.","zh":"多个提交者协助写 WAL 时会短暂出现。"},"trouble":{"en":"Sustained WALWrite with commit latency usually means the WAL write path is slow or cannot absorb the generated WAL rate.","zh":"WALWrite 持续出现且提交延迟上升，通常表示 WAL 写路径变慢，或吞吐跟不上 WAL 生成速度。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/WALWrite","title_zh":"正在等待 LWLock/WALWrite 的会话","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 = 'LWLock'\n  AND wait_event = 'WALWrite'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'WALWrite'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Compare WAL write and sync time with commit latency.","Check the WAL filesystem/device, virtualization throttling, and checkpoint overlap.","Reduce burstiness; tune wal_writer settings only after storage evidence confirms the path."],"zh":["把 WAL write/sync 时间与提交延迟对照。","检查 WAL 文件系统/设备、虚拟化限速与检查点重叠。","降低突发性；只有存储证据确认后才调整 wal_writer 参数。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlog.c","line":2047,"kind":"resource_path","status":"dynamic_trigger","symbol":"WALWrite","excerpt":"LWLockAcquire(WALWriteLock, LW_EXCLUSIVE);","grep_pattern":"WALWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlog.c#L2047"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":320,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"WALWrite","excerpt":"WALWrite\t\"Waiting for WAL buffers to be written to disk.\"","grep_pattern":"WALWrite","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L320"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_writer_delay","wal_writer_flush_after","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_write_time","wal_sync_time","commit_latency"],"incident_pattern":{"en":"A cloud volume hits its burst-credit ceiling; WAL writes lengthen, committers queue on WALWrite, and synchronous commits slow together.","zh":"云盘耗尽突发积分，WAL 写入变长，提交会话在 WALWrite 上排队，同步提交延迟同步恶化。"}}
{"schema_version":1,"record_kind":"event","id":"lwlock-wait-event-custom","type":"LWLock","name":"WaitEventCustom","slug":"wait-event-custom","url":"/lwlock/wait-event-custom/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting to read or update custom wait events information","18":"Waiting to read or update custom wait events information"},"official_description_zh":"等待读取或更新自定义等待事件信息。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event.c:193`. The instrumented operation is: Waiting to read or update custom wait events information. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as WaitEventCustom. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event.c:193`。探针覆盖的操作是：等待读取或更新自定义等待事件信息。LWLockAcquire 无法立即取得显示为 WaitEventCustom 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/WaitEventCustom","title_zh":"正在等待 LWLock/WaitEventCustom 的会话","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 = 'LWLock'\n  AND wait_event = 'WaitEventCustom'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'WaitEventCustom'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event.c","line":193,"kind":"resource_path","status":"dynamic_trigger","symbol":"WaitEventCustom","excerpt":"LWLockAcquire(WaitEventCustomLock, LW_SHARED);","grep_pattern":"WaitEventCustom","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event.c#L193"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":350,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"WaitEventCustom","excerpt":"WaitEventCustom\t\"Waiting to read or update custom wait events information.\"","grep_pattern":"WaitEventCustom","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L350"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-wrap-limits-vacuum","type":"LWLock","name":"WrapLimitsVacuum","slug":"wrap-limits-vacuum","url":"/lwlock/wrap-limits-vacuum/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to update limits on transaction id and multixact consumption.","14":"Waiting to update limits on transaction id and multixact consumption.","15":"Waiting to update limits on transaction id and multixact consumption.","16":"Waiting to update limits on transaction id and multixact consumption.","17":"Waiting to update limits on transaction id and multixact consumption","18":"Waiting to update limits on transaction id and multixact consumption"},"official_description_zh":"等待更新事务 ID 和 multixact 的消耗上限。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/commands/vacuum.c:1858`. The instrumented operation is: Waiting to update limits on transaction id and multixact consumption. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as WrapLimitsVacuum. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/commands/vacuum.c:1858`。探针覆盖的操作是：等待更新事务 ID 和 multixact 的消耗上限。LWLockAcquire 无法立即取得显示为 WrapLimitsVacuum 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/WrapLimitsVacuum","title_zh":"正在等待 LWLock/WrapLimitsVacuum 的会话","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 = 'LWLock'\n  AND wait_event = 'WrapLimitsVacuum'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'WrapLimitsVacuum'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/commands/vacuum.c","line":1858,"kind":"resource_path","status":"dynamic_trigger","symbol":"WrapLimitsVacuum","excerpt":"LWLockAcquire(WrapLimitsVacuumLock, LW_EXCLUSIVE);","grep_pattern":"WrapLimitsVacuum","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/commands/vacuum.c#L1858"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":348,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"WrapLimitsVacuum","excerpt":"WrapLimitsVacuum\t\"Waiting to update limits on transaction id and multixact consumption.\"","grep_pattern":"WrapLimitsVacuum","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L348"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_naptime"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-xact-buffer","type":"LWLock","name":"XactBuffer","slug":"xact-buffer","url":"/lwlock/xact-buffer/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting for I/O on a transaction status SLRU buffer.","14":"Waiting for I/O on a transaction status SLRU buffer.","15":"Waiting for I/O on a transaction status SLRU buffer.","16":"Waiting for I/O on a transaction status SLRU buffer.","17":"Waiting for I/O on a transaction status SLRU buffer","18":"Waiting for I/O on a transaction status SLRU buffer"},"official_description_zh":"等待事务状态 SLRU buffer 上的 I/O。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/storage/lmgr/lwlock.c:140`. The instrumented operation is: Waiting for I/O on a transaction status SLRU buffer. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as XactBuffer. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/storage/lmgr/lwlock.c:140`。探针覆盖的操作是：等待事务状态 SLRU buffer 上的 I/O。LWLockAcquire 无法立即取得显示为 XactBuffer 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/XactBuffer","title_zh":"正在等待 LWLock/XactBuffer 的会话","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 = 'LWLock'\n  AND wait_event = 'XactBuffer'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'XactBuffer'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":140,"kind":"resource_path","status":"dynamic_trigger","symbol":"XactBuffer","excerpt":"[LWTRANCHE_XACT_BUFFER] = \"XactBuffer\",","grep_pattern":"XactBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L140"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":365,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"XactBuffer","excerpt":"XactBuffer\t\"Waiting for I/O on a transaction status SLRU buffer.\"","grep_pattern":"XactBuffer","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L365"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_freeze_max_age","vacuum_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-xact-slru","type":"LWLock","name":"XactSLRU","slug":"xact-slru","url":"/lwlock/xact-slru/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to access the transaction status SLRU cache.","14":"Waiting to access the transaction status SLRU cache.","15":"Waiting to access the transaction status SLRU cache.","16":"Waiting to access the transaction status SLRU cache.","17":"Waiting to access the transaction status SLRU cache","18":"Waiting to access the transaction status SLRU cache"},"official_description_zh":"等待访问事务状态 SLRU 缓存。","mechanism":{"en":"The transaction-status SLRU lock protects pg_xact cache metadata and pages while PostgreSQL reads or updates transaction commit status. Visibility checks for uncached or old XIDs can bring this path into the foreground.","zh":"事务状态 SLRU 锁保护 pg_xact 缓存元数据与页面，PostgreSQL 读取或更新事务提交状态时会经过这里。对未缓存或很老 XID 的可见性检查会把这条路径带到前台。"},"normal":{"en":"Short waits accompany transaction completion and occasional pg_xact cache misses.","zh":"事务结束与偶发 pg_xact 缓存未命中会带来短暂等待。"},"trouble":{"en":"Persistent waits can indicate transaction-status cache churn, access to very old tuples, or storage latency on the pg_xact path.","zh":"持续等待可能表示事务状态缓存抖动、访问很老的元组，或 pg_xact 路径存在存储延迟。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/XactSLRU","title_zh":"正在等待 LWLock/XactSLRU 的会话","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 = 'LWLock'\n  AND wait_event = 'XactSLRU'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'XactSLRU'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Check old transactions and vacuum/freeze health.","Correlate with XactBuffer and pg_xact I/O waits.","Remove visibility-horizon blockers and restore vacuum progress before changing SLRU-related capacity."],"zh":["检查老事务以及 vacuum/freeze 健康度。","关联 XactBuffer 与 pg_xact I/O 等待。","先消除可见性边界阻塞者并恢复清理进度，再考虑容量调整。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":178,"kind":"resource_path","status":"dynamic_trigger","symbol":"XactSLRU","excerpt":"[LWTRANCHE_XACT_SLRU] = \"XactSLRU\",","grep_pattern":"XactSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L178"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":403,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"XactSLRU","excerpt":"XactSLRU\t\"Waiting to access the transaction status SLRU cache.\"","grep_pattern":"XactSLRU","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L403"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_freeze_max_age","vacuum_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age","xact_slru_io"],"incident_pattern":{"en":"A long-lived snapshot prevents cleanup while queries revisit cold, old tuple versions, creating pg_xact cache churn and XactSLRU contention.","zh":"长生命周期快照阻止清理，同时查询反复访问冷的旧元组版本，引发 pg_xact 缓存抖动与 XactSLRU 竞争。"}}
{"schema_version":1,"record_kind":"event","id":"lwlock-xact-truncation","type":"LWLock","name":"XactTruncation","slug":"xact-truncation","url":"/lwlock/xact-truncation/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to execute pg_xact_status or update the oldest transaction ID available to it.","14":"Waiting to execute pg_xact_status or update the oldest transaction ID available to it.","15":"Waiting to execute pg_xact_status or update the oldest transaction ID available to it.","16":"Waiting to execute pg_xact_status or update the oldest transaction ID available to it.","17":"Waiting to execute pg_xact_status or update the oldest transaction ID available to it","18":"Waiting to execute pg_xact_status or update the oldest transaction ID available to it"},"official_description_zh":"等待执行 pg_xact_status，或更新当前进程可用的最旧事务 ID。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/access/transam/varsup.c:357`. The instrumented operation is: Waiting to execute pg_xact_status or update the oldest transaction ID available to it. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as XactTruncation. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/transam/varsup.c:357`。探针覆盖的操作是：等待执行 pg_xact_status，或更新当前进程可用的最旧事务 ID。LWLockAcquire 无法立即取得显示为 XactTruncation 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/XactTruncation","title_zh":"正在等待 LWLock/XactTruncation 的会话","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 = 'LWLock'\n  AND wait_event = 'XactTruncation'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'XactTruncation'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/varsup.c","line":357,"kind":"resource_path","status":"dynamic_trigger","symbol":"XactTruncation","excerpt":"LWLockAcquire(XactTruncationLock, LW_EXCLUSIVE);","grep_pattern":"XactTruncation","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/varsup.c#L357"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":347,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"XactTruncation","excerpt":"XactTruncation\t\"Waiting to execute <function>pg_xact_status</function> or update the oldest transaction ID available to it.\"","grep_pattern":"XactTruncation","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L347"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_freeze_max_age","vacuum_freeze_table_age"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"lwlock-xid-gen","type":"LWLock","name":"XidGen","slug":"xid-gen","url":"/lwlock/xid-gen/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to allocate a new transaction ID.","14":"Waiting to allocate a new transaction ID.","15":"Waiting to allocate a new transaction ID.","16":"Waiting to allocate a new transaction ID.","17":"Waiting to allocate a new transaction ID","18":"Waiting to allocate a new transaction ID"},"official_description_zh":"等待分配新的事务 ID。","mechanism":{"en":"`pgstat_report_wait_start` at `src/backend/storage/lmgr/lwlock.c:739` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/access/transam/varsup.c:105`. The instrumented operation is: Waiting to allocate a new transaction ID. LWLockAcquire could not immediately take the lightweight-lock tranche displayed as XidGen. The generic LWLock reporter publishes the tranche name while the backend sleeps on the internal shared-memory resource.","zh":"`pgstat_report_wait_start` 位于 `src/backend/storage/lmgr/lwlock.c:739`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/access/transam/varsup.c:105`。探针覆盖的操作是：等待分配新的事务 ID。LWLockAcquire 无法立即取得显示为 XidGen 的轻量级锁 tranche；后端在内部共享内存资源上休眠时，通用 LWLock 报告器发布该 tranche 名称。"},"normal":{"en":"A brief sample is normal around short internal critical sections.","zh":"短暂内部临界区周围的零星样本属于正常。"},"trouble":{"en":"Investigate when the same tranche affects at least 10% of active foreground sessions in three consecutive one-second samples; treat 25% or waits beyond five seconds as urgent.","zh":"若同一 tranche 在连续三次一秒采样中影响至少 10% 的活动前台会话，应当调查；达到 25% 或持续超过五秒按紧急处理。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on LWLock/XidGen","title_zh":"正在等待 LWLock/XidGen 的会话","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 = 'LWLock'\n  AND wait_event = 'XidGen'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current LWLock cohort","title_zh":"当前 LWLock 等待分布","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 = 'LWLock'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'LWLock'\n  AND a.wait_event = 'XidGen'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Repeat the snapshot and isolate one hot tranche.","Correlate it with the protected resource and current workload phase.","Reduce the specific contention source; adding concurrency can make a shared-memory hotspot worse."],"zh":["重复采样并锁定一个热点 tranche。","把它与受保护资源及当前负载阶段关联。","降低具体竞争源；增加并发可能让共享内存热点更糟。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/varsup.c","line":105,"kind":"resource_path","status":"dynamic_trigger","symbol":"XidGen","excerpt":"LWLockAcquire(XidGenLock, LW_EXCLUSIVE);","grep_pattern":"XidGen","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/varsup.c#L105"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/lwlock.c","line":739,"kind":"generic_reporter","status":"dynamic_trigger","symbol":"pgstat_report_wait_start","excerpt":"pgstat_report_wait_start(PG_WAIT_LWLOCK | lock->tranche);","grep_pattern":"pgstat_report_wait_start","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/lwlock.c#L739"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":315,"kind":"catalog_definition","status":"dynamic_trigger","symbol":"XidGen","excerpt":"XidGen\t\"Waiting to allocate a new transaction ID.\"","grep_pattern":"XidGen","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L315"}],"source_status":"dynamic_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"timeout-base-backup-throttle","type":"Timeout","name":"BaseBackupThrottle","slug":"base-backup-throttle","url":"/timeout/base-backup-throttle/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting during base backup when throttling activity.","14":"Waiting during base backup when throttling activity.","15":"Waiting during base backup when throttling activity.","16":"Waiting during base backup when throttling activity.","17":"Waiting during base backup when throttling activity","18":"Waiting during base backup when throttling activity"},"official_description_zh":"基础备份期间，因限速而等待。","mechanism":{"en":"`WAIT_EVENT_BASE_BACKUP_THROTTLE` at `src/backend/backup/basebackup_throttle.c:178` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:175`. The instrumented operation is: Waiting during base backup when throttling activity. The BaseBackupThrottle path deliberately waits on a timer, retry interval, throttle, or safety backoff. The latch timeout expires before work is reconsidered.","zh":"`WAIT_EVENT_BASE_BACKUP_THROTTLE` 位于 `src/backend/backup/basebackup_throttle.c:178`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:175`。探针覆盖的操作是：基础备份期间，因限速而等待。BaseBackupThrottle 路径有意等待计时器、重试间隔、节流或安全退避；latch 超时后才重新评估工作。"},"normal":{"en":"The wait is normal when the configured policy is intentional and useful work advances at the expected rate.","zh":"当配置策略是有意的，而且有效工作按预期速率推进时，这项等待正常。"},"trouble":{"en":"Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.","zh":"策略导致维护、恢复、备份或延迟目标无法达成，或者 spin delay 持续时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Timeout/BaseBackupThrottle","title_zh":"正在等待 Timeout/BaseBackupThrottle 的会话","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 = 'Timeout'\n  AND wait_event = 'BaseBackupThrottle'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Timeout cohort","title_zh":"当前 Timeout 等待分布","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 = 'Timeout'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Timeout'\n  AND a.wait_event = 'BaseBackupThrottle'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the GUC or function that owns the timer.","Compare productive work with time spent delayed.","Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control."],"zh":["确认拥有该计时器的 GUC 或函数。","比较有效工作量与延迟时间。","先检查它原本要控制的 CPU、I/O 与持久性压力，再调整策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/backup/basebackup_throttle.c","line":178,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_BASE_BACKUP_THROTTLE","excerpt":"WAIT_EVENT_BASE_BACKUP_THROTTLE);","grep_pattern":"WAIT_EVENT_BASE_BACKUP_THROTTLE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/backup/basebackup_throttle.c#L178"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":175,"kind":"catalog_definition","status":"live_trigger","symbol":"BASE_BACKUP_THROTTLE","excerpt":"BASE_BACKUP_THROTTLE\t\"Waiting during base backup when throttling activity.\"","grep_pattern":"BASE_BACKUP_THROTTLE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L175"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"timeout-checkpoint-write-delay","type":"Timeout","name":"CheckpointWriteDelay","slug":"checkpoint-write-delay","url":"/timeout/checkpoint-write-delay/","versions":[14,15,16,17,18],"version_range":"14-18","availability":{},"aliases":[],"official_descriptions":{"14":"Waiting between writes while performing a checkpoint.","15":"Waiting between writes while performing a checkpoint.","16":"Waiting between writes while performing a checkpoint.","17":"Waiting between writes while performing a checkpoint","18":"Waiting between writes while performing a checkpoint"},"official_description_zh":"执行检查点时，在两次写入之间等待。","mechanism":{"en":"`WAIT_EVENT_CHECKPOINT_WRITE_DELAY` at `src/backend/postmaster/checkpointer.c:814` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:176`. The instrumented operation is: Waiting between writes while performing a checkpoint. The CheckpointWriteDelay path deliberately waits on a timer, retry interval, throttle, or safety backoff. The latch timeout expires before work is reconsidered.","zh":"`WAIT_EVENT_CHECKPOINT_WRITE_DELAY` 位于 `src/backend/postmaster/checkpointer.c:814`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:176`。探针覆盖的操作是：执行检查点时，在两次写入之间等待。CheckpointWriteDelay 路径有意等待计时器、重试间隔、节流或安全退避；latch 超时后才重新评估工作。"},"normal":{"en":"The wait is normal when the configured policy is intentional and useful work advances at the expected rate.","zh":"当配置策略是有意的，而且有效工作按预期速率推进时，这项等待正常。"},"trouble":{"en":"Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.","zh":"策略导致维护、恢复、备份或延迟目标无法达成，或者 spin delay 持续时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Timeout/CheckpointWriteDelay","title_zh":"正在等待 Timeout/CheckpointWriteDelay 的会话","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 = 'Timeout'\n  AND wait_event = 'CheckpointWriteDelay'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Timeout cohort","title_zh":"当前 Timeout 等待分布","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 = 'Timeout'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Timeout'\n  AND a.wait_event = 'CheckpointWriteDelay'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the GUC or function that owns the timer.","Compare productive work with time spent delayed.","Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control."],"zh":["确认拥有该计时器的 GUC 或函数。","比较有效工作量与延迟时间。","先检查它原本要控制的 CPU、I/O 与持久性压力，再调整策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/checkpointer.c","line":814,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_CHECKPOINT_WRITE_DELAY","excerpt":"WAIT_EVENT_CHECKPOINT_WRITE_DELAY);","grep_pattern":"WAIT_EVENT_CHECKPOINT_WRITE_DELAY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/checkpointer.c#L814"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":176,"kind":"catalog_definition","status":"live_trigger","symbol":"CHECKPOINT_WRITE_DELAY","excerpt":"CHECKPOINT_WRITE_DELAY\t\"Waiting between writes while performing a checkpoint.\"","grep_pattern":"CHECKPOINT_WRITE_DELAY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L176"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["checkpoint_timeout","max_wal_size"],"metrics":["waiting_sessions","wait_event_share","checkpoint_time"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"timeout-pg-sleep","type":"Timeout","name":"PgSleep","slug":"pg-sleep","url":"/timeout/pg-sleep/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting due to a call to pg_sleep or a sibling function.","14":"Waiting due to a call to pg_sleep or a sibling function.","15":"Waiting due to a call to pg_sleep or a sibling function.","16":"Waiting due to a call to pg_sleep or a sibling function.","17":"Waiting due to a call to pg_sleep or a sibling function","18":"Waiting due to a call to pg_sleep or a sibling function"},"official_description_zh":"因调用 pg_sleep 或同类函数而等待。","mechanism":{"en":"`WAIT_EVENT_PG_SLEEP` at `src/backend/utils/adt/misc.c:409` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:177`. The instrumented operation is: Waiting due to a call to pg_sleep or a sibling function. The PgSleep path deliberately waits on a timer, retry interval, throttle, or safety backoff. The latch timeout expires before work is reconsidered.","zh":"`WAIT_EVENT_PG_SLEEP` 位于 `src/backend/utils/adt/misc.c:409`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:177`。探针覆盖的操作是：因调用 pg_sleep 或同类函数而等待。PgSleep 路径有意等待计时器、重试间隔、节流或安全退避；latch 超时后才重新评估工作。"},"normal":{"en":"The wait is normal when the configured policy is intentional and useful work advances at the expected rate.","zh":"当配置策略是有意的，而且有效工作按预期速率推进时，这项等待正常。"},"trouble":{"en":"Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.","zh":"策略导致维护、恢复、备份或延迟目标无法达成，或者 spin delay 持续时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Timeout/PgSleep","title_zh":"正在等待 Timeout/PgSleep 的会话","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 = 'Timeout'\n  AND wait_event = 'PgSleep'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Timeout cohort","title_zh":"当前 Timeout 等待分布","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 = 'Timeout'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Timeout'\n  AND a.wait_event = 'PgSleep'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the GUC or function that owns the timer.","Compare productive work with time spent delayed.","Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control."],"zh":["确认拥有该计时器的 GUC 或函数。","比较有效工作量与延迟时间。","先检查它原本要控制的 CPU、I/O 与持久性压力，再调整策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":177,"kind":"catalog_definition","status":"live_trigger","symbol":"PG_SLEEP","excerpt":"PG_SLEEP\t\"Waiting due to a call to <function>pg_sleep</function> or a sibling function.\"","grep_pattern":"PG_SLEEP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L177"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/adt/misc.c","line":409,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_PG_SLEEP","excerpt":"WAIT_EVENT_PG_SLEEP);","grep_pattern":"WAIT_EVENT_PG_SLEEP","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/adt/misc.c#L409"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"timeout-recovery-apply-delay","type":"Timeout","name":"RecoveryApplyDelay","slug":"recovery-apply-delay","url":"/timeout/recovery-apply-delay/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting to apply WAL during recovery because of a delay setting.","14":"Waiting to apply WAL during recovery because of a delay setting.","15":"Waiting to apply WAL during recovery because of a delay setting.","16":"Waiting to apply WAL during recovery because of a delay setting.","17":"Waiting to apply WAL during recovery because of a delay setting","18":"Waiting to apply WAL during recovery because of a delay setting"},"official_description_zh":"恢复期间，因延迟设置而等待应用 WAL。","mechanism":{"en":"`WAIT_EVENT_RECOVERY_APPLY_DELAY` at `src/backend/access/transam/xlogrecovery.c:3092` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:178`. The instrumented operation is: Waiting to apply WAL during recovery because of a delay setting. The RecoveryApplyDelay path deliberately waits on a timer, retry interval, throttle, or safety backoff. The latch timeout expires before work is reconsidered.","zh":"`WAIT_EVENT_RECOVERY_APPLY_DELAY` 位于 `src/backend/access/transam/xlogrecovery.c:3092`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:178`。探针覆盖的操作是：恢复期间，因延迟设置而等待应用 WAL。RecoveryApplyDelay 路径有意等待计时器、重试间隔、节流或安全退避；latch 超时后才重新评估工作。"},"normal":{"en":"The wait is normal when the configured policy is intentional and useful work advances at the expected rate.","zh":"当配置策略是有意的，而且有效工作按预期速率推进时，这项等待正常。"},"trouble":{"en":"Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.","zh":"策略导致维护、恢复、备份或延迟目标无法达成，或者 spin delay 持续时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Timeout/RecoveryApplyDelay","title_zh":"正在等待 Timeout/RecoveryApplyDelay 的会话","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 = 'Timeout'\n  AND wait_event = 'RecoveryApplyDelay'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Timeout cohort","title_zh":"当前 Timeout 等待分布","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 = 'Timeout'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Timeout'\n  AND a.wait_event = 'RecoveryApplyDelay'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the GUC or function that owns the timer.","Compare productive work with time spent delayed.","Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control."],"zh":["确认拥有该计时器的 GUC 或函数。","比较有效工作量与延迟时间。","先检查它原本要控制的 CPU、I/O 与持久性压力，再调整策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlogrecovery.c","line":3092,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RECOVERY_APPLY_DELAY","excerpt":"WAIT_EVENT_RECOVERY_APPLY_DELAY);","grep_pattern":"WAIT_EVENT_RECOVERY_APPLY_DELAY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlogrecovery.c#L3092"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":178,"kind":"catalog_definition","status":"live_trigger","symbol":"RECOVERY_APPLY_DELAY","excerpt":"RECOVERY_APPLY_DELAY\t\"Waiting to apply WAL during recovery because of a delay setting.\"","grep_pattern":"RECOVERY_APPLY_DELAY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L178"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"timeout-recovery-retrieve-retry-interval","type":"Timeout","name":"RecoveryRetrieveRetryInterval","slug":"recovery-retrieve-retry-interval","url":"/timeout/recovery-retrieve-retry-interval/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting during recovery when WAL data is not available from any source (pg_wal, archive or stream).","14":"Waiting during recovery when WAL data is not available from any source (pg_wal, archive or stream).","15":"Waiting during recovery when WAL data is not available from any source (pg_wal, archive or stream).","16":"Waiting during recovery when WAL data is not available from any source (pg_wal, archive or stream).","17":"Waiting during recovery when WAL data is not available from any source (pg_wal, archive or stream)","18":"Waiting during recovery when WAL data is not available from any source (pg_wal, archive or stream)"},"official_description_zh":"恢复期间，当所有来源（pg_wal、归档或流式传输）均无 WAL 数据可用时等待。","mechanism":{"en":"`WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL` at `src/backend/access/transam/xlogrecovery.c:3764` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:179`. The instrumented operation is: Waiting during recovery when WAL data is not available from any source (pg_wal, archive or stream). The RecoveryRetrieveRetryInterval path deliberately waits on a timer, retry interval, throttle, or safety backoff. The latch timeout expires before work is reconsidered.","zh":"`WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL` 位于 `src/backend/access/transam/xlogrecovery.c:3764`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:179`。探针覆盖的操作是：恢复期间，当所有来源（pg_wal、归档或流式传输）均无 WAL 数据可用时等待。RecoveryRetrieveRetryInterval 路径有意等待计时器、重试间隔、节流或安全退避；latch 超时后才重新评估工作。"},"normal":{"en":"The wait is normal when the configured policy is intentional and useful work advances at the expected rate.","zh":"当配置策略是有意的，而且有效工作按预期速率推进时，这项等待正常。"},"trouble":{"en":"Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.","zh":"策略导致维护、恢复、备份或延迟目标无法达成，或者 spin delay 持续时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Timeout/RecoveryRetrieveRetryInterval","title_zh":"正在等待 Timeout/RecoveryRetrieveRetryInterval 的会话","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 = 'Timeout'\n  AND wait_event = 'RecoveryRetrieveRetryInterval'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Timeout cohort","title_zh":"当前 Timeout 等待分布","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 = 'Timeout'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Timeout'\n  AND a.wait_event = 'RecoveryRetrieveRetryInterval'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the GUC or function that owns the timer.","Compare productive work with time spent delayed.","Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control."],"zh":["确认拥有该计时器的 GUC 或函数。","比较有效工作量与延迟时间。","先检查它原本要控制的 CPU、I/O 与持久性压力，再调整策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/transam/xlogrecovery.c","line":3764,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL","excerpt":"WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL);","grep_pattern":"WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/transam/xlogrecovery.c#L3764"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":179,"kind":"catalog_definition","status":"live_trigger","symbol":"RECOVERY_RETRIEVE_RETRY_INTERVAL","excerpt":"RECOVERY_RETRIEVE_RETRY_INTERVAL\t\"Waiting during recovery when WAL data is not available from any source (<filename>pg_wal</filename>, archive or stream).\"","grep_pattern":"RECOVERY_RETRIEVE_RETRY_INTERVAL","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L179"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"timeout-register-sync-request","type":"Timeout","name":"RegisterSyncRequest","slug":"register-sync-request","url":"/timeout/register-sync-request/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting while sending synchronization requests to the checkpointer, because the request queue is full.","14":"Waiting while sending synchronization requests to the checkpointer, because the request queue is full.","15":"Waiting while sending synchronization requests to the checkpointer, because the request queue is full.","16":"Waiting while sending synchronization requests to the checkpointer, because the request queue is full.","17":"Waiting while sending synchronization requests to the checkpointer, because the request queue is full","18":"Waiting while sending synchronization requests to the checkpointer, because the request queue is full"},"official_description_zh":"由于请求队列已满，在向 checkpointer 发送同步请求时等待。","mechanism":{"en":"`WAIT_EVENT_REGISTER_SYNC_REQUEST` at `src/backend/storage/sync/sync.c:615` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:180`. The instrumented operation is: Waiting while sending synchronization requests to the checkpointer, because the request queue is full. The RegisterSyncRequest path deliberately waits on a timer, retry interval, throttle, or safety backoff. The latch timeout expires before work is reconsidered.","zh":"`WAIT_EVENT_REGISTER_SYNC_REQUEST` 位于 `src/backend/storage/sync/sync.c:615`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:180`。探针覆盖的操作是：由于请求队列已满，在向 checkpointer 发送同步请求时等待。RegisterSyncRequest 路径有意等待计时器、重试间隔、节流或安全退避；latch 超时后才重新评估工作。"},"normal":{"en":"The wait is normal when the configured policy is intentional and useful work advances at the expected rate.","zh":"当配置策略是有意的，而且有效工作按预期速率推进时，这项等待正常。"},"trouble":{"en":"Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.","zh":"策略导致维护、恢复、备份或延迟目标无法达成，或者 spin delay 持续时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Timeout/RegisterSyncRequest","title_zh":"正在等待 Timeout/RegisterSyncRequest 的会话","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 = 'Timeout'\n  AND wait_event = 'RegisterSyncRequest'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Timeout cohort","title_zh":"当前 Timeout 等待分布","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 = 'Timeout'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Timeout'\n  AND a.wait_event = 'RegisterSyncRequest'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the GUC or function that owns the timer.","Compare productive work with time spent delayed.","Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control."],"zh":["确认拥有该计时器的 GUC 或函数。","比较有效工作量与延迟时间。","先检查它原本要控制的 CPU、I/O 与持久性压力，再调整策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/sync/sync.c","line":615,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_REGISTER_SYNC_REQUEST","excerpt":"WAIT_EVENT_REGISTER_SYNC_REQUEST);","grep_pattern":"WAIT_EVENT_REGISTER_SYNC_REQUEST","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/sync/sync.c#L615"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":180,"kind":"catalog_definition","status":"live_trigger","symbol":"REGISTER_SYNC_REQUEST","excerpt":"REGISTER_SYNC_REQUEST\t\"Waiting while sending synchronization requests to the checkpointer, because the request queue is full.\"","grep_pattern":"REGISTER_SYNC_REQUEST","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L180"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"timeout-spin-delay","type":"Timeout","name":"SpinDelay","slug":"spin-delay","url":"/timeout/spin-delay/","versions":[16,17,18],"version_range":"16-18","availability":{},"aliases":[],"official_descriptions":{"16":"Waiting while acquiring a contended spinlock.","17":"Waiting while acquiring a contended spinlock","18":"Waiting while acquiring a contended spinlock"},"official_description_zh":"获取发生争用的 spinlock 时等待。","mechanism":{"en":"`WAIT_EVENT_SPIN_DELAY` at `src/backend/storage/lmgr/s_lock.c:148` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:181`. The instrumented operation is: Waiting while acquiring a contended spinlock. The SpinDelay path deliberately waits on a timer, retry interval, throttle, or safety backoff. The latch timeout expires before work is reconsidered.","zh":"`WAIT_EVENT_SPIN_DELAY` 位于 `src/backend/storage/lmgr/s_lock.c:148`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:181`。探针覆盖的操作是：获取发生争用的 spinlock 时等待。SpinDelay 路径有意等待计时器、重试间隔、节流或安全退避；latch 超时后才重新评估工作。"},"normal":{"en":"The wait is normal when the configured policy is intentional and useful work advances at the expected rate.","zh":"当配置策略是有意的，而且有效工作按预期速率推进时，这项等待正常。"},"trouble":{"en":"Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.","zh":"策略导致维护、恢复、备份或延迟目标无法达成，或者 spin delay 持续时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Timeout/SpinDelay","title_zh":"正在等待 Timeout/SpinDelay 的会话","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 = 'Timeout'\n  AND wait_event = 'SpinDelay'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Timeout cohort","title_zh":"当前 Timeout 等待分布","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 = 'Timeout'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Timeout'\n  AND a.wait_event = 'SpinDelay'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the GUC or function that owns the timer.","Compare productive work with time spent delayed.","Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control."],"zh":["确认拥有该计时器的 GUC 或函数。","比较有效工作量与延迟时间。","先检查它原本要控制的 CPU、I/O 与持久性压力，再调整策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/storage/lmgr/s_lock.c","line":148,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_SPIN_DELAY","excerpt":"pgstat_report_wait_start(WAIT_EVENT_SPIN_DELAY);","grep_pattern":"WAIT_EVENT_SPIN_DELAY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/storage/lmgr/s_lock.c#L148"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":181,"kind":"catalog_definition","status":"live_trigger","symbol":"SPIN_DELAY","excerpt":"SPIN_DELAY\t\"Waiting while acquiring a contended spinlock.\"","grep_pattern":"SPIN_DELAY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L181"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":[],"metrics":["waiting_sessions","wait_event_share"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"timeout-vacuum-delay","type":"Timeout","name":"VacuumDelay","slug":"vacuum-delay","url":"/timeout/vacuum-delay/","versions":[13,14,15,16,17,18],"version_range":"13-18","availability":{},"aliases":[],"official_descriptions":{"13":"Waiting in a cost-based vacuum delay point.","14":"Waiting in a cost-based vacuum delay point.","15":"Waiting in a cost-based vacuum delay point.","16":"Waiting in a cost-based vacuum delay point.","17":"Waiting in a cost-based vacuum delay point","18":"Waiting in a cost-based vacuum delay point"},"official_description_zh":"在基于成本的 vacuum 延迟点等待。","mechanism":{"en":"`WAIT_EVENT_VACUUM_DELAY` at `src/backend/commands/vacuum.c:2495` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:182`. The instrumented operation is: Waiting in a cost-based vacuum delay point. The VacuumDelay path deliberately waits on a timer, retry interval, throttle, or safety backoff. The latch timeout expires before work is reconsidered.","zh":"`WAIT_EVENT_VACUUM_DELAY` 位于 `src/backend/commands/vacuum.c:2495`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:182`。探针覆盖的操作是：在基于成本的 vacuum 延迟点等待。VacuumDelay 路径有意等待计时器、重试间隔、节流或安全退避；latch 超时后才重新评估工作。"},"normal":{"en":"The wait is normal when the configured policy is intentional and useful work advances at the expected rate.","zh":"当配置策略是有意的，而且有效工作按预期速率推进时，这项等待正常。"},"trouble":{"en":"Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.","zh":"策略导致维护、恢复、备份或延迟目标无法达成，或者 spin delay 持续时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Timeout/VacuumDelay","title_zh":"正在等待 Timeout/VacuumDelay 的会话","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 = 'Timeout'\n  AND wait_event = 'VacuumDelay'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Timeout cohort","title_zh":"当前 Timeout 等待分布","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 = 'Timeout'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Timeout'\n  AND a.wait_event = 'VacuumDelay'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the GUC or function that owns the timer.","Compare productive work with time spent delayed.","Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control."],"zh":["确认拥有该计时器的 GUC 或函数。","比较有效工作量与延迟时间。","先检查它原本要控制的 CPU、I/O 与持久性压力，再调整策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/commands/vacuum.c","line":2495,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_VACUUM_DELAY","excerpt":"pgstat_report_wait_start(WAIT_EVENT_VACUUM_DELAY);","grep_pattern":"WAIT_EVENT_VACUUM_DELAY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/commands/vacuum.c#L2495"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":182,"kind":"catalog_definition","status":"live_trigger","symbol":"VACUUM_DELAY","excerpt":"VACUUM_DELAY\t\"Waiting in a cost-based vacuum delay point.\"","grep_pattern":"VACUUM_DELAY","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L182"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_naptime"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"timeout-vacuum-truncate","type":"Timeout","name":"VacuumTruncate","slug":"vacuum-truncate","url":"/timeout/vacuum-truncate/","versions":[15,16,17,18],"version_range":"15-18","availability":{},"aliases":[],"official_descriptions":{"15":"Waiting to acquire an exclusive lock to truncate off any empty pages at the end of a table vacuumed.","16":"Waiting to acquire an exclusive lock to truncate off any empty pages at the end of a table vacuumed.","17":"Waiting to acquire an exclusive lock to truncate off any empty pages at the end of a table vacuumed","18":"Waiting to acquire an exclusive lock to truncate off any empty pages at the end of a table vacuumed"},"official_description_zh":"等待获取独占锁，以截去正在执行 vacuum 的表末尾所有空页。","mechanism":{"en":"`WAIT_EVENT_VACUUM_TRUNCATE` at `src/backend/access/heap/vacuumlazy.c:3280` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:183`. The instrumented operation is: Waiting to acquire an exclusive lock to truncate off any empty pages at the end of a table vacuumed. The VacuumTruncate path deliberately waits on a timer, retry interval, throttle, or safety backoff. The latch timeout expires before work is reconsidered.","zh":"`WAIT_EVENT_VACUUM_TRUNCATE` 位于 `src/backend/access/heap/vacuumlazy.c:3280`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:183`。探针覆盖的操作是：等待获取独占锁，以截去正在执行 vacuum 的表末尾所有空页。VacuumTruncate 路径有意等待计时器、重试间隔、节流或安全退避；latch 超时后才重新评估工作。"},"normal":{"en":"The wait is normal when the configured policy is intentional and useful work advances at the expected rate.","zh":"当配置策略是有意的，而且有效工作按预期速率推进时，这项等待正常。"},"trouble":{"en":"Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.","zh":"策略导致维护、恢复、备份或延迟目标无法达成，或者 spin delay 持续时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Timeout/VacuumTruncate","title_zh":"正在等待 Timeout/VacuumTruncate 的会话","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 = 'Timeout'\n  AND wait_event = 'VacuumTruncate'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Timeout cohort","title_zh":"当前 Timeout 等待分布","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 = 'Timeout'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Timeout'\n  AND a.wait_event = 'VacuumTruncate'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the GUC or function that owns the timer.","Compare productive work with time spent delayed.","Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control."],"zh":["确认拥有该计时器的 GUC 或函数。","比较有效工作量与延迟时间。","先检查它原本要控制的 CPU、I/O 与持久性压力，再调整策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/access/heap/vacuumlazy.c","line":3280,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_VACUUM_TRUNCATE","excerpt":"WAIT_EVENT_VACUUM_TRUNCATE);","grep_pattern":"WAIT_EVENT_VACUUM_TRUNCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/access/heap/vacuumlazy.c#L3280"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":183,"kind":"catalog_definition","status":"live_trigger","symbol":"VACUUM_TRUNCATE","excerpt":"VACUUM_TRUNCATE\t\"Waiting to acquire an exclusive lock to truncate off any empty pages at the end of a table vacuumed.\"","grep_pattern":"VACUUM_TRUNCATE","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L183"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["autovacuum_naptime"],"metrics":["waiting_sessions","wait_event_share","oldest_transaction_age"],"incident_pattern":{"en":"","zh":""}}
{"schema_version":1,"record_kind":"event","id":"timeout-wal-summarizer-error","type":"Timeout","name":"WalSummarizerError","slug":"wal-summarizer-error","url":"/timeout/wal-summarizer-error/","versions":[17,18],"version_range":"17-18","availability":{},"aliases":[],"official_descriptions":{"17":"Waiting after a WAL summarizer error","18":"Waiting after a WAL summarizer error"},"official_description_zh":"WAL summarizer 出错后等待。","mechanism":{"en":"`WAIT_EVENT_WAL_SUMMARIZER_ERROR` at `src/backend/postmaster/walsummarizer.c:337` is the grep-verified reporting path. The public identity/resource is mapped at `src/backend/utils/activity/wait_event_names.txt:184`. The instrumented operation is: Waiting after a WAL summarizer error. The WalSummarizerError path deliberately waits on a timer, retry interval, throttle, or safety backoff. The latch timeout expires before work is reconsidered.","zh":"`WAIT_EVENT_WAL_SUMMARIZER_ERROR` 位于 `src/backend/postmaster/walsummarizer.c:337`，是经 grep 核验的报告路径。公共身份/资源映射位于 `src/backend/utils/activity/wait_event_names.txt:184`。探针覆盖的操作是：WAL summarizer 出错后等待。WalSummarizerError 路径有意等待计时器、重试间隔、节流或安全退避；latch 超时后才重新评估工作。"},"normal":{"en":"The wait is normal when the configured policy is intentional and useful work advances at the expected rate.","zh":"当配置策略是有意的，而且有效工作按预期速率推进时，这项等待正常。"},"trouble":{"en":"Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.","zh":"策略导致维护、恢复、备份或延迟目标无法达成，或者 spin delay 持续时，应当调查。"},"diagnostic_sql":[{"id":"sessions","title":"Sessions waiting on Timeout/WalSummarizerError","title_zh":"正在等待 Timeout/WalSummarizerError 的会话","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 = 'Timeout'\n  AND wait_event = 'WalSummarizerError'\nORDER BY query_age DESC NULLS LAST;"},{"id":"cohort","title":"Current Timeout cohort","title_zh":"当前 Timeout 等待分布","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 = 'Timeout'\nGROUP BY wait_event\nORDER BY waiting_sessions DESC, wait_event;"},{"id":"lock_objects","title":"Lock and relation context for these sessions","title_zh":"这些会话的锁与关系上下文","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 = 'Timeout'\n  AND a.wait_event = 'WalSummarizerError'\nORDER BY a.pid, l.granted, l.locktype, l.mode;"}],"actions":{"en":["Identify the GUC or function that owns the timer.","Compare productive work with time spent delayed.","Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control."],"zh":["确认拥有该计时器的 GUC 或函数。","比较有效工作量与延迟时间。","先检查它原本要控制的 CPU、I/O 与持久性压力，再调整策略。"]},"source_locations":[{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/postmaster/walsummarizer.c","line":337,"kind":"trigger","status":"live_trigger","symbol":"WAIT_EVENT_WAL_SUMMARIZER_ERROR","excerpt":"WAIT_EVENT_WAL_SUMMARIZER_ERROR);","grep_pattern":"WAIT_EVENT_WAL_SUMMARIZER_ERROR","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/postmaster/walsummarizer.c#L337"},{"major":18,"version":"18.6","tag":"REL_18_6","commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","path":"src/backend/utils/activity/wait_event_names.txt","line":184,"kind":"catalog_definition","status":"live_trigger","symbol":"WAL_SUMMARIZER_ERROR","excerpt":"WAL_SUMMARIZER_ERROR\t\"Waiting after a WAL summarizer error.\"","grep_pattern":"WAL_SUMMARIZER_ERROR","grep_verified":true,"url":"https://github.com/postgres/postgres/blob/REL_18_6/src/backend/utils/activity/wait_event_names.txt#L184"}],"source_status":"live_trigger","emission":{"status":"active","verified_release":"18.6"},"gucs":["wal_buffers","synchronous_commit"],"metrics":["waiting_sessions","wait_event_share","wal_bytes","wal_write_time"],"incident_pattern":{"en":"","zh":""}}
