对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

configureQueryAnalyzer(数据库命令)

configureQueryAnalyzer

7.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.

该命令具有以下语法:

db.adminCommand(
{
configureQueryAnalyzer: <string>,
mode: <string>,
samplesPerSecond: <double>
}
)

db.collection.configureQueryAnalyzer() 有以下字段:

字段
类型
必要性
说明

configureQueryAnalyzer

字符串

必需

要为query采样配置的collection的命名空间。

mode

字符串

必需

查询分析器运行的模式。 必须设置为"full"或"off" 。

samplesPerSecond

double

Optional

每秒的样本数。

  • 当mode设置为"full"时, samplesPerSecond必须设置在0和50之间。

  • 当mode设置为"off"时,服务器会忽略samplesPerSecond 。

For details, see samplesPerSecond Upper Limit.

db.collection.configureQueryAnalyzer() 需要以下角色之一:

  • dbAdmin 针对包含正在分析的collection的数据库的角色

  • clusterManager 针对集群的角色

运行db.collection.configureQueryAnalyzer()时请考虑以下行为:

删除或重命名集合时,会自动禁用查询采样。 如果要在重新创建或重命名collection后对查询进行采样,则必须重新配置查询采样。

如果在副本集上运行查询分析,并将其转换为具有专用配置服务器的分片集群,则会停止查询分析。

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

采样的查询存储在一个内部集合中,该集合具有带有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 configureQueryAnalyzer on 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"
}
)