首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在postgres表上减少所需的分析频率?

如何在postgres表上减少所需的分析频率?
EN

Database Administration用户
提问于 2018-09-18 20:46:08
回答 1查看 666关注 0票数 0

我有一个Postgres数据库,每天向其中插入大约2000万行。

这些记录是通过一个powershell脚本插入的,该脚本计算插入每个记录所需的平均时间。通常每条记录大约需要1.5ms (包括一些记录解析和触发器)。

每隔一次(通常在添加了大约300万行之后),处理时间会跳到大约12‘s/记录(这是一个非常明显的步骤更改,很快就会发生)

我已经找到解药了。我停止添加记录的过程,在表上进行分析,然后重新启动过程。插入时间返回到1.5ms/记录。虽然这只需要5-10分钟,但在这段停机时间内,我确实丢失了数千条记录。

数据库已经在夜间关闭了一段短暂的时间,所有的表都定期获得ANALYSEd,但是有什么方法可以避免在白天进行额外的分析呢?

(注:我尝试过简单地停止并重新启动插入进程-这没有什么区别。)只有停下来,做一个分析,然后重新开始,这才是不同的)

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-09-19 02:46:40

试着在不停止过程的情况下使用分析。我想你已经试过了,不是吗?一种选择是只分析特定的列,这比分析整个表所花费的时间要少。通常自动真空是在postgres数据库上活动的,启用该功能将允许数据库在后台进行分析。

检查:https://www.postgresql.org/docs/9.6/static/routine-vacuuming.html#AUTOVACUUM

这是运行分析时的公式:

代码语言:javascript
复制
analyze threshold = analyze base threshold + analyze scale factor * number of tuples

议员们在这里:

https://www.postgresql.org/docs/9.6/static/runtime-config-autovacuum.html#GUC-AUTOVACUUM-ANALYZE-THRESHOLD

https://www.postgresql.org/docs/9.6/static/runtime-config-autovacuum.html#GUC-AUTOVACUUM-ANALYZE-SCALE-FACTOR

这些值可以在表级别上设置,不需要对所有表都有相同的规则。

代码语言:javascript
复制
ALTER TABLE a_lot_of_inserts SET ( autovacuum_analyze_threshold = 50 , autautovacuum_analyze_scale_factor = 0.01 ) 

试着和他们玩,直到你找到正确的价值。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/217970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档