优化MongoDB查询,确保应用程序实现最佳性能。随着数据使用量和需求的变化,这种情况可能会发生在开发期间或开发后期。随着集合的增长,定期查看查询性能有助于确定集群何时需要扩展扩展或扩展扩展。
行为
当您向MongoDB发送查询时,服务器会解释该查询,构建查询计划以确定如何最好地检索数据,执行该计划,然后将结果返回给客户端。
为了提高查询性能,请考虑MongoDB如何为您的特定查询构建和执行计划,并确定问题区域,例如受益于索引的字段、低效筛选器和扩展问题。
索引
索引将单个字段的值或集合中的字段存储在单独的数据结构中。在读取操作中,它们允许MongoDB在索引中搜索以识别相关文档,而不是整个集合。在写入操作中, MongoDB必须将更改写入集合并更新索引。
在许多情况下,使用索引可以加快查询。此改进取决于对哪些字段进行了索引以及查询使用的筛选器。示例,如果查询不应用投影或筛选器,集合扫描可能比索引扫描更有效。
有关更多信息,请参阅 索引。
任务
故障排除
解决方案
详情
Atlas Query Profiler
Atlas查询分析器使用集群中的日志数据帮助诊断和监控运行缓慢的查询。 它通过 Query Insights 接口聚合、筛选和可视化图表中的性能统计信息。
您可能会发现,与数据库分析器相比,此可视化在识别慢速查询和性能异常值方面更方便。
通过查询分析器,您可以宏观了解应用程序负载。 这可以帮助您识别哪些查询速度较慢,并为您提供一些有关如何提高其性能的见解,例如:
查询运行需要多长时间
查询检查的文档数量
查询是否使用索引
有关详细信息,请参阅使用查询分析器监控查询性能。
数据库分析器
数据库分析器收集有关在MongoDB上运行的查询的详细信息,并将这些信息存储在固定大小的 system.profile
集合中。
重要
数据库分析器会影响数据库性能和磁盘使用情况。在生产部署中启用此功能之前,请考虑对性能和存储的影响。
有关更多信息,请参阅分析器开销。
通过数据库分析器,您可以从微观角度了解当前应用程序负载中的慢速查询。这可以让您深入了解如何提高查询性能,例如:
查询运行需要多长时间
查询检查的文档数量
查询是否使用索引
有关详细信息,请参阅数据库分析器输出。
解释
find()
和 aggregate()
方法提供了 explain()
方法,可用于检索特定查询或聚合操作的查询计划和执行统计信息。
explain()
方法允许您识别特定查询的潜在问题,例如:
低效过滤器
索引使用无效
潜在的扩展性能问题
集合统计信息
$collStats
聚合阶段提供有关特定集合及其使用情况的统计信息。您可能会发现这对于识别索引和性能问题很有用。
这可以提供有用的信息,例如:
集合及其索引的存储使用情况
文档的平均大小
索引统计信息
$indexStats
聚合阶段提供集合索引使用情况的统计信息。这可以帮助您识别特定的索引使用问题,例如:
查询是否使用索引以及使用频率
索引是否冗余