上述消息表明,统计信息收集器历程将统计数据写入暂时文件,由于需要频繁收集信息(stats collector通过UDP接收统计更新,并通过定期将统计数据写入暂时文件来共享统计数据。这些文件可以达到数十兆字节,并且每秒最多写入2次),这会导致大量的I/O操作。在高负载期间,这可能会导致出现“LOG: using stale statistics instead of current ones because stats collector is not responding”的消息。为了办理这个题目,强烈建议将pg_stat_tmp挂载到基于RAM的文件系统上。为此,需要有用配置stats_temp_directory参数,将其设置为基于RAM的文件系统路径。
在大多数系统上,stats_temp_directory的默认位置仅在数据目录内。
Statistics collection improvement in PostgreSQL 15
When set to "cache," an object's first access to its statistics is stored there until the transaction is complete, unless pg_stat_clear_snapshot() is performed. This is the default option.
If the option is set to "snapshot," all statistics available in the current database are cached at initial access until the transaction is complete, unless pg_stat_clear_snapshot() is performed.
PostgreSQL会在事务开始时获取一个统计信息的快照,并在整个事务期间返回该快照的数据。这与cache模式类似,但快照提供了更强的一致性保证。快照是在事务开始时创建的,因此它反映了事务开始时的数据库状态。 What happens at restart?