从快照还原后,RDS实例变得无法使用的缓慢。

10

详细信息:

数据库: Postgres。
版本: 9.6
主机: Amazon RDS

问题: 恢复快照后,数据库操作变得非常缓慢。

原因: AWS 称之为“首次访问惩罚”。当新的恢复实例可用时,EBS 卷附加已完成,但并未将所有数据从 S3 迁移到已附加的 EBS 卷。只有在最初“触摸”数据之后,RDS 才会意识到数据不在 EBS 卷上,并且需要从 S3 中提取数据。这完全破坏了我们的性能。我们也无法使用 ddfio 预触碰数据,因为 RDS 不允许访问已安装的 EBS 卷。

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

我仍然需要帮助的原因: select * 策略确实加快了速度(我从public模式中选择了所有内容),但还不足以满足需求。所以我研究了 PostgreSQL 如何将数据存储到磁盘中。有很多内容存储在磁盘上,但用户定义的表格仅是其中之一。

我的问题: 由于只能使用 SQL 查询/函数且无法直接访问底层磁盘,我可以使用哪些最佳 SQL 语句尽可能地“触碰”磁盘,以便从 S3 加载到 EBS 卷上?


这个有任何更新或修复吗?现在我发现在还原快照后进行简单插入的速度变慢了。 - Jan aka uptech
1个回答

9
我的建议是手动触发Vacuum分析,这将对范围内的每个表进行全表扫描,以使用最新的统计信息更新规划器。您可以很容易地将其范围限定在特定模式下,例如所涉及的数据库和Postgres模式,如果您在一个主机中有多个数据库,则可以帮助减少总时间。

该操作需要相当长的时间,我不知道有什么好方法可以并行执行。还有vacuumdb实用程序,但它只运行一个包含vacuum语句的查询。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接