监控并改进慢速查询
仅适用于 M10+ 集群和无服务器实例
性能优化顾问会监控 MongoDB 认为其速度缓慢的查询,并建议使用新索引来提高查询性能。慢查询的阈值会根据集群上的平均操作时间而变化,从而提供针对工作负载的建议。
推荐的索引附带示例查询(按查询结构进行分组),且会针对可从推荐索引中受益的集合来运行。Performance Advisor 不会对 Atlas 集群的性能产生负面影响。
您还可以使用 Namespace Insights 监控集合级查询延迟,并使用 Query Profiler 监控查询性能。
注意
慢查询的常见原因
如果查询速度慢,常见原因包括:
当前索引不支持该查询。
您集合中的某些文档有大量的数组字段,搜索和索引的成本很高。
一个查询使用 $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 托管的慢速查询操作阈值。
对于M0
、M2
、M5
集群和无服务器实例,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 会生成操作日志事件,并通过电子邮件向项目所有者发送以下信息:
滚动索引构建失败的集群的名称
滚动索引构建失败的命名空间
包含集群和命名空间的项目
包含项目的组织
指向操作日志事件的链接
如需了解有关重建索引的更多信息,请参阅在副本集上构建索引。