监控并改进慢速查询
仅适用于 M10+ 集群和无服务器实例
性能优化顾问会监控 MongoDB 认为其速度缓慢的查询,并建议使用新索引来提高查询性能。慢查询的阈值会根据集群上的平均操作时间而变化,从而提供针对工作负载的建议。
推荐的索引附带示例查询(按查询结构进行分组),且会针对可从推荐索引中受益的集合来运行。Performance Advisor 不会对 Atlas 集群的性能产生负面影响。
您还可以使用 Namespace Insights 监控集合级查询延迟,并使用 Query Profiler 监控查询性能。
注意
慢查询的常见原因
如果查询速度慢,常见原因包括:
当前索引不支持该查询。
您集合中的某些文档有大量的数组字段,搜索和索引的成本很高。
一个查询使用 $lookup 从多个集合中检索信息。
必需的访问权限
如需查看慢速查询的集合并查看建议索引,您必须拥有项目的 Project Read Only
或更高访问权限。
要查看 Performance Advisor 中示例查询的字段值,您必须拥有此项目的 Project Observability Viewer
、Project Data Access Read Only
、Project Data Access Read/Write
或 Project Data Access Admin
访问权限。
如需启用或禁用 Atlas 托管的慢速操作阈值,您必须拥有项目的 Project Owner
访问权限。拥有 Organization Owner
访问权限的用户必须将自己作为 Project Owner
添加到项目中。
配置慢速查询阈值
默认情况下,Atlas 会根据集群中操作的执行时间动态 调整慢查询阈值。但是, 您可以选择退出此功能,而是使用 100 毫秒的固定慢查询阈值。 您可以使用 Atlas CLI、 Atlas Administration API 或 Atlas UI 禁用 Atlas 管理的 慢速操作阈值。
注意
启用了“Atlas 搜索”的 Atlas 集群不支持 Atlas 托管的慢速查询操作阈值。
对于 M0
、M2
与 M5
集群(已弃用)、无服务器实例(已弃用)和 Flex 集群,Atlas 默认会禁用 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 托管的慢速操作阈值:
如需使用 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,请执行以下操作:
AtlasGoClusters在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果尚未出现,请单击侧边栏中的 Clusters(集群)。
会显示集群页面。
查看建议。
Performance Advisor 获取过去 24 小时的索引建议。
如果 Performance Advisor 有推荐,请单击 Create Indexes 部分中的 View Recommendations 按钮。
如果 Performance Advisor 没有建议,要查找最多过去 5 天的索引建议,请单击 Create Indexes 部分中的 Explore Recommendations。
Performance Advisor 根据索引的 Impact 对索引进行排名,而索引基于关联操作读取的浪费字节总数。 要学习;了解有关索引排名的更多信息,请参阅查看索引排名。
AtlasGoClusters在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果尚未出现,请单击侧边栏中的 Clusters(集群)。
会显示集群页面。
索引建议
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-utc
或 iso8601-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 会为整个分片集群创建此索引。
步骤
要创建建议的索引,请执行以下操作:
(可选) 指定索引选项。
{ <option1>: <value1>, ... }
例子
以下选项文档指定索引的 unique
选项和 name
:
{ unique: true, name: "myUniqueIndex" }
(可选) 设定排序规则选项。
使用排序规则来指定特定语言的字符串比较规则,如字母大小写和重音符号规则。排序规则文档包含 locale
字段,表示 ICU 区域设置代码,还可能包含用于定义排序规则行为的其他字段。
例子
以下排序规则选项文档将法语排序规则的语言环境值指定为 fr
:
{ "locale": "fr" }
要查看 MongoDB 排序规则支持的区域设置列表,请参阅语言和区域设置列表。要了解有关排序规则的详情,包括默认为每个区域设置启用的排序规则选项,请参阅 MongoDB 手册的排序规则。
(可选) 启用以滚动方式构建索引。
重要
注意
Atlas UI 不支持用滚动构建的方式为 M0
个空闲集群和 M2/M5
个共享集群构建索引。您无法用滚动构建的方式为无服务器实例构建索引。
对于不能容忍由于索引构建而导致性能下降的工作负载, 请考虑以滚动方式构建索引。
要保持集群的可用性:
Atlas 一次从集群中移除一个节点,并从某一从节点开始。
一次可能有多个节点宕机,但 Atlas 始终保持大多数节点在线。
Atlas 自动取消未在所有节点上成功的 滚动索引构建。当滚动索引构建在某些节点上完成, 但在其他节点上失败时,Atlas 会取消构建 并从成功构建索引的所有节点中删除索引。
在滚动索引构建取消的情况下,Atlas 会生成操作日志事件,并通过电子邮件向项目所有者发送以下信息:
滚动索引构建失败的集群的名称
滚动索引构建失败的命名空间
包含集群和命名空间的项目
包含项目的组织
指向操作日志事件的链接
如需了解有关重建索引的更多信息,请参阅在副本集上构建索引。