查询性能测量宇宙数据库DB

问题描述:

Im新的宇宙数据库,我尝试做一些性能测量查询对宇宙数据库集合(documentdb api)duo c#-sdk。我尝试使用简单的秒表来完成。但是当我用下面的代码查询时,我总是得到14ms之间的波动测量数据,并且像33ms一样。它是独立的,如果我查询关于一个或10000个数据的记录,并且如果我使用EnableScaninQuery活动查询partitionkey-value,另一个索引值或未索引值,则也是独立的。所以我想这个代码是错的?我希望有非常多的时间来收集10000个未索引数据的记录,而不是查询一个分区键数据。 FeedOptions还提供了PopulateQueryMetrics方法。有什么方法可以在我的c#应用程序中使用这些指标访问查询时间吗?查询性能测量宇宙数据库DB

FeedOptions asd = new FeedOptions 
     { 
      EnableCrossPartitionQuery = true, 
      // EnableScanInQuery = true, 
      //PopulateQueryMetrics = true, 
      MaxItemCount = 500, 
      MaxBufferedItemCount = 10000, 
      MaxDegreeOfParallelism = -1 
     }; 
watch.Start(); 
      try 
      { 
       IDocumentQuery<Item> query = client.CreateDocumentQuery<Item>(
        UriFactory.CreateDocumentCollectionUri(Database, coll), asd) 
        .Where(m => m.userid == 999999).AsDocumentQuery<Item>(); 

       WriteToConsoleAndPromptToContinue("Query took {0} ms ", watch.ElapsedMilliseconds); 
       watch.Stop(); 
+0

数据库访问客户端与Azure上的CosmosDb实例之间的网络距离是多少? – camelCase

尝试迭代整个结果集以产生可靠的结果。

while (query.HasMoreResults) 
{ 
    var result = await query.ExecuteNextAsync<Item>(); 

    // Process paged results 
} 
+0

感谢您的回答,生病已经打印了我关于每个查询项目的一些信息。但是,我可以用这种方式来衡量时间? – Alex

+0

您的问题中显示的代码将在您的客户端代码中的所有数据库查询结果已实现之前,测量已用时间。如果你在WriteToConsoleAndPromptToContinue()测量陈述之前插入我的建议代码块,我估计你会得到实际的定时。您还应该计算返回的文档以验证您的查询。 – camelCase

+0

谢谢。但我不想处理结果,我只想查询一些文件,并为此测量时间。在您的示例中执行此操作会导致基于分区键在5000ms之类的时间查询一个元素。 SLA允许10ms以下的查询而不处理它们。所以我想我以前的测量结果大约14-33毫秒可能是现实的价值(基于客户端延迟)只查询值,甚至没有处理它们? – Alex