了解累积统计信息的重置
当 PostgreSQL 重置累积统计信息系统收集的统计信息时,它会将所有统计计数器重置为零。这包括有关表访问、索引使用情况、函数执行等方面的数据。
收集类统计信息视图中的内容会发生变化,包括pg_stat_all_tables、pg_stat_all_indexes、pg_stat_user_functions、pg_statio_all_tables、pg_statio_all_indexes和pg_stat_statements等。
累积统计信息何时会重置?
PostgreSQL 将临时的统计数据存储在一个单独的目录中,该目录由 stats_temp_directory 参数确定。它可以是一个相对于数据目录的路径,也可以是一个绝对路径,默认为pg_stat_tmp。将其指向一个基于内存的文件系统可减少物理 I/O 的消耗,还可以提高性能。
当统计信息收集器退出时,PostgreSQL 会通过pg_stat目录下的统计信息文件更新累积的统计信息。保存的统计数据可以在下次启动时重用。当发生检查点时,这些统计数据不会被刷新到磁盘文件中,并且当统计数据更改时,也不会有相关的 WAL 记录。
在某些情况下,累积的统计信息会发生重置,或者统计数据会失效:
• 使用 pg_stat_reset 或 pg_stat_statements_reset 函数重置累积统计信息。
• 在流式复制中,当主服务器发生故障而备用服务器成为新的主服务器时,累积的统计数据会失效。
• 还原一个使用 pg_basebackup 进行的备份。在一个 PostgreSQL 基础备份中,pg_stat_tmp目录的内容会被排除在外。
• 使用连续归档备份进行恢复(PITR)。
• PostgreSQL 服务器崩溃或异常关机。
• 数据库主版本的升级。
重置统计信息的影响
重置统计信息可以清除历史的使用情况数据,但不会影响数据库本身的性能或可用性。但是,这会导致有关性能和使用情况的历史数据丢失,而这些数据对于诊断长期趋势或问题可能会很有用。
此外,当一些第三方监控工具定期调用pg_stat_reset()时,自动清理工作进程可能无法正常工作。pg_stat_reset()带来的问题是,它会将n_dead_tup和n_mod_since_analyze重置为零。如果有人按月重置统计数据,那么这可能意味着,那些平时自动清理的调度频率低于每月一次的表,可能永远都不会触发自动清理,至少在防止事务 ID 环绕的清理工作访问它之前是不会的。