Docs 菜单
Docs 主页
/
MongoDB Atlas
/ /

监控并改进慢速查询

在此页面上

  • 慢查询的常见原因
  • 必需的访问权限
  • 配置慢速查询阈值
  • 索引注意事项
  • 访问性能优化顾问
  • 索引建议
  • 创建建议的索引

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

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

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

您还可以使用 命名空间见解 监控集合级 查询延迟 ,并使用 查询分析器监控查询性能。

注意

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

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

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

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

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

如需查看“性能优化顾问”中示例查询的字段值,您必须拥有项目的 Project Data Access Read/Write 或更高访问权限。

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

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

注意

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

对于M0M2M5 集群和无服务器实例,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 Operations切换为Off

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 performanceAdvisor suggestIndexes 列表的 Atlas CLI 文档。

提示

请参阅:相关链接

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

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

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

  3. 如果 Clusters(数据库部署)页面尚未出现,请单击侧边栏中的 Database(数据库)。

    此时会显示“集群”页面。

2

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

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

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

  3. 如果 Clusters(数据库部署)页面尚未出现,请单击侧边栏中的 Database(数据库)。

    此时会显示“集群”页面。

2
3

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

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

如需了解如何创建“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。

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

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

注意

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

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

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

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

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

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

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

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

1

性能优化顾问会打开Create Index对话框,并根据您选择的索引预填充Fields

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

例子

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

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

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

例子

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

{ "locale": "fr" }

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

4

重要

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

注意

Atlas UI 不支持用滚动构建的方式为 M0 个空闲集群和 M2/M5 个共享集群构建索引。您无法用滚动构建的方式为无服务器实例构建索引。

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

要保持集群的可用性:

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

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

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

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

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

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

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

  • 包含项目的组织

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

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

注意

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

5
6

重要

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

  • 索引构建的完成日期

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

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

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

  • 包含项目的组织

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

后退

分析慢速查询