详细信息:
数据库: Postgres。
版本: 9.6
主机: Amazon RDS
问题: 恢复快照后,数据库操作变得非常缓慢。
原因: AWS 称之为“首次访问惩罚”。当新的恢复实例可用时,EBS 卷附加已完成,但并未将所有数据从 S3 迁移到已附加的 EBS 卷。只有在最初“触摸”数据之后,RDS 才会意识到数据不在 EBS 卷上,并且需要从 S3 中提取数据。这完全破坏了我们的性能。我们也无法使用 dd
或 fio
预触碰数据,因为 RDS 不允许访问已安装的 EBS 卷。
我的解决方案: 联系 AWS 支持。他们承认这是个问题,正在解决,唯一的解决方案是从所有表中选择 select *
。
我仍然需要帮助的原因: select *
策略确实加快了速度(我从public
模式中选择了所有内容),但还不足以满足需求。所以我研究了 PostgreSQL 如何将数据存储到磁盘中。有很多内容存储在磁盘上,但用户定义的表格仅是其中之一。
我的问题: 由于只能使用 SQL 查询/函数且无法直接访问底层磁盘,我可以使用哪些最佳 SQL 语句尽可能地“触碰”磁盘,以便从 S3 加载到 EBS 卷上?