细节:
数据库:Postgres.
版本:9.6
主持人:亚马逊RDS
问题:从快照还原后,数据库速度非常慢.
为什么:AWS称之为“第一次触摸惩罚”.当新恢复的实例可用时,EBS卷附件已完成,但并非所有数据都已从S3迁移到连接的EBS卷.只有在最初“触摸”数据后,RDS才会意识到数据不在EBS卷上,而是需要从S3中取出数据.这完全破坏了我们的表现.我们也无法使用dd或fio预先触摸数据,因为RDS不允许访问已安装的EBS卷.
我做了什么:联系AWS支持.他们承认这是一个问题,他们正在研究它,唯一的解决方案是从所有表中选择*.
为什么我仍然需要帮助:select *策略确实加快了速度(我从公共模式中选择了所有内容),但没有那么多.所以我读到了postgres stores data to disk.在磁盘上有很多东西,不会被用户定义的表中的简单选择“触及”.
我的问题:仅限于SQL查询/函数而不能直接访问底层磁盘,我可以使用哪些最好的sql语句在磁盘上“触摸”以便将其加载到EBS上来自S3的音量?
我的建议是手动触发真空分析,这将对范围内的每个表进行全表扫描,以便用新的统计数据更新规划器.例如,如果在一个主机中有多个数据库,则可以相当容易地将此范围仅限于某个模式,所讨论的数据库和Postgres模式可以帮助缩短总时间.
操作相当耗时,我不知道并行化的好方法.还有vacuumdb实用程序,但这只是运行一个带有vacuum语句的查询.
资料来源:几天前我问RDS支持这个问题.
[1] https://www.postgresql.org/docs/9.5/static/sql-vacuum.html
编辑:稍后将在移动设备上重新格式化
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。