Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs 菜单
Docs 主页
/ /

使用查询分析器监控查询性能

仅在 M10+ 集群上可用

查询分析器可诊断并监控性能问题。此监控功能可在 Atlas 用户界面中公开运行缓慢的查询及其关键性能统计信息。

Atlas收集并显示任何mongod 实例的统计信息。查询分析器会存储您的mongod 查询 日志数据(可通过查询分析器或Atlas CLI直接访问这些日志数据),并用这些数据来识别慢速查询。 Atlas会在实例的Query Insights 标签页的Query Profiler 页面上显示此数据。

注意

查询分析器与数据库分析器不同。 查询分析器根据mongod日志中的条目识别特定的低效查询。 数据库分析器会根据指定的分析级别,返回在mongod上执行的命令的详细信息。 更改分析级别不会影响查询分析器中显示的慢速查询。

默认下, Atlas查询分析器会显示整个集群的操作。您可以使用 Filter by Hosts 下拉列表过滤查询分析器视图,仅显示来自指定主机的操作,这允许您查看与一个或多个特定主机相关的数据,或者查看主节点 (primary node in the replica set)或从从节点(secondary node from replica set)托管组。 Cluster 侧栏中的 Query Insights 选项会显示信息,揭示在设立时间范围内的数据库慢速操作,如下所示:

  • Operation Execution Time

  • Docs Examined : Returned Ratio

Atlas查询分析器支持在同一时间戳前后的同一集合上运行的同一类型的分箱操作,以支持其他数据点。

为了支持更多数据点, Atlas查询分析器支持满足以下条件的分箱操作:

  • 这些操作属于相同的操作类型。

  • 这些操作在同一命名空间中运行。

  • 这些操作具有匹配的 hasSortusedIndex 布尔值。

  • 这些操作在相同的时间戳前后执行。

Atlas根据每个mongod托管的平均操作执行时间来管理该托管的慢速操作阈值。 可以使用db.setProfilingLevel mongosh命令更改此阈值。

注意

使用 db.setProfilingLevel 更改慢速操作的阈值,可能会影响性能和系统日志设置。在生产部署中使用 db.setProfilingLevel 调整查询分析器设置之前,请仔细考虑对性能和安全的影响。重新启动节点后,查询分析器设置将重置为默认值。

此外,放大散点图的 x 轴将重新获取慢操作,并可能提供所选时间段内慢操作的更详细信息。

注意

要选择退出 Atlas 托管的慢速操作阈值并使用 100 毫秒的固定慢速查询阈值,请使用 Atlas 管理 API。请参阅禁用托管慢速操作阈值。对于免费集群(以前称为 M0)和 Flex 集群, Atlas默认禁用 Atlas 托管的慢速查询操作阈值,并且您无法启用它。

重要

在启用查询分析器之前,请阅读以下注意事项。

个人资料数据可能包括敏感信息,包括数据库查询内容等。确保将这些数据提供给 Atlas 符合您的信息安全实践。

Query Profiler 每次显示约 100,000 个采样日志。如果在选定的主机和时间范围内记录了 100,000 个或更少的日志,则会显示所有日志。

Atlas 在 Query Profiler 图表中最多显示 100,000 个数据点。

日志数据分批处理。数据最长可比实时数据延迟五分钟。

如果集群出现活动高峰,并产生大量日志信息,Atlas 可能会在一段时间内停止收集和存储新日志。

注意

日志分析速率限制仅应用于Performance Advisor用户界面、查询见解用户用户界面、访问跟踪用户用户界面和MongoDB搜索查询分析用户用户界面。可下载的日志文件始终是完整的。

某些高延迟 $lookup 操作不会为外部集合生成慢速查询日志。发生这种情况的原因是,慢速查询日志与查询分析器中报告的操作相对应,而延迟指标仅在获取集合锁时才会递增。

如果分片上的 $lookup查询可以执行本地读取,则 $lookup 不会记录用于查询外部集合的单独操作。本地读取是指对外部集合的查询仅针对执行当前操作的同一分片。因此,$lookup 操作会增加命名空间见解延迟指标和操作计数,但不会为外部集合生成慢查询日志。

要为项目启用或禁用 Performance Advisor 和查询分析器,您必须具有该项目的 Project Owner 角色或其父组织的 Organization Owner 角色。

要在查询分析器中查看查询性能,您必须对项目具有Project Read OnlyProject Observability Viewer访问权限。

Atlas默认启用查询分析器。

