MongoDB 磁盘 IO 问题常见原因和优化策略有哪些?
对于云数据库 MongoDB 来说,底层的磁盘硬件性能对用户透明,完全交由云 厂商负责,用户只需要核心关注业务的正确使用 MongoDB,以及配置合适的 内存和 IOPS 上限。 通常来说,MongoDB 的 IO问题与内存的 CacheSize 大小息息相关。CacheSize 越大,表示能够缓存的热数据越大,那么系统需要的磁盘 IO 量也就越低,出现 IO 瓶颈的概率越低;反之,CacheSize 越小,表示能否缓存的热数据越少,系 统刷脏也更频繁,实例出现 IO 压力的概率也就越大。 可以通过 mongostat 或者阿里云数据库自治服务 DAS 实时查看当前的 cache dirty,目前阿里云数据库 MongoDB 暂不支持 cache dirty 历史情况查看。如果 出现 dirty>20%,并一直持续,说明内存淘汰压力很大,用户的请求线程会阻塞 参与 page 淘汰,请求延时就会增加,这时可以考虑"扩大内存"或者"扩大 IOPS"。 更多 mongostat 的使用方式可以参考: https://docs.mongodb.com/v4.2/reference/program/mongostat/ 还有一些与磁盘 IO 相关的参数和配置,比如 MongoDB Journal 和运行日志刷 盘,WriteConcern 设置,分片集群的 MoveChunk 等,这些因素我们建议用户 根据实际业务需求情况设置即可,一般来说,不必为了尽可能地提高 IO 能力 刻意修改。
关于更多 Journal 内容可参考: https://docs.mongodb.com/manual/core/journaling/ 关于更多 WriteConcern 内容可参考: https://docs.mongodb.com/manual/reference/write-concern/ 对于阿里云 MongoDB 来说,我们更推荐配置好合适的实例规格的同时,重点 关注 Index 的优化和部分应用系统的写入优化。
资源来源于《阿里云数据库运维实战问题改》
https://developer.aliyun.com/topic/download?spm=a2c6h.20345107.J_6399686890.1.2e1e17dbzKUX5r&id=8198
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。