Docs 菜单

监控并改进慢速查询

仅适用于 M10+ 集群和无服务器实例

性能优化顾问会监控 MongoDB 认为其速度缓慢的查询,并建议使用新索引来提高查询性能。慢查询的阈值会根据集群上的平均操作时间而变化,从而提供针对工作负载的建议。

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

您还可以使用 Namespace Insights 监控集合级查询延迟,并使用 Query Profiler 监控查询性能。

注意

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

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

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

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

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

如需查看慢速查询的集合并查看建议索引,您必须拥有项目的 Project Read Only 或更高访问权限。

要查看 Performance Advisor 中示例查询的字段值,您必须拥有此项目的 Project Observability ViewerProject Data Access Read OnlyProject Data Access Read/WriteProject Data Access Admin 访问权限。

如需启用或禁用 Atlas 托管的慢速操作阈值,您必须拥有项目的 Project Owner 访问权限。拥有 Organization Owner 访问权限的用户必须将自己作为 Project Owner 添加到项目中。

默认情况下,Atlas 会根据集群中操作的执行时间动态 调整慢查询阈值。但是, 您可以选择退出此功能,而是使用 100 毫秒的固定慢查询阈值。 您可以使用 Atlas CLI、 Atlas Administration API 或 Atlas UI 禁用 Atlas 管理的 慢速操作阈值。

注意

启用了“Atlas 搜索”的 Atlas 集群不支持 Atlas 托管的慢速查询操作阈值。

对于 M0 集群、Flex 集群、M2/M5 集群(已弃用)和无服务器实例(已弃用), Atlas默认禁用 Atlas 托管的慢速查询操作阈值,并且您无法启用。

重要

默认情况下,Atlas 会根据集群中操作的执行时间动态 调整慢查询阈值。如果 您禁用 Atlas 管理的慢速查询阈值,则不再动态调整。 MongoDB 默认固定慢速查询阈值为 100 毫秒。 我们不建议您将固定慢速查询阈值设置为低于 100 毫秒。

要禁用 Atlas 托管的慢速运行阈值,并使用 100 毫秒的固定阈值:

如需使用 Atlas CLI 禁用 Atlas 托管的项目慢速操作阈值,请运行以下命令:

atlas performanceAdvisor slowOperationThreshold disable [options]

要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas performanceAdvisor slowOperationThreshold disable

在当前项目的项目设置中,切换 Managed Slow OperationsOff

Atlas 默认启用 Atlas 托管的慢速操作阈值。重新启用您之前禁用的 Atlas 托管的慢速操作阈值:

如需使用 Atlas CLI 启用 Atlas 托管的项目慢速操作阈值,请运行以下命令:

atlas performanceAdvisor slowOperationThreshold enable [options]

要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas performanceAdvisor slowOperationThreshold enable

在当前项目的“项目设置”中,将Managed Slow Operations切换为On

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

如需使用 Atlas CLI 以 <database>.<collection> 格式返回最多 20 个名称空间,以解决集合查询速度慢的问题,请运行以下命令:

atlas performanceAdvisor namespaces list [options]

要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas performanceAdvisor namespaces list

要为性能优化顾问和查询分析器使用 Atlas CLI 识别的慢查询返回查询日志行列项,请运行以下命令:

atlas performanceAdvisor slowQueryLogs list [options]

要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas performanceAdvisor slowQueryLogs list

要使用 Atlas CLI 为慢查询集合返回建议索引,请运行以下命令:

atlas performanceAdvisor suggestedIndexes list [options]

要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档中的 Atlas performanceAdvisor suggestedIndexes 列表

要使用 Atlas UI 访问 Performance Advisor,请执行以下操作:

1

警告

导航改进正在进行中

我们目前正在推出改进的全新导航体验。如果以下步骤与Atlas用户界面中的视图不匹配,请参阅预览文档。

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

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

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

    会显示集群页面。

2

如果副本集是分片集群的一部分,请先单击包含副本集的分片集群。

3
4

Performance Advisor 获取过去 24 小时的索引建议。

  • 如果 Performance Advisor 有推荐,请单击 Create Indexes 部分中的 View Recommendations 按钮。

  • 如果 Performance Advisor 没有建议,要查找最多过去 5 天的索引建议,请单击 Create Indexes 部分中的 Explore Recommendations

