首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres真空/恶魔在JDBC发布时部分工作

Postgres真空/恶魔在JDBC发布时部分工作
EN

Stack Overflow用户
提问于 2021-02-24 19:54:51
回答 1查看 151关注 0票数 1

首先,我知道依赖于应用程序层的手动真空是很奇怪的,但这就是我们决定运行它的方式。我有以下堆栈:

  1. HikariCP
  2. JDBC
  3. Postgres 11在AWS

现在问题就在这里。当我们用autovacuum=off全新的桌子开始的时候,手动吸尘器工作得很好。我可以看到dead_tuples的数量增长到阈值,然后返回到0。这些表是在并行连接中大量更新的(也使用了HOT)。在某种程度上,死行数就像100 k跳到阈值,然后返回到100 k。n_dead_tuples慢慢地爬上来。

现在最糟糕的是,当您从pg控制台发出真空时,所有死元组都会被清除,但奇怪的是,当应用程序发出真空时,它是成功的,但部分地清除了“记录的阈值量”,但不是全部?现在,我非常肯定以下几点:

auto-vacuum

  • There不运行transactions

  • No复制正在

  • 上这些表是“私有的”

从控制台发出带有vs JDBC的自动提交的真空有什么区别?为什么从控制台发出的真空是清洁所有的管,而来自JDBC的真空只清理它的一部分?JDBC真空是在池的新连接中运行的,是默认的隔离级别,是的,有些更新是并行进行的,但这与从控制台执行真空时相同。

来自池的连接是否已损坏,无法看到更新?与世隔绝是问题吗?可见地图腐败?引用旧元组的索引?

旁注:我观察到,同样的行为与自动真空和通过屋顶的成本限制一样,4000-8000,阈值违约+ 5%。一开始n_dead_tuples在4到5个小时内接近0.第二天,这张桌子上有86毫升的死元组。其他桌子都是吸尘器。

PS:我将尝试在JDBC中记录vac的详细内容。PS2:因为我们在AWS中运行,会不会是一个备份导致它停止清理?

PS3:当提到真空时,我指的是简单的真空,而不是全真空。我们不会发出完全真空。

EN

回答 1

Stack Overflow用户

发布于 2021-06-15 20:16:29

主要问题是真空由另一个用户运行。我所看到的真空是运行在数据上的热更新+选择,导致页面处于真空状态。

下一步:在所有模式和表中长期运行事务会影响空分。是的,所有的架构和表。更改为正确的用户修复了真空,但如果在任何其他open_in_transaction中存在schema.table,则会忽略它。

工作维护内存有帮助,但最终当系统在沉重的负荷下,所有的真空暂停。

因此,我们对DB的资源进行了一些升级,并添加了一个监视器,以帮助我们解决任何问题。

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

https://stackoverflow.com/questions/66357988

复制
相关文章

相似问题

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