WAIT EVENT · IO文件 I/O
IOLogicalSubxactRead
等待从逻辑子事务文件读取。
Waiting for a read from a logical subxact file.
文件 I/O 引入 14 于 15 移除 0 次变动 仅定义图谱档案
版本轨迹
PostgreSQL 14 新增此等待事件。
各版本描述
相邻版本里类型、名称与英文描述都相同的合并成一段,旧的在前。中文取自图谱或本站手册译文,没有译文的只给英文原文。
-
14
IOLogicalSubxactRead等待从逻辑子事务文件读取。
Waiting for a read from a logical subxact file.
触发机制
目录中仍保留该身份,但源码审计确认在 14 已没有活动报告点。已知曾可触发范围:none。下方定义位置作为负面证据保留;当前精确版本不会从核心代码路径发出此事件。 证据:[pgsql-hackers confirmation](https://www.postgresql.org/message-id/ff077840-3ab2-04dd-bbe4-4f5dfd2ad481%40oss.nttdata.com)。
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).
通常正常
在已审计的精确版本上,不应出现活动的核心触发。
No live core occurrence is expected on the audited release.
值得警惕
若监控仍显示它,应核对精确小版本、扩展来源,并确认样本是否陈旧或来自另一台服务器。
If telemetry shows it, verify the exact patch version, extension origin, and whether the sample is stale or came from a different server.
诊断 SQL
直接在 psql 里跑;标注的是语句里用到的视图与列所要求的最低版本。
正在等待 IO/LogicalSubxactRead 的会话Sessions waiting on IO/LogicalSubxactRead
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 = 'LogicalSubxactRead'
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 = 'LogicalSubxactRead'
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.
相关参数与指标
autovacuum_freeze_max_agevacuum_freeze_table_age
waiting_sessionswait_event_shareoldest_transaction_ageio_read_timeio_write_time
源码证据
图谱在各版本源码树里核对到的位置,新的在前。「触发点」是真正上报等待事件的调用处,「目录定义」只说明这个名字在枚举里存在。
PostgreSQL 14REL_14_24
-
src/backend/utils/activity/wait_event.c:733LogicalSubxactRead目录定义仅定义event_name = "LogicalSubxactRead";
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的变动清单。
-
PostgreSQL 15 ← 14 移除此事件
该版起不再存在
-
PostgreSQL 14 ← 13 新增此事件
该版起出现
等待从逻辑子事务文件读取。
同类事件
| 事件 | 引入 | 版本变动 | 最近变动 |
|---|---|---|---|
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 | — | |
| 等待关系数据文件被扩展。 | 现存 | ||
DataFileFlush档案
|
10 | — | |
| 等待关系数据文件同步到持久存储。 | 现存 | ||
DataFileImmediateSync档案
|
10 | — | |
| 等待关系数据文件立即同步到持久存储。 | 现存 | ||
DataFilePrefetch档案
|
10 | — | |
| 等待关系数据文件的异步预取。 | 现存 | ||
DataFileRead档案
|
10 | — | |
| 等待对关系数据文件的读取。 | 现存 | ||
DataFileSync档案
|
10 | — | |
| 等待对关系数据文件的更改同步到持久存储。 | 现存 | ||
DataFileTruncate档案
|
10 | — | |
| 等待关系数据文件被截断。 | 现存 | ||
DataFileWrite档案
|
10 | — | |
| 等待对关系数据文件的写入。 | 现存 | ||
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 | — | |
| 等待关系映射文件的读取。 | 现存 | ||
RelationMapReplace档案
|
16 | — | |
| 等待关系映射文件的替换结果同步到持久存储。 | 现存 | ||
RelationMapSync档案
|
10 | — | |
| 等待关系映射文件同步到持久存储。 | 于 16 移除 | ||
RelationMapWrite档案
|
10 | — | |
| 等待对关系映射文件的写入。 | 现存 | ||
ReorderBufferRead档案
|
10 | — | |
| 在重排序缓冲区管理期间等待读取。 | 现存 | ||
ReorderBufferWrite档案
|
10 | — | |
| 在重排序缓冲区管理期间等待写入。 | 现存 | ||
ReorderLogicalMappingRead档案
|
10 | — | |
| 在重排序缓冲区管理期间等待读取逻辑映射。 | 现存 | ||
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 | — | |
| 等待读取序列化的历史系统目录快照。 | 现存 | ||
SnapbuildSync档案
|
10 | — | |
| 等待序列化的历史系统目录快照同步到持久存储。 | 现存 | ||
SnapbuildWrite档案
|
10 | — | |
| 等待写入序列化的历史系统目录快照。 | 现存 | ||
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段来创建一个新的WAL段时等待读取。曾用名 WALCopyRead |
现存 | ||
WalCopySync档案
|
10 | 172 次 | |
等待通过复制现有 WAL 段创建的新 WAL 段同步到持久存储。曾用名 WALCopySync |
现存 | ||
WalCopyWrite档案
|
10 | 171 次 | |
通过复制一个已有WAL段来创建一个新的WAL段时等待写入。曾用名 WALCopyWrite |
现存 | ||
WalInitSync档案
|
10 | 171 次 | |
等待新初始化的 WAL 文件同步到持久存储。曾用名 WALInitSync |
现存 | ||
WalInitWrite档案
|
10 | 171 次 | |
在初始化一个新的WAL文件时等待写入。曾用名 WALInitWrite |
现存 | ||
WalRead档案
|
10 | 171 次 | |
等待WAL文件的读取。曾用名 WALRead |
现存 | ||
WalsenderTimelineHistoryRead档案
|
10 | 172 次 | |
在 WAL 发送进程执行时间线命令期间,等待从时间线历史文件读取。曾用名 WALSenderTimelineHistoryRead |
现存 | ||
WalSummaryRead档案
|
17 | — | |
| 等待从 WAL 汇总文件读取。 | 现存 | ||
WalSummaryWrite档案
|
17 | — | |
| 等待写入 WAL 汇总文件。 | 现存 | ||
WalSync档案
|
12 | 171 次 | |
等待 WAL 文件同步到持久存储。曾用名 WALSync |
现存 | ||
WalSyncMethodAssign档案
|
10 | 172 次 | |
在设置新的 WAL 同步方法时,等待数据同步到持久存储。曾用名 WALSyncMethodAssign |
现存 | ||
WalWrite档案
|
10 | 171 次 | |
等待写入 WAL 文件。曾用名 WALWrite |
现存 | ||