如何查找CosmosDB(MongoDB API)中资源消耗最高的查询?
CosmosDB MongoDB API 排查高RU负载尖峰的替代方案
针对你遇到的事后排查负载尖峰需求,虽然没有完全对应SQL Server sys.dm_exec_query_stats的MongoDB查询,但可以通过以下几种方案定位高RU消耗的操作:
1. 利用 CosmosDB 内置查询存储
CosmosDB 提供了查询存储功能,可直接追踪历史查询的RU消耗数据:
- 操作路径:Azure门户 → 你的CosmosDB资源 → 数据资源管理器 → 目标集合 → 「查询存储」标签
- 这里会展示按总RU消耗、平均RU、执行次数排序的历史查询,包含查询文本、耗时等信息,能直接定位触发尖峰的高消耗查询。
2. 启用慢查询日志并分析
通过配置慢查询日志,将高RU/长耗时的操作记录下来,事后可通过诊断日志分析:
启用慢查询
在Azure门户的CosmosDB资源「连接字符串」中,给MongoDB连接字符串添加参数:
&slowms=100&logSlowQueries=true
(slowms=100表示记录执行时间超过100ms的查询,可根据实际调整)
分析慢查询日志
在Azure门户「诊断设置」中,将MongoRequests日志导出到Log Analytics,用Kusto查询筛选尖峰时段的高RU操作:
AzureDiagnostics | where ResourceType == "COSMOSDB" and Category == "MongoRequests" | where TimeGenerated between (datetime(尖峰开始时间) and datetime(尖峰结束时间)) | sort by RequestCharge desc | top 10 by RequestCharge | project TimeGenerated, RequestCharge, DurationMs, CommandText, DatabaseName
3. 查看集合操作统计
运行MongoDB兼容命令,获取集合的累积操作统计,辅助推断尖峰时段的负载来源:
db.runCommand({ collStats: "你的集合名称", verbose: true })
返回结果中的stats和wiredTiger字段包含读写次数、平均响应时间等数据,结合时间范围可定位高频或高消耗操作类型。
4. Azure Monitor 事后分析
通过Azure Monitor的日志查询,筛选尖峰时段的请求数据:
AzureDiagnostics | where ResourceType == "COSMOSDB" and Category == "MongoRequests" | where RequestCharge > 100 // 筛选RU消耗超过阈值的请求 | sort by RequestCharge desc | project TimeGenerated, RequestCharge, OperationName, CommandText
内容的提问来源于stack exchange,提问作者Leonardo
相关产品推荐
相关产品推荐

