Postgresql中真空冻结的作用

Effect of vacuum freeze in Postgresql

我在 GCP 上为 cloudSQL 使用 postgresql。

一个table快要插入了。 (理论上每天1000万以上)

在数据大约100亿时进行了自动清理。

此外,虽然自动清理 运行ning,但其他进程只能由单个用户使用。

可能是真空冷冻的效果吧

具体原因是什么?

并且我认为如果auto vacuum运行的次数少且频繁的话,执行周期会更短,所以我修改了参数如下。

autovacuum_freeze_max_age : 2 billion -> 100 million
autovacuum_multixact_freeze_max_age : 2 billion -> 100 million

是否有任何参数需要修改以进一步提高性能?

是的,这些是使反环绕自动清理 运行 更频繁的正确设置,因此单个 运行 更小。

如果将 vacuum_freeze_min_age 设置为 0,则可以进一步改进此 table 的问题,以便在 autovacuum 运行s 时冻结所有行。

请注意,您可以像这样在单个 table 上设置这些参数:

ALTER TABLE tab SET (
   autovacuum_freeze_max_age = 100000000,
   autovacuum_multixact_freeze_max_age = 100000000,
   vacuum_freeze_min_age = 0
);

更好,因为使用这些参数的默认设置可能会更好地为您数据库中的其他 table 提供服务。

请注意,所有这些的一个简单替代方法是升级到 PostgreSQL v13 或更高版本,正是出于这个原因,autovacuum 运行 在仅插入 table 上更频繁。

VACUUM 一样,设置高 maintenance_work_mem 将提高性能。