Docs 菜单
Docs 主页
/
MongoDB Ops Manager
/ /

监控并改进慢速查询

在此页面上

  • 慢查询的常见原因
  • 索引注意事项
  • 访问性能优化顾问
  • 索引建议
  • 创建建议的索引

性能优化顾问使用 MongoDB 认为其速度缓慢的查询谓词监控任何操作,并建议新的索引以提高查询性能。对于所选主机和时间段,性能优化顾问最多会评估在日志中找到的20 、 000个最近的慢速查询。

推荐的索引附带示例查询(按查询结构分组),且会针对可从推荐索引中受益的集合来运行。Performance Advisor 不会对 Cloud Manager 集群性能产生负面影响。

注意

如果查询速度慢,常见原因包括:

  • 当前索引不支持该查询。

  • 您集合中的某些文档有大量的数组字段,搜索和索引的成本很高。

  • 一个查询使用 $lookup 从多个集合中检索信息。

索引可提高读取性能,但大量索引可影响写入性能, 因为索引必须在写入期间更新。 如果您的集合已经有多个索引, 请在决定是否创建新索引时考虑读写性能方面的权衡。 检查能否修改此类集合的查询以利用现有索引, 以及查询是否频繁发生以考虑投入成本创建新索引的合理性。

性能优化顾问可以帮助识别和删除不必要的索引。要了解更多信息,请参阅查看删除索引建议

要访问 Performance Advisor

1
2

如果副本集位于分片集群中,则先点击包含该副本集的分片集群。

3
4
5

Performance Advisor 显示集群中所有集合最多 20 种查询结构以及这些结构的建议索引。Performance Advisor 根据索引的 Impact 对索引进行排名,并依据读取的总浪费字节数分别显示为 HighMedium。要了解有关索引排名的更多信息,请参阅查看索引排名

注意

如果慢查询日志的聚合管道中包含连续的 $match 阶段,则这两个阶段可以合并到第一个 $match 阶段,从而形成一个单独的 $match 阶段。因此,Performance Advisor 中的查询结构可能与您实际运行的查询不同。

Performance Advisor 根据其建议的索引的 Impact 进行排名,根据读取的浪费字节总数指示 HighMedium 。如需进一步了解“性能优化顾问”如何对索引排名,请参阅“查看索引排名”。

如需了解如何创建“Performance Advisor”建议的索引,请参阅“创建建议的索引”。

性能优化顾问建议的每个索引都包含以下指标。 这些指标会专门应用于此索引可改善的查询:

衡量标准
说明
Execution Count
每小时执行的查询次数将得到改进。
Average Execution Time
受影响查询的当前平均执行时间(毫秒)。
Average Query Targeting
受影响查询所返回的每个文档的平均文档读取数。查询定位分数越高,表示效率越低。有关查询定位的更多信息,请参阅查询定位
In Memory Sort
当前每小时需要在内存中排序的受影响查询次数。
Average Docs Scanned
扫描文档的平均数量。
Average Docs Returned
平均返回文档数。
Avgerage Object Size
平均对象大小。

对于每个建议索引,性能优化顾问都会显示索引可以改进的最常执行的查询结构。 对于每个查询结构,性能优化顾问显示以下指标:

衡量标准
说明
Execution Count
每小时执行的与查询结构匹配的查询数。
Average Execution Time
与查询结构匹配的查询的平均执行时间(以毫秒为单位)。
Average Query Targeting
匹配查询返回的每个文档的平均读取文档数。查询定位分数越高,表示效率越低。有关查询定位的更多信息,请参阅查询定位
Average Docs Scanned
扫描文档的平均数量。
Average Docs Returned
平均返回文档数。

性能优化顾问还显示了与查询形状匹配的每个已执行的示例查询, 以及该查询的特定指标。

每个索引建议包含一个 Average Query Targeting 分数,表示为索引的相应查询结构返回的每个文档读取了多少个文档。分数 1 表示非常高效的查询结构,因为读取的每个文档都与查询匹配,并与查询结果一起返回。所有建议的索引都是提高查询性能的机会。

默认情况下,性能优化顾问会为部署中的所有集群建议索引。要仅显示特定集合的建议索引,请使用性能优化顾问顶部的 Collection 下拉列表。

您还可以使用性能优化顾问顶部的 Time Range(时间范围)下拉列表,调整性能优化顾问在建议索引时考虑的时间范围。

