我上次从MongoDB Atlas收到警报:
Disk I/O % utilization on Data Partition has gone above 70 on nvme2n1
但是我不知道如何本地化/查询/索引/代码某部分/有问题的集合。
我该以何种方式执行分析,以找出问题的根本原因?
我上次从MongoDB Atlas收到警报:
Disk I/O % utilization on Data Partition has gone above 70 on nvme2n1
但是我不知道如何本地化/查询/索引/代码某部分/有问题的集合。
我该以何种方式执行分析,以找出问题的根本原因?
并不是回答,但我看到许多人面临类似的问题。
在我的情况下,根本原因是:我们有一个包含大量文档的集合,其中包含一些元数据的坐标列表(实际上是坐标列表),每次更新它时,我们都会像添加新坐标一样多次更新它。+一些其他操作。
据我所知,MongoDB无法获取文档的部分内容,它会获取完整的文档,并且当我们获取许多不同的大型文档时,它们无法适应MongoDB内存缓存,每次访问都要访问硬盘,这导致了这个问题。
所以,我们只需将此文档拆分为几个文档即可解决此问题。虽然我们需要频繁访问以更新/添加此数据,但我们将其保存到不同的文档中,最终,在处理完成后,我们将所有这些文档汇集成一个大型文档,以进行“历史检查”。
更新 08/24/2023
“磁盘利用率%”指标已被废弃,可以使用“磁盘队列深度”和“磁盘IOPS”指标来监控磁盘性能。
在MongoDB,我们倡导不断改进用户体验。作为这一承诺的一部分,我们对数据库监控指标进行了重要调整;我们从监控图表和警报中移除了“磁盘利用率%”指标。
这里是关于如何监控MongoDB的更多详细信息。未来,我们建议您使用“磁盘队列深度”和“磁盘IOPS”指标作为更全面和可操作的替代方案。我们的团队经过仔细评估,选择了与您遇到的真实性能场景最符合的指标,“磁盘队列深度”指标提供了更好的磁盘饱和度衡量,“磁盘IOPS”指标提供了更好的磁盘利用率衡量。通过关注这些指标,您可以获得更有价值的系统性能洞察,并识别潜在的瓶颈。
数据分区的磁盘I/O利用率超过90%
,在实例重新启动维护后出现。与Atlas支持团队讨论后,我们对这个指标有了清楚的理解。
了解磁盘I/O利用率
磁盘I/O利用率
和数据分区上的磁盘I/O利用率
的定义请参考doc
磁盘I/O利用率警报表示在指定阈值下请求被发出的时间百分比。
如果发出到包含MongoDB集合数据的任何分区的请求时间百分比达到或超过阈值,则会发生
数据分区上的磁盘I/O利用率
。
这意味着,如果在给定的时间段内有至少一个I/O操作正在进行中,操作系统将报告“100%磁盘利用率”,因为该磁盘在那段时间内被“100%使用”。设备饱和发生在为串行请求提供服务的设备接近100%时。但对于并行提供请求的设备,如RAID阵列和现代SSD,这个数字不反映它们的性能限制。
可能的操作以帮助解决磁盘利用率%
警报
Atlas性能顾问
查看慢查询和建议的索引。索引策略
以进行可能的进一步索引改进。查询性能
以查看查询如何使用索引。配置文件
以优化执行时间较长的查询实例大小
和IOPS
来源:Mongo Doc