定义
configureQueryAnalyzer7.0版本新增。
为副本集或分片集群上的集合配置查询采样。 采样查询向
analyzeShardKey提供信息,以计算有关分片键的读取和写入分布的指标。
兼容性
此命令可用于以下环境中托管的部署:
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
注意
This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
该命令具有以下语法:
db.adminCommand( { configureQueryAnalyzer: <string>, mode: <string>, samplesPerSecond: <double> } )
命令字段
db.collection.configureQueryAnalyzer() 有以下字段:
字段 | 类型 | 必要性 | 说明 |
|---|---|---|---|
| 字符串 | 必需 | 要为query采样配置的collection的命名空间。 |
| 字符串 | 必需 | 查询分析器运行的模式。 必须设置为 |
| double | Optional | 每秒的样本数。
For details, see samplesPerSecond Upper Limit. |
访问控制
db.collection.configureQueryAnalyzer() 需要以下角色之一:
dbAdmin针对包含正在分析的collection的数据库的角色clusterManager针对集群的角色
行为
运行db.collection.configureQueryAnalyzer()时请考虑以下行为:
删除的集合和重命名的集合
删除或重命名集合时,会自动禁用查询采样。 如果要在重新创建或重命名collection后对查询进行采样,则必须重新配置查询采样。
转换为分片集群
如果在副本集上运行查询分析,并将其转换为具有专用配置服务器的分片集群,则会停止查询分析。
samplePerSeconds 上限
samplesPerSecond的上限为50 。 较高的速率会导致采样查询在不到四天内填满 10GB 磁盘空间。
下表显示了每个采样率和持续时间组合的估计磁盘使用量:
平均采样查询大小 (kB) | samplesPerSecond | 采样持续时间(天) | 采样查询数 | 采样查询的总大小 (GB) |
|---|---|---|---|---|
0.5 | 0.1 | 7 | 60,480 | 0.03024 |
0.5 | 10 | 7 | 6,048,000 | 3.024 |
0.5 | 50 | 7 | 30,240,000 | 15.12 |
1000 | 50 | 1 | 4,320,000 | 4320 |
16,000 | 50 | 1 | 4,320,000 | 69,120 |
queryAnalysisSampleExpirationSecs
采样的查询存储在一个内部集合中,该集合具有带有expireAfterSeconds的 TTL 索引。 要配置expireAfterSeconds ,请使用queryAnalysisSampleExpirationSecs服务器参数。 采样查询会在queryAnalysisSampleExpirationSecs后自动删除。
查询采样进度
要监控查询采样过程,请使用$currentOp阶段。 有关示例,请参阅采样查询。
查看采样查询
要查看所有collection或特定collection的采样查询,请使用$listSampledQueries聚合阶段。
要查看查询分析器捕获的每种命令类型的计数,请使用:
db.getSiblingDB("admin").aggregate( [ { "$listSampledQueries": { ns: "<db.collectionName>" } }, { "$group": { "_id": { ns: "$ns", cmdName: "$cmdName" }, count: { "$sum": 1 } } }, { "$project": { "_id.ns": 1, "_id.cmdName": 1, "count": 1 // Explicitly include fields to output } }, { "$sort": { "_id.ns": 1 } } ] );
[{ count: 10, cmdName: 'aggregate' }, { count: 51, cmdName: 'delete' }, { count: 25, cmdName: 'distinct' }, { count: 100, cmdName: 'find' }, { count: 24, cmdName: 'findAndModify' }, { count: 7, cmdName: 'update' }]
当您有足够的样本时,可以禁用查询分析器。
限制
You cannot run
configureQueryAnalyzeron Atlas flex clusters.您无法在独立运行的实例上运行
configureQueryAnalyzer。您无法直接针对
--shardsvr副本集运行configureQueryAnalyzer。 在分片集群上运行时,configureQueryAnalyzer必须针对mongos运行。您无法针对time-series collection运行
configureQueryAnalyzer。您无法对具有Queryable Encryption的collection运行
configureQueryAnalyzer。
输出
configureQueryAnalyzer 返回一个文档,其中包含描述旧配置的字段(如果存在)和描述新配置的字段。
oldConfiguration,如果存在,则包含描述旧配置的字段。newConfiguration包含描述新配置的字段。
configureQueryAnalyzer 返回类似于以下内容的文档:
{ ok: 1, oldConfiguration: { mode: ..., samplesPerSecond: ... } newConfiguration: { ... } }
示例
启用查询采样
要以每秒五个样本的速率对test.students collection 启用查询采样,请使用以下命令:
db.adminCommand( { configureQueryAnalyzer: "test.students", mode: "full", samplesPerSecond: 5 } )
禁用查询采样
test.students要禁用在collection上的查询采样,请使用以下命令:
db.adminCommand( { configureQueryAnalyzer: "test.students", mode: "off" } )