Performance AdvisorMongoDB无法为配置为使用 ctime 时间戳格式 的 数据库提供索引建议。作为一种变通方法,可将此类数据库的时间戳格式设置为iso 8601 -utciso 8601 -local。

性能优化顾问可分析多达 200,000 个集群的最新日志行。

您可以直接在 Performance Advisor 本身中创建 Performance Advisor 建议的 索引。创建索引时,请注意针对目标集合的读写操作的比例。索引会带来性能成本,但对于大型数据集的频繁查询来说,这是值得的。有关索引策略的更多信息,请参阅索引策略

  • 您一次只能通过性能优化顾问创建一个索引。如果要同时创建更多索引,则可使用数据浏览器Shell 来实现

  • Ops Manager 始终在部署的顶层创建索引。如果您在查看性能优化顾问时为分片集群中的单个分片创建索引,则 Ops Manager 会为整个分片集群创建此索引。

要创建建议的索引,请执行以下操作:

1

性能优化顾问打开 Create Index(创建索引)对话框,并根据您选择的索引预填充 Fields(字段)。

2
{ <option1>: <value1>, ... }

例子

以下选项文档指定索引的 unique 选项和 name

{ unique: true, name: "myUniqueIndex" }
3

使用排序规则来指定特定语言的字符串比较规则,如字母大小写和重音符号规则。排序规则文档包含 locale 字段,表示 ICU 区域设置代码,还可能包含用于定义排序规则行为的其他字段。

例子

以下排序规则选项文档将法语排序规则的语言环境值指定为 fr

{ "locale": "fr" }

要查看 MongoDB 排序规则支持的区域设置列表,请参阅语言和区域设置列表。要了解有关排序规则的详情,包括默认为每个区域设置启用的排序规则选项,请参阅 MongoDB 手册的排序规则

4

警告

由于严重问题 SERVER-68925 MongoDB Ops Manager,使用某些 版本 的MongoDB Agent 助手的 部署不应在运行以下MongoDB 版本的集群上执行 自动滚动索引构建 :

  • MongoDB 4.2.19-4.2.22

  • MongoDB 4.4.13-4.4.16

  • MongoDB 5.0.6-5.0.11

  • MongoDB 6.0.0-6.0.1

您可以继续在集群上安全地执行手动滚动索引构建 。要安全地执行自动滚动索引构建,请将 MongoDB Agent 升级到 12.0.11.7606 或更高版本,或者将集群升级到:

  • MongoDB 4.2.23 或更高版本

  • MongoDB 4.4.17 或更高版本

  • MongoDB 5.0.12 或更高版本

  • MongoDB 6.0.2 或更高版本

重要

滚动索引构建仅在满足特定条件时才会成功。 为确保索引构建成功,请避免使用通常会触发重启循环的以下设计模式:

注意

数据浏览器不支持以滚动方式为独立部署构建索引。

以滚动方式构建索引可降低构建索引对副本集分片集群的性能影响。 为了保持集群可用性, MongoDB Ops Manager从节点开始,一次从集群中删除一个节点

以滚动方式构建索引后,如果MongoDB database以小于 4.2FCV运行,请重新同步头部数据库以确保头部数据库考虑新索引。

Ops Manager 会自动取消在所有节点上未成功的滚动索引构建。当滚动索引构建在某些节点上完成,但在其他节点上失败时,Ops Manager 会取消构建并从成功构建索引的所有节点中删除索引。

在滚动索引构建取消的情况下,Ops Manager 会生成操作日志事件,并向项目所有者发送一封包含以下信息的通知电子邮件:

  • 滚动索引构建失败的集群的名称

  • 滚动索引构建失败的命名空间

  • 包含集群和命名空间的项目

  • 包含项目的组织

  • 操作日志事件的链接

如需了解有关重建索引的更多信息,请参阅在副本集上构建索引

注意

下列索引选项无法在以滚动方式构建索引时使用:

如果您在 Options 窗格中指定这些选项,Ops Manager 会忽略它们。

5
6

重要

当索引构建完成后,Ops Manager 会生成操作日志事件,并向项目所有者发送包含以下信息的通知电子邮件:

  • 索引构建的完成日期

  • 索引构建完成的集群的名称

  • 完成索引构建的命名空间

  • 包含集群和命名空间的项目

  • 包含项目的组织

  • 指向操作日志事件的链接

后退

分析慢速查询