【发布时间】:2021-01-13 16:48:42
【问题描述】:
我们在 AWS RDS 中托管了一个包含许多行 (100m) 的表。
- 如果表有不断的读、写和更新查询,我们如何才能有效地删除 50% 的行?
- 如何每天删除 1% 的数据?
表结构:
- created_at
- user_id
- 其他数据
我们每天都在尝试删除,但随后自动清理开始并且队列深度增加了。
【问题讨论】:
-
Partition the table 并在需要时删除“最旧”分区。
-
@PanagiotisKanavos 我在问题中添加了表格结构。我需要一直查询用户的所有数据。我可以通过分区来实现这一点吗?另外,我现在有这张表,我无法为当前数据添加分区,但只能为新数据添加分区。
-
如果您的系统无法处理自动清空,则说明它配置错误或配置不足。不管是什么触发了 autovacuum。
-
@jjanes 或者它有大量数据和大量流量。 100M 行是很多数据。如果您点击分区文档的链接,您会发现主要好处之一是它避免了清理。如果您分离分区而不是删除它,则几乎没有停机时间或阻塞,因为这本质上是元数据操作。
-
Postgres RDS 分区上的AWS announcement for Postgres 11 是一个关于分区及其一般好处的简短教程。 announcement for Postgres 12 解释了最新版本中如何改进分区修剪(在运行查询时避免不相关的分区)。
标签: postgresql amazon-web-services query-optimization amazon-rds