从快照恢复后 RDS 实例速度慢得无法使用

RDS instance unusably slow after restoring from snapshot

详情:

数据库:Postgres。
版本:9.6
主机:亚马逊 RDS

问题:从快照恢复后,数据库慢得无法使用。

原因: AWS 称为 "first touch penalty" 的东西。当新恢复的实例可用时,EBS 卷附加完成,但并非所有数据都已从 S3 迁移到附加的 EBS 卷。只有在最初 "touching" 数据之后,RDS 才会意识到数据不在 EBS 卷上,它需要从 S3 中提取数据。这完全破坏了我们的表现。我们也不能使用 ddfio 来预接触数据,因为 RDS 不允许访问已安装的 EBS 卷。

我所做的:联系 AWS 支持。他们承认这是一个问题,他们正在努力解决这个问题,唯一的解决方案是从所有表中 select *

为什么我仍然需要帮助: select * 策略确实加快了速度(我 select 编辑了 public 模式中的所有内容) ,但没有所需的那么多。所以我阅读了如何使用 postgres stores data to disk。磁盘上有很多东西无法通过用户定义表中的简单 select "touched" "touched"。

我的问题: 仅限于 SQL queries/functions 并且不能直接访问底层磁盘,什么是最好的 sql 我可以在磁盘上尽可能多地使用 "touch" 语句,以便从 S3 将其加载到 EBS 卷上?

我的建议是手动触发真空分析,这将对范围内的每个 table 进行完整 table 扫描,以使用新统计信息更新计划程序。您可以很容易地将其范围限定为特定模式,例如,如果您在一台主机中有多个数据库,则相关数据库和 Postgres 模式可以帮助减少总时间。

该操作相当耗时,我不知道并行化它的好方法。还有 vacuumdb 实用程序,但这只是运行一个带有 vacuum 语句的查询。

资料来源:我几天前问过 RDS 支持这个问题。

[1] https://www.postgresql.org/docs/9.5/static/sql-vacuum.html

编辑:稍后将在移动设备上重新格式化