要禁用查询分析器:

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。

  3. 在侧边栏中,单击 Project Settings

显示项目设置页面。

2

Database Monitoring Tools 部分中,将 Performance Advisor and Profiler 切换为 Off

以下部分介绍如何使用查询分析器查找慢速查询。

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。

  3. 在侧边栏中,单击 Database 标题下的 Clusters

会显示集群页面。

2
  1. 单击集群的名称以打开 Cluster 侧边栏。

  2. 单击 Cluster 侧栏中的 Query Insights

  3. 单击 Query Profiler 标签页。

    默认下,查询分析器会显示主节点 (primary node in the replica set)和从从节点(secondary node from replica set)日志中的所有数据。

3

查询分析器使用图表和图表正下方的表格来帮助您找到慢速操作。

  1. Filter by Hosts 下拉列表中选择要查看指标的一个或多个主机。

  2. Time RangeFilter by Date and Time 下拉列表中选择时间段。默认下,查询分析器会显示过去 24 小时的数据。

  3. Operation Execution Time 下拉列表中选择指标。选项包括:

    • Operation Execution Time (默认): MongoDB 数据库操作完成所需的总时间,通常以毫秒为单位。

    • Response Length:数据库为响应操作而返回的文档或数据的大小,以字节为单位。

    • Docs Examined:为查找查询结果而在集合中扫描的文档总数。

    • Docs Returned:与Atlas为查询返回的查询条件相匹配的文档数量。

    • Keys Examined:查询执行期间数据库扫描的索引项总数。

    • Num Yields:暂停某一操作以允许其他操作继续进行的次数。

    • Docs Examined : Returned Ratio:通过将 Docs Examined 除以 Docs Returned 计算得出的比率。

    • Keys Examined : Returned Ratio:通过将 Keys Examined 除以 Docs Returned 计算得出的比率。

  4. 单击 All operation types 下拉列表可更改要分析的操作。默认下,查询分析器会显示所有操作类型。

4
  • 单击图表上的散点图点。这将打开一个包含摘要信息的右侧面板。

  • 单击右侧面板中的 View more details,可查看完整的查询结构、详细的执行统计信息、查询日志和改进建议。

  • 单击并沿 XY 轴拖动,可放大所收集数据的特定子集。

  • 向下滚动到图表下方的表格,按集合查看慢速查询列表。单击表中的一行以获取更多详细信息。

5

检查慢速查询时,首先查看这些关键指标和模式:

  • Operation Execution Time (millis):查询时间(以毫秒为单位)。这是慢速查询的主节点 (primary node in the replica set)指标。如果该指标持续较高,请考虑优化查询逻辑、批处理结果或重新考虑数据的访问方式。

  • 如果在查询日志中看到 "planSummary": "COLLSCAN":,则该查询执行了集合扫描并且未使用索引。这是添加索引或重写查询的强烈信号。

  • Docs Examined (docsExamined): MongoDB为查询检查的文档数。如果 Docs Examined 明显大于 Docs Returned,这通常意味着:

    • 该查询扫描了许多文档以查找结果,这可能会影响网络延迟和应用程序性能。

    • 对于该特定查询,现有索引效率低下或不是最佳索引。要学习;了解更多信息,请参阅索引。

  • Keys Examined (keysExamined):为查询扫描的索引键数。如果对于包含过滤条件的查询,该指标为 0,则很可能没有索引,并且MongoDB扫描了整个集合。这是速度缓慢的主节点 (primary node in the replica set)。如果 Docs Examined 非常高,而 Keys Examined0 或与 Docs Examined 相比非常低,则您可能正在扫描集合或非选择性索引。要学习;了解更多信息,请参阅索引

  • Docs Examined : Returned Ratio 较高意味着查询正在扫描大量文档,但返回的结果很少,这可能表明查询效率低下或缺失索引。

  • Num Yields (numYields):频繁的让出表明存在资源争用或长时间运行的操作正在暂停,可能会影响总体吞吐量。

  • Response Length:响应长度过大表示查询返回的数据过多。考虑使用投影来限制返回的字段。

  • Has Index Coverage (usedIndex):该布尔值确认是否使用了MongoDB索引。如果将应建立索引的查询设立为 false,请添加索引。

    注意

    该指标反映MongoDB搜索索引的使用情况。

  • 如果将 hasSort 设立为 true,则表示查询包含 sort() 方法。无索引的 sort() 方法可能会占用大量资源。检查搜索索引配置并确认其是否支持 sort() 方法。

后退

查询延迟

在此页面上