Cristian Diaconescu
Cristian Diaconescu

Reputation: 35641

How to get metrics for a request on CosmosDB graph collection?

I want to find out details about a Gremlim query - so I set the PopulateQueryMetrics property of the FeedOptions argument to true.

But the FeedResponse object I get back doesn't have the QueryMetrics property populated.

var queryString = $"g.addV('{d.type}').property('id', '{d.Id}')";
var query = client.CreateGremlinQuery<dynamic>(graphCollection, queryString,
    new FeedOptions {
        PopulateQueryMetrics = true
    });
while (query.HasMoreResults)
{
    FeedResponse<dynamic> response = await query.ExecuteNextAsync();
    //response.QueryMetrics is null
}

Am I missing something?

Upvotes: 0

Views: 480

Answers (1)

Bruce Chen
Bruce Chen

Reputation: 18465

According to your description, I created my Azure Cosmos DB account with Gremlin (graph) API, and I could encounter the same issue as you mentioned. I found a tutorial Monitoring and debugging with metrics in Azure Cosmos DB and read the Debugging why queries are running slow section as follows:

In the SQL API SDKs, Azure Cosmos DB provides query execution statistics.

IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
 UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName), 
 “SELECT * FROM c WHERE c.city = ‘Seattle’”, 
 new FeedOptions 
 { 
 PopulateQueryMetrics = true, 
 MaxItemCount = -1, 
 MaxDegreeOfParallelism = -1, 
 EnableCrossPartitionQuery = true 
 }).AsDocumentQuery();
FeedResponse<dynamic> result = await query.ExecuteNextAsync();

// Returns metrics by partition key range Id 
IReadOnlyDictionary<string, QueryMetrics> metrics = result.QueryMetrics;

Then, I queried my Cosmos DB Gremlin (graph) account via the SQL API above, I retrieved the QueryMetrics as follows:

enter image description here

Note: I also checked that you could specify the SQL expression like this SELECT * FROM c where c.id='thomas' and c.label='person'. For adding new Vertex, I do not know how to construct the SQL expression. Moreover, the CreateDocumentAsync method does not support the FeedOptions parameter.

Per my understanding, the PopulateQueryMetrics setting may only work when using the SQL API. You could add your feedback here.

Upvotes: 1

Related Questions