CONFIGURATION PARAMETER运行时统计数据 / 累积查询和索引统计
stats_fetch_consistency
设置读取累计统计信息时的一致性方式。
Sets the consistency of accesses to statistics data.
枚举 会话 引入 15 现存至 20 devel 0 次默认值变更
- 类型
- 枚举enum
- 上下文
- 会话任何用户都可在会话内用 SET 修改
- 默认值
cache- 枚举值
none, cache, snapshot- 引入版本
- 15
- 状态
- 现存
版本轨迹
相对 PostgreSQL 17 无变化。
默认值变迁
默认值自 PostgreSQL 15 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
本版译文与 PostgreSQL 15 完全一致,下面就是同一段文字。
确定在事务中多次访问累积统计信息时的行为。当设置为 none时,每次访问都会重新从共享内存中获取计数器。 当设置为cache时,对对象的统计信息的第一次访问会将这些统计信息缓存, 直到事务结束,除非调用pg_stat_clear_snapshot()。 当设置为snapshot时,第一次访问统计信息会缓存当前数据库中所有可访问的统计信息, 直到事务结束,除非调用pg_stat_clear_snapshot()。 在事务中更改此参数会丢弃统计快照。默认值为cache。
none适用于监控系统。如果值只被访问一次,它是最有效的。 cache确保重复访问产生相同的值,这对涉及自连接的查询很重要。 snapshot在交互式检查统计信息时可能很有用,但开销较高, 特别是存在许多数据库对象时。
机制详解
stats_fetch_consistency 定义同一事务内重复读取累计统计的行为。none 每次重新取对象,cache 首次读取后缓存该对象,snapshot 首次访问时物化当前数据库全部可见统计。
缓存或快照持续到事务结束或调用 pg_stat_clear_snapshot();事务内修改该参数会丢弃当前统计快照。
none 适合每个计数只读一次的监控查询;cache 保证同一对象重复读取稳定;snapshot 提供一致的交互视图,但对象很多时开销更高。其 user 上下文允许按会话或事务局部修改,之后执行或重新规划的工作会读取新值。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
普通 SQL 使用 cache;每项只读一次的抓取查询使用 none;只有明确需要一致观察时才用 snapshot,且不要让监控事务无限保持。
-
OLAP分析与批处理
对象很多时 snapshot 代价较高;应按监控查询访问模式选择 stats_fetch_consistency,不能只看负载标签。
-
小规格低配实例与开发机
保留 cache,除非简单单遍采集器能从 none 获益。该参数改变读取语义,不改变收集准确性,也不会减少底层计数开销。
常见问题
- 启用或扩大 stats_fetch_consistency 前没有测量收集与观察开销。
- 把统计收集语义误认为性能控制或 I/O 控制。
- 认为长事务内看到的所有统计都会立即更新。
- 收集敏感查询文本或标识,却没有匹配的访问与保留策略。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 20 ← 19 沿用 19
事实沿用 19
-
PostgreSQL 15 ← 14 新增此参数
PostgreSQL 15 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 累积查询和索引统计 8 | |||||
stats_fetch_consistency |
枚举 | 会话 | cache |
— | |
| 设置读取累计统计信息时的一致性方式。 | 现存 | ||||
track_activities |
布尔 | 会话(超级用户) | on |
— | |
| 收集会话当前执行命令的信息。 | 现存 | ||||
track_activity_query_size |
整数 | 重启生效 | 1 KiB |
132 次 | |
| 设置 pg_stat_activity.query 预留的字节数。 | 现存 | ||||
track_cost_delay_timing |
布尔 | 会话(超级用户) | off |
— | |
| 收集基于成本的 vacuum 延迟计时。 | 现存 | ||||
track_counts |
布尔 | 会话(超级用户) | on |
— | |
| 收集数据库活动累计统计。 | 现存 | ||||
track_functions |
枚举 | 会话(超级用户) | none |
— | |
| 收集函数调用次数与耗时统计。 | 现存 | ||||
track_io_timing |
布尔 | 会话(超级用户) | off |
— | |
| 收集数据库 I/O 等待计时。 | 现存 | ||||
track_wal_io_timing |
布尔 | 会话(超级用户) | off |
— | |
| 收集 WAL I/O 等待计时。 | 现存 | ||||