我将如何为 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
是个好主意。
我们托管审计服务的数据。每隔几个月,新的审计就会出现与之前同类审计类似的问题。由于问题可以改变措辞和数量,我们将每个问题分别存储在每个审计中(我们通过“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
是个好主意。