自动清理高写入、高更新和大多数读取的表类型

DDD*_*DDD 5 postgresql maintenance autovacuum amazon-rds

对于以下表来说,什么是好的自动真空设置(建议):

  • 高写表插入负载

    一天内插入 30-10,000 次。该表可以在没有负载的情况下闲置数周,但每周至少可以进行 3 次突发插入。

  • 高更新表

    它使用分区表数据,单次插入的大小是我的表大小的 3-8 倍。

  • 高写表

    单行仅更新一次,但一天内会突然更新唯一键,并且需要更新,可能是 30-10,000 个键更新。

  • 高读表

    大多数表都是高读取表,为我的数据仓库设置填充因子 80,容纳来自高更新表计算的表

我的删除每月进行一次并分批进行。与密钥相关的所有内容都会被删除或作为备份移动。

目前,对于高更新表,我的填充因子设置为 10-20 。

使用 TDS db.t3.large,但我在流量较低时切换到 db.t3.micro。

另外,设置填充因子真的很低会减慢选择速度吗?

Lau*_*lbe 5

这个问题太宽泛,但这里有一些有关配置 autovacuum 的提示:

  • 对于接收批量插入的表,请VACUUM随后运行显式操作或使用 PostgreSQL v13。

  • 对于具有多次更新的表,如果没有对更新的列建立索引fillfactor,则 a为 70 到 90(取决于行大小)是一件好事。10 或 20 简直就是对空间的疯狂浪费。

  • 对于只读表,无需关心 autovacuum。

  • 对于批量删除,您无能为力。如果您可以使用分区,那么这种痛苦可能会完全消失。

当然低fillfactor会对查询性能产生负面影响;这就是您为更有效的数据修改所付出的代价:

  • 对于顺序扫描,影响是显而易见的:您也必须读取所有空白空间。

  • 对于只读取单行的索引扫描,不会有性能影响。

  • fillfactor读取多行的索引扫描位于中间的某个位置,因为如果较低,它们将不得不读取更多块,因为行将分布在更多块上。

  • 不要忘记对缓存效率的影响:如果您的块主要由空气组成,则用于缓存的 RAM 也将主要包含死空间。