【postgresql】一文详解postgresql中的统计模块
pgStat统计收集器的核心功能与实现原理
一、统计收集器基础架构
PostgreSQL的PgStat辅助进程作为专用统计信息收集组件,通过以下机制实现数据采集:
多维度监控体系
跟踪表/索引的DML操作量(INSERT/UPDATE/DELETE)
记录物理存储特征(磁盘块数、元组数量)
维护维护操作时间戳(VACUUM/ANALYZE最后执行时间)
监控函数执行耗时(用户自定义函数调用统计)
性能开销控制
通过track_counts
、track_io_timing
等参数动态调整采集频率,在数据精度与系统负载间取得平衡。
二、数据存储机制
系统表与文件存储
pg_statistic
系统表:结构化存储表级统计信息文件系统存储:
pgstat.global
:集群级全局统计快照pg_stat_tmp
:进程间通信的临时数据中转站
数据结构设计
采用OID索引的哈希表实现高效数据检索,统计条目包含:[表OID] -> {last_analyze_time, n_tuples, blk_reads, ...}
三、优化器协同工作流
代价估算模型
利用统计信息计算不同执行路径的CPU/IO成本,关键参数包括:表扫描代价(顺序扫描 vs 索引扫描)
连接方式成本(Nested Loop/Merge/Hash Join)
连接顺序影响(左/右/Bushy Join)
统计信息应用示例
路径代价 = (CPU成本 + IO成本) × 执行计划系数 CPU成本 = 元组数 × 每元组处理时间 IO成本 = 磁盘块数 × 块读取延迟
四、扩展应用场景
性能诊断工具
通过
pg_stat_user_tables
识别热点表利用
pg_stat_bgwriter
评估检查点效率
自动维护决策
基于pg_stat_all_tables.n_dead_tup
触发autovacuum,结合pg_stat_statements
优化SQL执行计划。