postgresql - 我将如何为每几个月数据完全不同的表配置分析阈值?
问题描述
我们为审计服务托管数据。每隔几个月,就会有一次新的审计提出与以前同类审计类似的问题。由于问题可以改变措辞和数量,我们将每个问题分别存储在每个审计中(我们通过“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 个月的数据是针对分析器从未见过的问题时,这是有问题的,因此对于该数据的查询规划器没有有用的统计信息。
我们可以将此表的比例因子设置得极低,但这似乎是一种廉价的解决方案,可能会在未来引起问题。
解决方案
如果您有一个恒定的数据修改率,则autovacuum_analyze_scale_factor
将该表设置为 0 并仅使用autovacuum_analyze_threshold
是一个好主意。
推荐阅读
- javascript - @testing-library/dom window.getComputedStyle “未实现”错误,即使在设置了 computedStyleSupportsPseudoElements: true
- javascript - 迭代单元格值exceljs
- azure - 无法从 powershell 脚本创建 Databricks
- regex - 具有不同格式的十位电话号码的正则表达式
- python - 我怎样才能在整数之后停止显示小数点 .0?Python
- html - 为什么我的 flex 容器总是在左边有 10px 的边距?
- graphene-python - 使用 Altair 将多个文件上传到石墨烯
- linux - find exec rm: 没有这样的文件或目录
- reactjs - 在 ReactJS 中使用 Lambda/API 网关
- javascript - 替换为搜索工具/CMD-F 时自动重命名结束 HTML 标记