WAIT EVENT · IO文件 I/O
IOTimelineHistorySync
等待新创建的时间线历史文件到达持久存储。
Waiting for a newly created timeline history file to reach durable storage
文件 I/O 引入 10 现存至 20 devel 0 次变动 实测触发图谱档案
版本轨迹
相对 PostgreSQL 17 无变化。
各版本描述
相邻版本里类型、名称与英文描述都相同的合并成一段,旧的在前。中文取自图谱或本站手册译文,没有译文的只给英文原文。
-
1020
IOTimelineHistorySync等待新创建的时间线历史文件到达持久存储。
Waiting for a newly created timeline history file to reach durable storage.
触发机制
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 完成该步骤后,后端继续执行。
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.
通常正常
当负载本来就应以当前速率执行对应的读取、写入、同步、分配或完成操作时,这项等待正常。
The wait is normal when the workload is expected to perform this read, write, sync, allocation, or completion operation at the observed rate.
值得警惕
若它持续存在并伴随前台延迟、大量并发等待者、存储长尾延迟、限速或错误,应当调查。
Investigate when it persists with foreground latency, many concurrent waiters, storage tail latency, throttling, or errors.
诊断 SQL
直接在 psql 里跑;标注的是语句里用到的视图与列所要求的最低版本。
正在等待 IO/TimelineHistorySync 的会话Sessions waiting on IO/TimelineHistorySync
PG ≥ 13SELECT 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 = 'IO'
AND wait_event = 'TimelineHistorySync'
ORDER BY query_age DESC NULLS LAST;
当前 IO 等待分布Current IO cohort
PG ≥ 13SELECT 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 = 'IO'
GROUP BY wait_event
ORDER BY waiting_sessions DESC, wait_event;
这些会话的锁与关系上下文Lock and relation context for these sessions
PG ≥ 13SELECT 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 = 'IO'
AND a.wait_event = 'TimelineHistorySync'
ORDER BY a.pid, l.granted, l.locktype, l.mode;
处置步骤
- 确认当前负载阶段本来就应访问这类文件。
- 在可用版本上关联 pg_stat_io 与具体设备延迟。
- 先修复访问路径、突发形状或受影响存储层,再调整无关的内存参数。
英文原文
- 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.
相关参数与指标
waiting_sessionswait_event_shareio_read_timeio_write_time
源码证据
图谱在各版本源码树里核对到的位置,新的在前。「触发点」是真正上报等待事件的调用处,「目录定义」只说明这个名字在枚举里存在。
PostgreSQL 18REL_18_6
-
src/backend/access/transam/timeline.c:428WAIT_EVENT_TIMELINE_HISTORY_SYNC触发点实测触发pgstat_report_wait_start(WAIT_EVENT_TIMELINE_HISTORY_SYNC); -
src/backend/utils/activity/wait_event_names.txt:256TIMELINE_HISTORY_SYNC目录定义实测触发TIMELINE_HISTORY_SYNC "Waiting for a newly created timeline history file to reach durable storage."
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的变动清单。
-
PostgreSQL 10 ← 9.6 新增此事件
该版起出现
等待新创建的时间线历史文件到达持久存储。
同类事件
| 事件 | 引入 | 版本变动 | 最近变动 |
|---|---|---|---|
AioIoCompletion档案
|
18 | — | |
| 等待另一个进程完成 I/O。 | 现存 | ||
AioIoUringExecution档案
|
18 | — | |
| 等待通过 io_uring 执行 I/O。 | 现存 | ||
AioIoUringSubmit档案
|
18 | — | |
| 等待通过 io_uring 提交 I/O。 | 现存 | ||
BasebackupRead档案
|
14 | 171 次 | |
等待基础备份从文件中读取数据。曾用名 BaseBackupRead |
现存 | ||
BasebackupSync档案
|
15 | 171 次 | |
等待基础备份写入的数据到达持久化存储。曾用名 BaseBackupSync |
现存 | ||
BasebackupWrite档案
|
15 | 171 次 | |
等待基础备份向文件写入数据。曾用名 BaseBackupWrite |
现存 | ||
BuffileRead档案
|
10 | 171 次 | |
等待从缓冲文件中读取数据。曾用名 BufFileRead |
现存 | ||
BuffileTruncate档案
|
14 | 171 次 | |
等待截断缓冲文件。曾用名 BufFileTruncate |
现存 | ||
BuffileWrite档案
|
10 | 171 次 | |
等待向缓冲文件写入数据。曾用名 BufFileWrite |
现存 | ||
ControlFileRead档案
|
10 | 131 次 | |
| 等待从 pg_control 文件中读取数据。 | 现存 | ||
ControlFileSync档案
|
10 | 131 次 | |
| 等待 pg_control 文件到达持久化存储。 | 现存 | ||
ControlFileSyncUpdate档案
|
10 | 131 次 | |
| 等待 pg_control 文件的更新内容到达持久化存储。 | 现存 | ||
ControlFileWrite档案
|
10 | 131 次 | |
| 等待向 pg_control 文件写入数据。 | 现存 | ||
ControlFileWriteUpdate档案
|
10 | 131 次 | |
| 等待通过写入来更新 pg_control 文件。 | 现存 | ||
CopyFileCopy档案
|
18 | — | |
| 等待文件复制操作完成。 | 现存 | ||
CopyFileRead档案
|
10 | — | |
| 等待在文件复制操作期间读取数据。 | 现存 | ||
CopyFileWrite档案
|
10 | — | |
| 等待在文件复制操作期间写入数据。 | 现存 | ||
CopyFromRead
|
19 | — | |
| 在 COPY FROM 期间等待从管道、文件或程序读取数据。 | 现存 | ||
CopyToWrite
|
19 | — | |
| 在 COPY TO 期间等待向管道、文件或程序写入数据。 | 现存 | ||
DataFileExtend档案
|
10 | — | |
| 等待扩展 relation 数据文件。 | 现存 | ||
DataFileFlush档案
|
10 | — | |
| 等待 relation 数据文件到达持久化存储。 | 现存 | ||
DataFileImmediateSync档案
|
10 | — | |
| 等待将 relation 数据文件立即同步到持久化存储。 | 现存 | ||
DataFilePrefetch档案
|
10 | — | |
| 等待从 relation 数据文件异步预取数据。 | 现存 | ||
DataFileRead档案
|
10 | — | |
| 等待从 relation 数据文件中读取数据。 | 现存 | ||
DataFileSync档案
|
10 | — | |
| 等待 relation 数据文件的变更到达持久化存储。 | 现存 | ||
DataFileTruncate档案
|
10 | — | |
| 等待截断 relation 数据文件。 | 现存 | ||
DataFileWrite档案
|
10 | — | |
| 等待向 relation 数据文件写入数据。 | 现存 | ||
DsmAllocate档案
|
16 | 171 次 | |
等待分配动态共享内存段。曾用名 DSMAllocate |
现存 | ||
DsmFillZeroWrite档案
|
10 | 172 次 | |
等待用零值填充动态共享内存的后备文件。曾用名 DSMFillZeroWrite |
现存 | ||
LockFileAddtodatadirRead档案
|
10 | 171 次 | |
等待在向数据目录锁文件添加一行时读取数据。曾用名 LockFileAddToDataDirRead |
现存 | ||
LockFileAddtodatadirSync档案
|
10 | 171 次 | |
等待向数据目录锁文件添加一行时写入的数据到达持久化存储。曾用名 LockFileAddToDataDirSync |
现存 | ||
LockFileAddtodatadirWrite档案
|
10 | 171 次 | |
等待在向数据目录锁文件添加一行时写入数据。曾用名 LockFileAddToDataDirWrite |
现存 | ||
LockFileCreateRead档案
|
10 | — | |
| 等待在创建数据目录锁文件时读取数据。 | 现存 | ||
LockFileCreateSync档案
|
10 | — | |
| 等待创建数据目录锁文件时写入的数据到达持久化存储。 | 现存 | ||
LockFileCreateWrite档案
|
10 | — | |
| 等待在创建数据目录锁文件时写入数据。 | 现存 | ||
LockFileRecheckdatadirRead档案
|
10 | 171 次 | |
等待在重新检查数据目录锁文件时读取数据。曾用名 LockFileReCheckDataDirRead |
现存 | ||
LogicalChangesRead档案
|
14 | — | |
| 等待从逻辑变更文件中读取数据。 | 于 15 移除 | ||
LogicalChangesWrite档案
|
14 | — | |
| 等待向逻辑变更文件写入数据。 | 于 15 移除 | ||
LogicalRewriteCheckpointSync档案
|
10 | — | |
| 等待检查点期间的逻辑重写映射到达持久化存储。 | 现存 | ||
LogicalRewriteMappingSync档案
|
10 | — | |
| 等待逻辑重写期间的映射数据到达持久化存储。 | 现存 | ||
LogicalRewriteMappingWrite档案
|
10 | — | |
| 等待在逻辑重写期间写入映射数据。 | 现存 | ||
LogicalRewriteSync档案
|
10 | — | |
| 等待逻辑重写映射到达持久化存储。 | 现存 | ||
LogicalRewriteTruncate档案
|
10 | — | |
| 等待在逻辑重写期间截断映射数据。 | 现存 | ||
LogicalRewriteWrite档案
|
10 | — | |
| 等待写入逻辑重写映射。 | 现存 | ||
LogicalSubxactRead档案
|
14 | — | |
| 等待从逻辑子事务文件中读取数据。 | 于 15 移除 | ||
LogicalSubxactWrite档案
|
14 | — | |
| 等待向逻辑子事务文件写入数据。 | 于 15 移除 | ||
RelationMapRead档案
|
10 | — | |
| 等待读取 relation map 文件。 | 现存 | ||
RelationMapReplace档案
|
16 | — | |
| 等待以持久化方式替换 relation map 文件。 | 现存 | ||
RelationMapSync档案
|
10 | — | |
| 等待 relation map 文件到达持久化存储。 | 于 16 移除 | ||
RelationMapWrite档案
|
10 | — | |
| 等待向 relation map 文件写入数据。 | 现存 | ||
ReorderBufferRead档案
|
10 | — | |
| 等待在 reorder buffer 管理期间读取数据。 | 现存 | ||
ReorderBufferWrite档案
|
10 | — | |
| 等待在 reorder buffer 管理期间写入数据。 | 现存 | ||
ReorderLogicalMappingRead档案
|
10 | — | |
| 等待在 reorder buffer 管理期间读取逻辑映射。 | 现存 | ||
ReplicationSlotRead档案
|
10 | — | |
| 等待从复制槽控制文件中读取数据。 | 现存 | ||
ReplicationSlotRestoreSync档案
|
10 | — | |
| 等待在将复制槽恢复到内存的过程中,使其控制文件到达持久化存储。 | 现存 | ||
ReplicationSlotSync档案
|
10 | — | |
| 等待复制槽控制文件到达持久化存储。 | 现存 | ||
ReplicationSlotWrite档案
|
10 | — | |
| 等待向复制槽控制文件写入数据。 | 现存 | ||
SlruFlushSync档案
|
10 | 171 次 | |
等待检查点或数据库关闭期间的 SLRU 数据到达持久化存储。曾用名 SLRUFlushSync |
现存 | ||
SlruRead档案
|
10 | 171 次 | |
等待读取 SLRU 页面。曾用名 SLRURead |
现存 | ||
SlruSync档案
|
10 | 171 次 | |
等待页面写入后的 SLRU 数据到达持久化存储。曾用名 SLRUSync |
现存 | ||
SlruWrite档案
|
10 | 171 次 | |
等待写入 SLRU 页面。曾用名 SLRUWrite |
现存 | ||
SnapbuildRead档案
|
10 | — | |
| 等待读取序列化的历史系统目录 snapshot。 | 现存 | ||
SnapbuildSync档案
|
10 | — | |
| 等待序列化的历史系统目录 snapshot 到达持久化存储。 | 现存 | ||
SnapbuildWrite档案
|
10 | — | |
| 等待写入序列化的历史系统目录 snapshot。 | 现存 | ||
TimelineHistoryFileSync档案
|
10 | — | |
| 等待通过流复制接收的时间线历史文件到达持久化存储。 | 现存 | ||
TimelineHistoryFileWrite档案
|
10 | — | |
| 等待写入通过流复制接收的时间线历史文件。 | 现存 | ||
TimelineHistoryRead档案
|
10 | — | |
| 等待读取时间线历史文件。 | 现存 | ||
TimelineHistorySync档案
|
10 | — | |
| 等待新建的时间线历史文件到达持久化存储。 | 现存 | ||
TimelineHistoryWrite档案
|
10 | — | |
| 等待写入新建的时间线历史文件。 | 现存 | ||
TwophaseFileRead档案
|
10 | — | |
| 等待读取两阶段状态文件。 | 现存 | ||
TwophaseFileSync档案
|
10 | — | |
| 等待两阶段状态文件到达持久化存储。 | 现存 | ||
TwophaseFileWrite档案
|
10 | — | |
| 等待写入两阶段状态文件。 | 现存 | ||
VersionFileSync档案
|
15 | — | |
| 等待创建数据库时的版本文件到达持久化存储。 | 现存 | ||
VersionFileWrite档案
|
15 | — | |
| 等待在创建数据库时写入版本文件。 | 现存 | ||
WalBootstrapSync档案
|
10 | 171 次 | |
等待引导初始化期间的 WAL 到达持久化存储。曾用名 WALBootstrapSync |
现存 | ||
WalBootstrapWrite档案
|
10 | 171 次 | |
等待在引导初始化期间写入 WAL 页面。曾用名 WALBootstrapWrite |
现存 | ||
WalCopyRead档案
|
10 | 171 次 | |
等待通过复制现有 WAL segment 创建新 WAL segment 时读取数据。曾用名 WALCopyRead |
现存 | ||
WalCopySync档案
|
10 | 172 次 | |
等待通过复制现有 WAL segment 创建的新 WAL segment 到达持久化存储。曾用名 WALCopySync |
现存 | ||
WalCopyWrite档案
|
10 | 171 次 | |
等待通过复制现有 WAL segment 创建新 WAL segment 时写入数据。曾用名 WALCopyWrite |
现存 | ||
WalInitSync档案
|
10 | 171 次 | |
等待新初始化的 WAL 文件到达持久化存储。曾用名 WALInitSync |
现存 | ||
WalInitWrite档案
|
10 | 171 次 | |
等待在初始化新 WAL 文件时写入数据。曾用名 WALInitWrite |
现存 | ||
WalRead档案
|
10 | 171 次 | |
等待从 WAL 文件中读取数据。曾用名 WALRead |
现存 | ||
WalsenderTimelineHistoryRead档案
|
10 | 172 次 | |
等待在 WAL sender 执行 timeline 命令期间从时间线历史文件中读取数据。曾用名 WALSenderTimelineHistoryRead |
现存 | ||
WalSummaryRead档案
|
17 | — | |
| 等待从 WAL summary 文件中读取数据。 | 现存 | ||
WalSummaryWrite档案
|
17 | — | |
| 等待向 WAL summary 文件写入数据。 | 现存 | ||
WalSync档案
|
12 | 171 次 | |
等待 WAL 文件到达持久化存储。曾用名 WALSync |
现存 | ||
WalSyncMethodAssign档案
|
10 | 172 次 | |
等待分配新的 WAL 同步方法时写入的数据到达持久化存储。曾用名 WALSyncMethodAssign |
现存 | ||
WalWrite档案
|
10 | 171 次 | |
等待向 WAL 文件写入数据。曾用名 WALWrite |
现存 | ||