内容提要
PostgreSQL 19新增四个系统视图:pg_stat_lock记录锁等待统计,含等待次数、时间及快速路径溢出计数;pg_stat_recovery提供备机恢复状态的一致性快照;pg_stat_autovacuum_scores展示自动清理优先级评分;pg_dsm_registry_allocations列出动态共享内存分配。这些视图增强了数据库监控能力,帮助管理员优化锁配置、检查备机状态及调整自动清理策略。
延伸解读
锁统计视图的实用价值
pg_stat_lock 视图提供了锁等待的累计统计,但需注意 waits 和 wait_time 仅在等待超过 deadlock_timeout(默认1秒)且成功获取锁时才计数。因此,它不能反映所有锁等待,而是聚焦于较长的阻塞。管理员可通过该视图识别高等待的锁类型,并结合 avg_wait_ms 判断是频繁短等待还是偶发长等待,从而优化锁配置。
快速路径溢出与分区表
fastpath_exceeded 计数器反映因快速路径槽位不足而回退到共享锁表的次数。对于分区表,单次查询可能锁定多个分区,容易触发该计数器。若该值持续增长,提示可考虑调高 max_locks_per_transaction。PostgreSQL 19 已将该参数默认值从64提升至128,但分区数量超过该值时仍可能溢出。
备机状态的一致性快照
pg_stat_recovery 视图将多个恢复状态函数整合为单行原子快照,确保各字段一致。此前通过多个函数查询可能因恢复推进而得到不一致数据。该视图还暴露了此前无SQL接口的信息,如 promotion 是否已触发。对于HA工具,可借此简化健康检查,但需注意该视图仅在备机上返回数据,且需要 pg_read_all_stats 权限。
自动清理优先级评分机制
pg_stat_autovacuum_scores 视图展示了自动清理的评分逻辑,分数基于表与阈值的接近程度。但需注意,视图基于当前统计信息计算,而自动清理 worker 在唤醒时计算,两者可能存在差异,因此视图结果仅作为参考。此外,所有权重参数设为0可恢复旧版顺序,便于对比调整。
Q&A
PostgreSQL 19 新增了哪些系统视图?
PostgreSQL 19 新增了四个系统视图:pg_stat_lock、pg_stat_recovery、pg_stat_autovacuum_scores 和 pg_dsm_registry_allocations。
pg_stat_lock 视图有什么作用?
pg_stat_lock 视图提供集群范围内的锁等待统计信息,包括每种锁类型的等待次数、等待时间以及快速路径溢出计数。它可以帮助管理员识别锁竞争问题,并优化锁配置。
pg_stat_lock 视图中的 fastpath_exceeded 字段代表什么?
fastpath_exceeded 字段表示由于快速路径槽位限制而无法通过快速路径获取锁的次数。如果该值增长,可能表明需要增加 max_locks_per_transaction 参数。
pg_stat_recovery 视图与之前的恢复状态检查函数相比有什么优势?
pg_stat_recovery 视图将多个恢复状态检查函数(如 pg_is_in_recovery()、pg_last_wal_replay_lsn() 等)的信息整合到一行中,并以原子快照方式读取,确保所有字段一致。这避免了多次调用函数时数据不一致的问题。
PostgreSQL 19 中自动清理(autovacuum)的优先级排序有什么变化?
PostgreSQL 19 改变了自动清理的工作顺序:以前按 pg_class 中的顺序处理表,现在每个 worker 根据表接近或超过自动清理阈值的程度计算分数(包括 XID 年龄、multixact 年龄、死元组、插入和 analyze 过时程度),分数最高的表优先处理。
pg_stat_autovacuum_scores 视图有什么用途?
pg_stat_autovacuum_scores 视图显示每个表的自动清理分数,包括总分数和各个组件分数(如 xid_score、vacuum_score 等),以及是否会被自动清理或分析。这有助于管理员了解自动清理的优先级,并调整相关参数。
pg_dsm_registry_allocations 视图显示什么内容?
pg_dsm_registry_allocations 视图列出动态共享内存(DSM)注册表中的每个条目,包括名称、类型(segment、area 或 hash)和大小(字节)。如果条目初始化失败,大小显示为 NULL。