监控并改进慢速查询
Performance Advisor使用 MongoDB认为其速度缓慢的查询谓词监控任何操作,并建议新的索引以提高查询性能。 对于所选托管和时间段,Performance Advisor最多会评估在日志中找到的20 、 000个最近的慢速查询。
推荐的索引附带示例查询(按查询结构分组),且会针对可从推荐索引中受益的集合来运行。Performance Advisor 不会对 Cloud Manager 集群性能产生负面影响。
注意
要查看性能优化顾问,您必须:
在集群上运行 MongoDB 3.2 或更高版本。
使用 MongoDB Agent Automation 管理您的集群。
要了解有关 MongoDB 助手的更多信息,请参阅 MongoDB 助手。
要查看示例查询中的字段值,您必须是具有以下一个或多个角色的 Ops Manager 用户:
没有上述角色的用户无法看到字段值。
慢查询的常见原因
如果查询速度慢,常见原因包括:
当前索引不支持该查询。
您集合中的某些文档有大量的数组字段,搜索和索引的成本很高。
一个查询使用 $lookup 从多个集合中检索信息。
索引注意事项
索引可提高读取性能,但大量索引可影响写入性能, 因为索引必须在写入期间更新。 如果您的集合已经有多个索引, 请在决定是否创建新索引时考虑读写性能方面的权衡。 检查能否修改此类集合的查询以利用现有索引, 以及查询是否频繁发生以考虑投入成本创建新索引的合理性。
性能优化顾问可以帮助识别和删除不必要的索引。要了解更多信息,请参阅查看删除索引建议。
访问性能优化顾问
要访问 Performance Advisor :
Performance Advisor最多显示集群中所有集合的20查询结构以及这些结构的建议索引。 索引根据其Impact分数进行排名,该分数估计了创建索引将导致的整个集群的总操作延迟的改善。 有关索引排名的更多信息,请参阅查看索引排名。
索引建议
Performance Advisor建议的索引按各自的 Impact 分数排序。 Impact表示建议的索引将带来的估计性能改进。 有关Performance Advisor如何对索引进行排名的更多信息,请参阅查看索引排名。
Performance Advisor会在 Impact 分数为 5% 或更高的任何索引旁边显示一个警告图标,表示这些索引最有可能提高集群性能。
要了解如何创建Performance Advisor建议的索引,请参阅创建建议的索引。
索引指标
Performance Advisor建议的每个索引都包含以下指标。 这些指标专门适用于可通过索引改进的查询:
衡量标准 | 说明 |
---|---|
Execution Count | 每小时执行的查询次数将得到改进。
|
Average Execution Time | 受影响查询的当前平均执行时间(毫秒)。
|
Average Query Targeting | 受影响查询所返回的每个文档的平均文档读取数。查询定位分数越高,表示效率越低。有关查询定位的更多信息,请参阅查询定位。 |
In Memory Sort | 当前每小时需要在内存中排序的受影响查询次数。
|
样本查询
对于每个建议的索引, Performance Advisor会显示最常执行的查询结构,而这些结构将通过索引进行改进。 对于每个查询结构, Performance Advisor会显示以下指标:
衡量标准 | 说明 |
---|---|
Execution Count | 每小时执行的与查询结构匹配的查询数。
|
Average Execution Time | 与查询结构匹配的查询的平均执行时间(以毫秒为单位)。
|
Average Query Targeting | 匹配查询返回的每个文档的平均读取文档数。查询定位分数越高,表示效率越低。有关查询定位的更多信息,请参阅查询定位。 |
Performance Advisor还会显示与查询结构匹配的已执行单个示例查询,以及该查询的特定指标。
查询目标
每个索引建议包含一个 Average Query Targeting 分数,表示为索引的相应查询结构返回的每个文档读取了多少个文档。分数 1 表示非常高效的查询结构,因为读取的每个文档都与查询匹配,并与查询结果一起返回。所有建议的索引都是提高查询性能的机会。
筛选器索引建议
默认情况下,性能优化顾问会为部署中的所有集群建议索引。要仅显示特定集合的建议索引,请使用性能优化顾问顶部的 Collection 下拉列表。
您还可以使用性能优化顾问顶部的 Time Range(时间范围)下拉列表,调整性能优化顾问在建议索引时考虑的时间范围。
索引建议限制
索引的时间戳格式
Performance AdvisorMongoDB无法为配置为使用 ctime 时间戳格式 的 数据库提供索引建议。作为一种变通方法,可将此类数据库的时间戳格式设置为iso 8601 -utc或iso 8601 -local。
日志大小
性能优化顾问可分析多达 200,000 个集群的最新日志行。
创建建议的索引
您可以直接在 Performance Advisor 本身中创建 Performance Advisor 建议的 索引。创建索引时,请注意针对目标集合的读写操作的比例。索引会带来性能成本,但对于大型数据集的频繁查询来说,这是值得的。有关索引策略的更多信息,请参阅索引策略。
行为
步骤
要创建建议的索引,请执行以下操作:
(可选) 指定 索引选项 。
{ <option1>: <value1>, ... }
例子
以下选项文档指定索引的 unique
选项和 name
:
{ unique: true, name: "myUniqueIndex" }
(可选) 设置 排序规则 选项。
使用排序规则来指定特定语言的字符串比较规则,如字母大小写和重音符号规则。排序规则文档包含 locale
字段,表示 ICU 区域设置代码,还可能包含用于定义排序规则行为的其他字段。
例子
以下排序规则选项文档将法语排序规则的语言环境值指定为 fr
:
{ "locale": "fr" }
要查看 MongoDB 排序规则支持的区域设置列表,请参阅语言和区域设置列表。要了解有关排序规则的详情,包括默认为每个区域设置启用的排序规则选项,请参阅 MongoDB 手册的排序规则。
(可选) 启用以滚动方式构建索引。
警告
由于严重问题 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 数据库以小于4.2
的FCV运行,请重新同步头部数据库以确保头部数据库将新索引考虑在内。以小于4.2
的FCV运行,重新同步头部数据库以确保头部数据库考虑新索引。
Ops Manager 会自动取消在所有节点上未成功的滚动索引构建。当滚动索引构建在某些节点上完成,但在其他节点上失败时,Ops Manager 会取消构建并从成功构建索引的所有节点中删除索引。
在滚动索引构建取消的情况下,Ops Manager 会生成操作日志事件,并向项目所有者发送一封包含以下信息的通知电子邮件:
滚动索引构建失败的集群的名称
滚动索引构建失败的命名空间
包含集群和命名空间的项目
包含项目的组织
操作日志事件的链接
如需了解有关重建索引的更多信息,请参阅在副本集上构建索引。
注意
以下索引选项与以滚动方式构建索引不兼容:
如果您在 Options 窗格中指定这些选项,Ops Manager 会忽略它们。