我对 Cosmos DB API 返回的 QueryMetrics 有疑问。
根据 Azure Portal,我的数据库中有 5 个分区。我PopulateQuery=true
在FeedOptions
查询 CosmosDB 以确认和检查昂贵的查询时进行设置。因为它是一个SELECT *
查询,所以我期望每个分区返回 5 个查询指标,每个分区具有正确的分区 ID。
我确实得到了 5 个不同的查询指标,但每个指标都有相同的 partitionId。
这是错误还是我做错了什么。请参见下面的示例。
DocumentClient documentClient = null;
DocumentCollection collection = null;
FeedOptions feedOptions = new FeedOptions
{
EnableCrossPartitionQuery = true,
PopulateQueryMetrics = true
MaxItemCount = -1,
MaxDegreeOfParallelism = 5,
MaxBufferedItemCount = 100
};
string query = "SELECT * FROM docs
WHERE docs.Type = @docType AND
(docs.A - docs.B - (IS_NULL(docs.C)?0:docs.C))
/ (IS_NULL(docs.Info.D)?1:docs.Info.D.E)
> @threshold"
IDocumentQuery<dynamic> documentQuery = documentClient.CreateDocumentQuery(Collection.SelfLink, query, feedOptions).AsDocumentQuery();
while (documentQuery.HasMoreResults)
{
FeedResponse<dynamic> feedResponse = await documentQuery.ExecuteNextAsync();
IReadOnlyDictionary<string, QueryMetrics> partitionIdToQueryMetrics = feedResponse.QueryMetrics;
foreach (KeyValuePair<string, QueryMetrics> kvp in partitionIdToQueryMetrics)
{
string partitionId = kvp.Key;
QueryMetrics queryMetrics = kvp.Value;
DoSomeLoggingOfQueryMetrics(query, partitionId, queryMetrics);
}
}
数据按 ID 分区。该 ID 不是查询的一部分。
上述查询中所有 5 次的 PartitionID 都是 0。但所有其他指标都不同。
这不应该是 0、1、2、3、4。