我查看了这些表(pg_stat_user_indexespg_stat_user_tables),发现了许多没有使用的索引。
但是,在考虑执行任何删除这些索引的操作之前,我需要了解对这些数据(idx_scan)的分析是在什么时期进行的,自数据库创建以来一直是这样吗?
pg_stat_database表(columnstats_reset)中,有一个日期通常是今天还是15天前,但是这个过程是否会干扰我上面提到的表?
未执行任何命令pg_stat_reset()
pg_stat_reset()命令是否清除表(pg_stat_user_indexespg_stat_user_tables)?
我的目标是了解收集数据的时间段,以便我能做出决定。

最佳答案

统计数据是累积的,并且从上创建群集时开始保留。
因此,如果您看到pg_stat_database.stats_reset有规律地发生变化,那么肯定有人或某事在使用pg_stat_reset()函数显式地执行此操作。
这样做有些问题,因为这会重置所有统计信息,包括pg_stat_user_tables中的统计信息,这些统计信息在自动真空和自动分析发生时起支配作用。因此,在重置之后,在autoanalyze收集新的统计数据之前,这些将有点不正常。
更好的方法是定期拍摄快照并计算差异。
在确定索引是否可以屏蔽之前,您应该收集较长时间的数据,这是正确的。例如,某些活动可能每月只发生一次,但需要某些索引。
在删除索引之前,请考虑索引除了被扫描之外还有其他用途:
它们可以是UNIQUE或返回一个约束,在这种情况下,即使它们从未被扫描过,它们也有其用途。
表达式上的索引使PostgreSQL收集索引表达式分布的统计信息,这对查询规划和执行计划的质量有显著的影响。
您可以使用this blog中的查询来查找所有毫无用处的索引。

关于postgresql - idx_scan统计信息是否自动重置(默认)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56008959/

10-13 08:16