我将如何为 table 配置分析阈值,其中数据每隔几个月就完全不同?

How would I configure analyze threshold for a table where the data is categorically different every couple months?

我们托管审计服务的数据。每隔几个月,新的审计就会出现与之前同类审计类似的问题。由于问题可以改变措辞和数量,我们将每个问题分别存储在每个审计中(我们通过“related_questions”table 来 link)。

审计

id name passing_score
1 audit_1 100
2 audit_2 150

问题

id audit_id text
1 1 q1
2 1 q2
3 2 q1
4 2 q2

然后我们进行了调查和回复table。调查是对审计的整体回应,而回应存储对每个问题的个人回应。

调查

id audit_id overall_score pass
1 1 120 true
2 1 95 false
3 2 200 true
4 2 100 false

回复

id survey_id question_id score
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 个月的数据用于分析器从未见过的问题时,这是有问题的,因此对于此数据的查询规划器没有有用的统计信息。

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

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