2017-08-11 66 views
1

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

回答

0

嘗試迭代整個結果集以產生可靠的結果。

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

    // Process paged results 
} 
+0

感謝您的回答,生病已經打印了我關於每個查詢項目的一些信息。但是,我可以用這種方式來衡量時間? – Alex

+0

您的問題中顯示的代碼將在您的客戶端代碼中的所有數據庫查詢結果已實現之前,測量已用時間。如果你在WriteToConsoleAndPromptToContinue()測量陳述之前插入我的建議代碼塊,我估計你會得到實際的定時。您還應該計算返回的文檔以驗證您的查詢。 – camelCase

+0

謝謝。但我不想處理結果,我只想查詢一些文件,併爲此測量時間。在您的示例中執行此操作會導致基於分區鍵在5000ms之類的時間查詢一個元素。 SLA允許10ms以下的查詢而不處理它們。所以我想我以前的測量結果大約14-33毫秒可能是現實的價值(基於客戶端延遲)只查詢值,甚至沒有處理它們? – Alex