PostgreSQL故障切换(failover)后pg_stat_user_tables统计信息丢失如何解决?
解决方案
针对PostgreSQL故障切换后用户表统计信息清零导致查询规划器统计过时的问题,最简处理方案如下:
- 最通用的快速处理方法:故障切换完成后,直接在新主库执行全库
ANALYZE命令
该命令不需要超级用户权限,仅需数据库所属角色即可执行,它会重新采样所有用户表的数据分布、更新查询规划器依赖的统计元数据,且运行过程中不会加排他锁,完全不阻塞正常业务读写,执行速度远快于全库VACUUM,不需要扫描死元组,仅收集统计信息。ANALYZE; - 如果库体量极大,也可以仅针对故障切换前有大量DML操作的表执行指定表的统计更新:
ANALYZE your_table_name; - 如需自动化处理,可以直接在高可用集群的故障切换回调脚本中加入ANALYZE执行逻辑,确认新主库升主成功后自动触发,无需人工介入。
注意事项
- 如果全库ANALYZE执行耗时过长,可以临时调低
default_statistics_target参数的取值降低采样率,执行完成后再恢复原有配置,可大幅缩短运行时间。 - 执行时可追加
VERBOSE参数查看执行进度,确认哪些表已经完成统计更新:ANALYZE VERBOSE;
内容的提问来源于stack exchange,提问作者Fabrice Chapuis
相关产品推荐
相关产品推荐

