首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres -几个大桌子上的自动真空

Postgres -几个大桌子上的自动真空
EN

Database Administration用户
提问于 2019-03-14 11:16:08
回答 1查看 2.7K关注 0票数 0

我有一个问题的自动真空-我有几个大表(超过1000万条记录)是非常频繁地更新(500次每秒更新)。一切正常,直到膨胀发生为止:)

正如我所看到的,有些表在超过10分钟的时间内是不自动空出的,而在这段时间内,会生成许多死元组,这些元组会破坏性能。

那么,我的问题是-自动真空过程的流程是什么?例如,如果我有10个应该真空的表(在这些表上达到了自动真空阈值),Postgres真空表是一个接一个地进行,还是会平行地对所有的表进行真空?我在官方文件里找不到那个信息。另一个问题-- Postgres会在每个数据库中产生单个自动真空工作人员吗?如果我只有一个数据库,那么我不需要更改"autovacuum_max_workers“参数?

我已经更改了以下自动真空配置参数:

  • autovacuum_vacuum_cost_limit = 1000
  • autovacuum_max_workers =6
  • autovacuum_vacuum_scale_factor = 0.01
  • maintenance_work_mem =512 maintenance_work_mem

除此之外,我还在大桌子上配置了自动真空阈值(因为1% od 1千万是100 k):

  • 修改表mytable集(autovacuum_vacuum_threshold = 15000);
  • 修改表mytable集(autovacuum_vacuum_scale_factor = 0);
EN

回答 1

Database Administration用户

发布于 2019-03-14 16:17:33

如果只有一个数据库需要注意,那么直到autovacuum_max_workers都会在该数据库中启动。但是,autovacuum_naptime需要几段时间才能将它们全部发射。在给定的时间里,每个人都需要一张不同的桌子来处理。

然而,这可能没有您想要的效果,因为IO节流阈值将在它们之间被划分。这意味着,虽然多个表是并行清空的,但当打开IO节流时,增加autovacuum_max_workers数并不会提高清空的总体速度。使用更高的autovacuum_max_workers值的目的是确保如果所有的工作人员(可能较低的最大值)都被大型表单独固定,那么小表不会被完全忽略。

如果您担心autovac的工作速度不够快,我只会选择大型机和set autovacuum_vacuum_cost_delay = 0,以便关闭IO节流和set log_autovacuum_min_duration = 0,这样您就可以看到正在发生的事情了。这应该会很快给你一个明确的答案。相对于渐进式改变autovacuum_vacuum_cost_limit,它将缓慢地给出不明确的答案。

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

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

复制
相关文章

相似问题

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