生产数据库中使用Postgres pg_dump会产生什么影响?

11

能查询一个数据库中有多少个多版本行吗?

我们想要衡量pg_dump对生产数据库的影响,并在需要时暂停它:它是否创建了太多的多版本行?

谢谢!

1个回答

13

pg_dump 不会创建任何行版本(也称为 tuples)。

pg_dump 的唯一影响是增加了 I/O 负载和长时间运行的事务。长时间的事务将阻止自动清理程序在转储期间回收死元组。

通常情况下,这并不是什么大问题,除非您的数据库有非常高的写入活动。为了缓解这个问题,您可以创建一个流复制备用服务器,将 max_standby_streaming_delay 设置为大于 pg_dump 的持续时间,并让 pg_dump 在那里运行。


感谢您的澄清,Laurenz。无论如何,这些“死”元组并不真正死亡,因为它们对pg_dump本身是可见的,但可能会发生更新它们时产生“多版本”行的情况,甚至可能迁移到不同的块,从而导致重新索引,这是非常糟糕的。也许有一种方法可以检测到这种情况? - artejera
哦,我明白了。在 pg_dump 运行的长时间只读事务中,无法清理死元组。您可以通过比较所有表中转储之前和之后 pg_stat_all_tables 中的 n_dead_tup 来衡量其影响。 - Laurenz Albe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接