首页 > 解决方案 > 我将如何为每几个月数据完全不同的表配置分析阈值?

问题描述

我们为审计服务托管数据。每隔几个月,就会有一次新的审计提出与以前同类审计类似的问题。由于问题可以改变措辞和数量,我们将每个问题分别存储在每个审计中(我们通过“related_questions”表将它们链接起来)。

审计

ID 姓名 及格分数
1 审计_1 100
2 审计_2 150

问题

ID audit_id 文本
1 1 q1
2 1 q2
3 2 q1
4 2 q2

然后我们有一个调查和响应表。调查是对审计的总体响应,而响应存储对每个问题的单独响应。

调查

ID audit_id 总体得分 经过
1 1 120 真的
2 1 95 错误的
3 2 200 真的
4 2 100 错误的

回应

ID 调查ID question_id 分数
1 1 1 60
2 1 2 60
3 2 1 60
4 2 2 35
5 3 3 100
6 3 4 100
7 4 3 50
8 4 4 50

分析阈值为base threshold + scale factor * number of tuples。这样做的问题是,一旦审计完成(几个月后),我们将永远不会收到针对该类别数据的新调查或回复。进来的新数据在概念上就是所有需要分析的东西。查询所有数据,但新数据的流量最多。

如果 10% 是今天的理想比例因子并且每周分析一次自动运行,那么几年后,由于元组的数量,分析可能每 4 个月自动运行一次。当过去 3 个月的数据是针对分析器从未见过的问题时,这是有问题的,因此对于该数据的查询规划器没有有用的统计信息。

我们可以将此表的比例因子设置得极低,但这似乎是一种廉价的解决方案,可能会在未来引起问题。

标签: postgresqldatabase-administration

解决方案


如果您有一个恒定的数据修改率,则autovacuum_analyze_scale_factor将该表设置为 0 并仅使用autovacuum_analyze_threshold是一个好主意。


推荐阅读