pg_stats_all_table数值重置的其他原因及相关排查问题咨询
PostgreSQL统计收集值意外重置的排查方案
额外触发统计值重置的原因
- pg_stat_statements扩展参数变更:修改
pg_stat_statements.track、pg_stat_statements.max等核心参数后,部分统计数据会被重置或截断。 - 跨大版本升级:PostgreSQL跨大版本升级(如12→15)时,统计系统存储结构变更,原有统计数据会被重置。
- 进程被OOM终止后重启:PostgreSQL进程因内存不足被系统OOM killer终止,若配置了自动重启,短暂的重启可能未被察觉,导致统计值重置。
- 统计数据文件损坏:
pg_stat目录下的统计存储文件损坏,PostgreSQL检测到后会自动重置统计收集。 - 执行
pg_resetwal工具:重置预写日志时,会连带清理部分统计元数据,触发统计值重置。
备份操作对统计值的影响
常规物理备份(如pg_basebackup)、逻辑备份(如pg_dump)不会直接重置原实例的统计值。仅当基于备份搭建新实例或进行恢复操作时,新实例的统计值会从零开始,这不属于原实例的统计值重置。
排查步骤
- 检查PostgreSQL日志:搜索日志中
restart、crash、OOM、statistics reset、pg_stat_statements_reset等关键字,确认是否有未察觉的异常或重启。 - 核对参数变更记录:查看
postgresql.conf的修改历史,确认pg_stat_statements相关参数、track_counts等统计收集参数是否有变更。 - 查看系统日志:检查操作系统日志(如
/var/log/messages、syslog),确认PostgreSQL进程是否被OOM killer终止,或存在其他系统级异常。 - 验证统计文件完整性:检查
$PGDATA/pg_stat目录下的文件大小、可读性,对比正常实例的该目录状态,排查文件损坏情况。 - 审计数据库操作:若开启审计功能,查看是否有用户执行
pg_stat_statements_reset()或其他影响统计的操作。
内容的提问来源于stack exchange,提问作者BadProgrammer
相关产品推荐
相关产品推荐