Performance Advisor 根据索引的 Impact 对索引进行排名,而索引基于关联操作读取的浪费字节总数。 要学习;了解有关索引排名的更多信息,请参阅查看索引排名。

5

通过以下任一选项筛选结果:

  • Filter by shards and hosts

  • Filter by namespace

  • Filter by time range

  • Filter by date and time

1

警告

导航改进正在进行中

我们目前正在推出改进的全新导航体验。如果以下步骤与Atlas用户界面中的视图不匹配,请参阅预览文档。

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

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

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

    会显示集群页面。

2
3

Performance Advisor 根据索引的 Impact 对索引进行排名,而索引基于关联操作读取的浪费字节总数。 要进一步学习;了解Performance Advisor如何对索引进行排名,请参阅查看索引排名。

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

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

衡量标准
说明

Execution Count

每小时执行的查询次数将得到改进。

Average Execution Time

受影响查询的当前平均执行时间(毫秒)。

Average Query Targeting

受影响查询所返回的每个文档的平均文档读取数。查询定位分数越高,表示效率越低。有关查询定位的更多信息,请参阅查询定位

In Memory Sort

当前每小时需要在内存中排序的受影响查询次数。

Average Docs Scanned

扫描文档的平均数量。

Average Docs Returned

平均返回文档数。

Average Object Size

平均对象大小。

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

衡量标准
说明

Execution Count

每小时执行的与查询结构匹配的查询数。

Average Execution Time

与查询结构匹配的查询的平均执行时间(以毫秒为单位)。

Average Query Targeting

匹配查询返回的每个文档的平均读取文档数。查询定位分数越高,表示效率越低。有关查询定位的更多信息,请参阅查询定位

Average Docs Scanned

扫描文档的平均数量。

Average Docs Returned

平均返回文档数。

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

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

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

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

Performance Advisor 无法为配置使用 ctime 时间戳格式的 MongoDB 数据库提供索引建议。作为一种变通方法,可将此类数据库的时间戳格式设置为 iso8601-utciso8601-local。如需了解有关时间戳格式的更多信息,请参阅 mongod --timeStampFormat。

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

注意

日志分析速率限制只适用于 Performance Advisor 用户界面、Query Insights 用户界面、访问跟踪用户界面和和 Atlas Search 查询分析用户界面。可下载的日志文件始终是完整的。

性能优化顾问不会为时间序列集合提供性能建议。

性能优化顾问为索引建议提供用户反馈按钮。 Atlas 对无服务器实例隐藏了此按钮。

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

  • 如果已为项目禁用数据浏览器,则无法通过 Performance Advisor 创建索引。您仍可查看 Performance Advisor 建议,但必须从 mongosh 创建这些索引。

  • 您一次只能通过性能优化顾问创建一个索引。如果要同时创建更多索引,则可使用 Atlas 用户界面驱动程序Shell 来实现

  • Atlas 始终为整个集群创建索引。如果您在查看 Performance advisor 时为分片集群中的单个分片创建索引,则 Atlas 会为整个分片集群创建此索引。

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

1

Performance Advisor 打开 Create Index 对话框,并根据您选择的索引预填充 Fields

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

例子

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

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

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

例子

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

{ "locale": "fr" }

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

4

重要

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

注意

Atlas用户界面不支持通过滚动构建为 M0 免费集群、Flex 集群和 M2/M5 共享集群构建索引。您无法使用滚动构建为无服务器实例构建索引。

对于不能容忍由于索引构建而导致性能下降的工作负载, 请考虑以滚动方式构建索引。

要保持集群的可用性:

  • Atlas 一次从集群中移除一个节点,并从某一从节点开始。

  • 一次可能有多个节点宕机,但 Atlas 始终保持大多数节点在线。

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

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

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

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

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

  • 包含项目的组织

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

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

注意

Unique 索引选项无法在以滚动方式构建索引时使用。如果您在 Options(选项)窗格中指定 unique,则 Atlas 将拒绝配置,并显示错误消息。

5
6

重要

索引构建完成后,Atlas 会生成操作日志事件,并通过电子邮件向项目所有者发送以下信息:

  • 索引构建的完成日期

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

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

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

  • 包含项目的组织

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