Docs 菜单

修复查询问题

Query Targeting 警报通常表明查询效率较低。

您可以在项目级警报设置页面中配置以下警报条件,以触发警报。

Query Targeting: Scanned Objects / Returned 当采样期间所有操作中扫描的文档平均数量与整个服务器返回的文档平均数量的比值超过定义的阈值时,就会触发警报。默认警报使用 1000:1 的阈值。

理想情况下,已扫描文档与已返回文档的比率应接近 1。高比率会对查询性能产生负面影响。

Query Targeting: Scanned / Returned 发生的条件是:为完成查询而检查的索引键数量相对于返回文档的实际数量达到或超过用户定义的阈值。默认情况下不启用此警报。

例子

以下 mongod 日志条目显示低效查询生成的统计信息:

<Timestamp> COMMAND <query>
planSummary: COLLSCAN keysExamined:0
docsExamined: 10000 cursorExhausted:1 numYields:234
nreturned:4 protocol:op_query 358ms

此查询已扫描 10,000 个文档,但仅返回了 4 个文档(比率为 1/2500),因而效率极低。未检查任何索引键,因此 MongoDB 扫描了集合中的所有文档(这被称为 集合扫描)。

当没有索引支持一个或多个查询或者现有索引仅部分支持一个或多个查询时,通常会发生查询定向警报。

Atlas Search 进程 (mongot) 用来保持 Atlas Search 索引更新的变更流游标可以提高查询目标比率,如果比率很高,则会触发查询定位警报

添加一个或多个索引,优化低效查询。

性能优化顾问提供创建索引的最简单、最快捷的方法。性能优化顾问监控 MongoDB 认为速度慢的查询并推荐索引以提高性能。Atlas 会根据集群中操作的执行时间动态调整慢查询阈值。

单剂慢速查询上的 Create Index ,以查看有关如何创建推荐索引的说明。

注意

如果查询超过慢速查询阈值,并且已扫描文档与已返回文档的比率大于警报中指定的阈值,则可以在不接收性能优化顾问的索引建议的情况下接收查询目标警报。

还可以使用以下资源来确定哪个查询生成该警报:

  • 实时性能面板可监控并显示 Atlas 集群中托管 MongoDB 的计算机上的当前网络流量和数据库操作。

  • MongoDB 日志维护 Atlas cluster 中每个 mongod 实例(包括查询)的活动帐户。

  • cursor.explain() 命令提供所有查询的 mongosh 性能详情。

  • Namespace Insights 监控集合级别的查询延迟。

  • 如果 Atlas 发现某些操作的执行时长超出了集群上所有操作的平均执行时间,Atlas 查询分析器会记录这些操作。

有关查询性能的更多信息,请参阅以下内容:

Atlas 提供以下方法来可视化查询定位:

  • 查询目标指标,突出显示扫描对象与返回对象的高比率。

  • Namespace Insights,用于监视集合级别的查询延迟。

  • 查询分析器,描述在集群上执行的特定低效查询。

您可以查看历史指标,以使集群的查询性能可视化。要在 Atlas 用户界面中查看 Query Targeting 指标,请执行以下操作:

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

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

  3. 如果尚未出现,请单击侧边栏中的 Clusters(集群)。

    会显示集群页面。

2
  1. 在集群的仪表盘上单击 View Monitoring

  2. Metrics 页面上,点击 Add Chart 下拉菜单,然后选择 Query Targeting

Query Targeting(查询定向)图表显示了服务器上所执行查询的以下指标:

衡量标准
说明

Scanned Objects / Returned

指示相对于返回文档的平均数量所检查的文档平均数量。

Scanned / Returned

指示为完成查询而检查的索引键数量,相对于返回文档的实际数量。

Atlas Search 进程 (mongot) 用来保持 Atlas Search 索引更新的变更流游标可以提高查询目标比率,如果比率很高,则会触发查询定位警报

如果其中任一指标超过用户定义的阈值,Atlas 就会生成相应的 Query Targeting: Scanned Objects / ReturnedQuery Targeting: Scanned / Returned 警报。

注意

您还可以使用实时性能面板实时查看操作的 Query Targeting(查询目标)比率。

Namespace Insights 监控集合级别的查询延迟。您可以查看某些主机和操作类型的查询延迟指标和统计信息。管理固定的命名空间,并选择最多五个命名空间以显示在相应的查询延迟图表中。

要访问命名空间洞察,请执行以下操作:

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

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

  3. 如果尚未出现,请单击侧边栏中的 Clusters(集群)。

    会显示集群页面。

2
  1. 在集群的仪表盘上单击 View Monitoring

  2. 单击 Query Insights 标签页。

  3. 单击 Namespace Insights 标签页。

查询分析器包含多个指标,而您可使用这些指标来查明特定的低效查询。最多能可视化过去 24 小时的查询操作。查询分析器可显示已记录查询的 Examined : Returned Ratio(已检查的索引键与返回文档的比值),而这可能有助于识别触发 Query Targeting: Scanned / Returned(查询定向:已扫描/已返回)警报的查询。该图表显示了为完成查询而检查的索引键数量与返回文档的实际数量的比值。

注意

默认的 Query Targeting: Scanned Objects / Returned 警报比率略有不同。采样期间扫描的平均文档数与返回的平均文档数的比率会触发此警报。

由于自动设置阈值,Atlas 可能不会记录影响查询定向比率的各个操作。但是,您仍然可以使用查询分析器和 Query Targeting(查询定位)指标来分析和优化查询性能。

要访问查询分析器:

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

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

  3. 如果尚未出现,请单击侧边栏中的 Clusters(集群)。

    会显示集群页面。

2
  1. 在集群的仪表盘上单击 View Monitoring

  2. 单击 Query Insights 标签页。

  3. 单击 Query Profiler 标签页。