选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 等待事件 / 超时

WAIT EVENT · TIMEOUT超时

TimeoutRegisterSyncRequest

在发送同步请求到检查点程序时等待,因为请求队列已满。

Waiting while sending synchronization requests to the checkpointer, because the request queue is full

超时 引入 12 现存至 20 devel 0 次变动 实测触发图谱档案

类型
超时
引入版本
12
版本状态
当前稳定版
覆盖版本
9 个 · 12 – 20
触发路径
实测触发
实测发行版
18.6
名称变动
手册章节
监控统计

PostgreSQL 18 手册 官方文档 源码 wait.pg.center

版本轨迹

相对 PostgreSQL 17 无变化。

各版本描述

相邻版本里类型、名称与英文描述都相同的合并成一段,旧的在前。中文取自图谱或本站手册译文,没有译文的只给英文原文。

  1. 1220

    TimeoutRegisterSyncRequest

    在发送同步请求到检查点程序时等待,因为请求队列已满。

    Waiting while sending synchronization requests to the checkpointer, because the request queue is full.

触发机制

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 超时后才重新评估工作。

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.

通常正常

当配置策略是有意的,而且有效工作按预期速率推进时,这项等待正常。

The wait is normal when the configured policy is intentional and useful work advances at the expected rate.

值得警惕

策略导致维护、恢复、备份或延迟目标无法达成,或者 spin delay 持续时,应当调查。

Investigate when the policy causes missed maintenance, recovery, backup, or latency objectives, or when a spin delay persists.

诊断 SQL

直接在 psql 里跑;标注的是语句里用到的视图与列所要求的最低版本。

正在等待 Timeout/RegisterSyncRequest 的会话Sessions waiting on Timeout/RegisterSyncRequest

PG ≥ 13
SELECT pid, backend_type, usename, datname, application_name,
       state, now() - query_start AS query_age,
       now() - xact_start AS xact_age,
       wait_event_type, wait_event,
       pg_blocking_pids(pid) AS blocking_pids,
       left(query, 160) AS query
FROM pg_stat_activity
WHERE wait_event_type = 'Timeout'
  AND wait_event = 'RegisterSyncRequest'
ORDER BY query_age DESC NULLS LAST;

当前 Timeout 等待分布Current Timeout cohort

PG ≥ 13
SELECT wait_event, count(*) AS waiting_sessions,
       count(*) FILTER (WHERE state = 'active') AS active_waiters,
       max(now() - query_start) AS oldest_query
FROM pg_stat_activity
WHERE wait_event_type = 'Timeout'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;

这些会话的锁与关系上下文Lock and relation context for these sessions

PG ≥ 13
SELECT a.pid, l.locktype, l.mode, l.granted, l.fastpath,
       d.datname, n.nspname, c.relname,
       l.page, l.tuple, l.virtualxid, l.transactionid,
       l.classid, l.objid, l.objsubid
FROM pg_stat_activity AS a
LEFT JOIN pg_locks AS l ON l.pid = a.pid
LEFT JOIN pg_database AS d ON d.oid = l.database
LEFT JOIN pg_class AS c
  ON c.oid = l.relation
 AND l.database = (
       SELECT oid FROM pg_database WHERE datname = current_database()
     )
LEFT JOIN pg_namespace AS n ON n.oid = c.relnamespace
WHERE a.wait_event_type = 'Timeout'
  AND a.wait_event = 'RegisterSyncRequest'
ORDER BY a.pid, l.granted, l.locktype, l.mode;

处置步骤

  1. 确认拥有该计时器的 GUC 或函数。
  2. 比较有效工作量与延迟时间。
  3. 先检查它原本要控制的 CPU、I/O 与持久性压力,再调整策略。
英文原文
  1. Identify the GUC or function that owns the timer.
  2. Compare productive work with time spent delayed.
  3. Adjust the policy only after checking the CPU, I/O, and durability pressure it was designed to control.

相关参数与指标

waiting_sessionswait_event_share

源码证据

图谱在各版本源码树里核对到的位置,新的在前。「触发点」是真正上报等待事件的调用处,「目录定义」只说明这个名字在枚举里存在。

PostgreSQL 18REL_18_6

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的变动清单。

  1. PostgreSQL 12 ← 11 新增此事件

    该版起出现

    在发送同步请求到检查点程序时等待,因为请求队列已满。

同类事件

事件 引入 版本变动 最近变动
TIMEOUT 超时 11 个
BaseBackupThrottle档案 10
基础备份期间,因限速而等待。 现存
CheckpointWriteDelay档案 14
执行检查点时,在两次写入之间等待。 现存
CommitDelay 19
等待 WAL 刷盘前的提交延迟。 现存
PgSleep档案 10 131 次
因调用 pg_sleep 或同类函数而等待。 现存
RecoveryApplyDelay档案 10 131 次
恢复期间,因延迟设置而等待应用 WAL。 现存
RecoveryRetrieveRetryInterval档案 13
恢复期间,当所有来源(pg_wal、归档或流式传输)均无 WAL 数据可用时等待。 现存
RegisterSyncRequest档案 12
由于请求队列已满,在向 checkpointer 发送同步请求时等待。 现存
SpinDelay档案 16
获取发生争用的 spinlock 时等待。 现存
VacuumDelay档案 13
在基于成本的 vacuum 延迟点等待。 现存
VacuumTruncate档案 15
等待获取独占锁,以截去正在执行 vacuum 的表末尾所有空页。 现存
WalSummarizerError档案 17
WAL summarizer 出错后等待。 现存