1

我在 GCP 上将 postgresql 用于 cloudSQL。

一张表几乎处于插入过程中。(理论上每天超过1000万)

数据大约为 100 亿时,进行了自动抽真空。

此外,当自动清理运行时,其他进程只能由单个用户使用。

也许是真空冷冻的效果。

确切的原因是什么?

并且我决定如果自动真空运行的次数较少且频繁,则执行周期会更短,因此我将参数修改如下。

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

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

4

1 回答 1

1

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

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

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

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

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

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

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

于 2021-12-01T06:42:30.853 回答