批量删除记录后,AWS Aurora Postgres 集群上的 CPU 负载为 100%

问题描述

我们有一个计划的清理作业,用于删除具有过去时间戳的记录。我们以 10'000 个为批次选择它们,并通过主键(复合键整数和时间戳)删除它们。此作业可能会在几秒钟内删除多达 200,000 条记录。

我们可以在运行此作业后立即一​​致地复制所有读取器上的 cpu 负载达到 100%(因此阻止应用程序)。我们还可以一致地看到,运行 VACUUM 会立即使负载恢复正常。

cpu 负载:批量删除和 VACUUM:

CPU load: batch-delete and VACUUM

这是一个已知问题吗?我们可以做些什么来避免 100% 的 cpu 峰值?

设置

  • aurora (AWS) postgresql 12.6 集群
    • 1 个作者,2 个读者 (db.r5.2xlarge)
  • 数据库
    • 数据库大小:50 GB
    • 索引大小:30 GB
    • 一张桌子:
      • 主键是复合键(整数、时间戳)
      • 时间戳列上的附加索引(为了选择过去的记录)
  • 加载
    • 编写器上的 cpu:15%-25%
    • 阅读器的 cpu:5%
  • 提交吞吐量
    • 写入器上 300 次计数/秒
    • 每个阅读器 300 次/秒

自动真空设置:

姓名 价值
自动吸尘器
log_autovacuum_min_duration 10s
autovacuum_max_workers 3
autovacuum_naptime 5s
autovacuum_vacuum_threshold 50
autovacuum_analyze_threshold 50
autovacuum_vacuum_scale_factor 0.1
autovacuum_analyze_scale_factor 0.05
autovacuum_freeze_max_age 200000000
autovacuum_vacuum_cost_delay 5ms
autovacuum_vacuum_cost_limit 1200

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)