When I run the following query directly in Data Explorer in Azure Portal it takes about 2 seconds to finish. The same query when run using DocumentDB SDK it takes about 1 minute to finish. Why is there such a wide gap in performance between two methods and how can I achieve the same perf using the SDK?
select distinct c.docId from c where c.documentType = 'Article' and LOWER(c.userId) = 'someone' and c.docId in (812,838,901,1557,1558,1372,1367,1592,1081,1590,1364,1441)
The code we use:
public async Task> GetItemsAsync(string expr, int pageSize = -1, string continueToken = null) { using (var bench = new Benchmark(expr)) { var queryable = _Client.CreateDocumentQuery(UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId) , expr , new FeedOptions { MaxItemCount = pageSize, RequestContinuation = continueToken, EnableCrossPartitionQuery = true }) .AsDocumentQuery(); List results = new List(); while (queryable.HasMoreResults) { var queryResult = await queryable.ExecuteNextAsync(); results.AddRange(queryResult); } return results; } }
We use package Microsoft.Azure.DocumentDB.2.11.2. _Client is opened with ConnectionMode.Direct and Protocol.Tcp
RequestDiagnosticsString:
QueryMetrics: Partition 0 Retrieved Document Count : 1,847 Retrieved Document Size : 1,166,051 bytes Output Document Count : 0 Output Document Size : 49 bytes Index Utilization : 0.00 % Utilized Indexes Potential Indexes Total Query Execution Time : 21.20 milliseconds Query Preparation Times Query Compilation Time : 0.22 milliseconds Logical Plan Build Time : 0.22 milliseconds Physical Plan Build Time : 0.12 milliseconds Query Optimization Time : 0.01 milliseconds Index Lookup Time : 0.87 milliseconds Document Load Time : 13.38 milliseconds Runtime Execution Times Query Engine Times : 5.68 milliseconds System Function Execution Time : 1.35 milliseconds User-defined Function Execution Time : 0.00 milliseconds Document Write Time : 0.00 milliseconds Client Side Metrics Retry Count : 0 Request Charge : 74.85 RUs Partition Execution Timeline ┌────────────┬────────────────────────────────────┬────────────────┬──────────────┬──────────────────┬───────────────────┬───────────┐ │Partition Id│Activity Id │Start Time (UTC)│End Time (UTC)│Duration (ms) │Number of Documents│Retry Count│ ├────────────┼────────────────────────────────────┼────────────────┼──────────────┼──────────────────┼───────────────────┼───────────┤ │ 0│54693cfe-843d-404b-82da-446347d5a71f│ 02:11:28.1185Z│02:11:28.3639Z│ 245.38│ 0│ 0│ └────────────┴────────────────────────────────────┴────────────────┴──────────────┴──────────────────┴───────────────────┴───────────┘ Scheduling Metrics ┌────────────┬────────────────────┬────────────────────┬────────────────────┬────────────────────┬─────────────────────┐ │Partition Id│Response Time (ms) │Run Time (ms) │Wait Time (ms) │Turnaround Time (ms)│Number of Preemptions│ ├────────────┼────────────────────┼────────────────────┼────────────────────┼────────────────────┼─────────────────────┤ │ 0│ 84.02│ 245.38│ 106.94│ 352.32│ 1│ └────────────┴────────────────────┴────────────────────┴────────────────────┴────────────────────┴─────────────────────┘ ClientSideRequestStatistics: { 0:[ RequestStartTime: 2020-07-25T02:11:28.3895792Z, RequestEndTime: 2020-07-25T02:11:28.3895792Z, Number of regions attempted:1 ]} == QueryMetrics: Partition 21 Retrieved Document Count : 21,747 Retrieved Document Size : 14,783,785 bytes Output Document Count : 7 Output Document Size : 171 bytes Index Utilization : 0.00 % Utilized Indexes Potential Indexes Total Query Execution Time : 187.95 milliseconds Query Preparation Times Query Compilation Time : 1.10 milliseconds Logical Plan Build Time : 1.83 milliseconds Physical Plan Build Time : 0.17 milliseconds Query Optimization Time : 0.01 milliseconds Index Lookup Time : 1.99 milliseconds Document Load Time : 123.47 milliseconds Runtime Execution Times Query Engine Times : 52.73 milliseconds System Function Execution Time : 11.06 milliseconds User-defined Function Execution Time : 0.00 milliseconds Document Write Time : 0.01 milliseconds Client Side Metrics Retry Count : 0 Request Charge : 849.38 RUs Partition Execution Timeline ┌────────────┬────────────────────────────────────┬────────────────┬──────────────┬──────────────────┬───────────────────┬───────────┐ │Partition Id│Activity Id │Start Time (UTC)│End Time (UTC)│Duration (ms) │Number of Documents│Retry Count│ ├────────────┼────────────────────────────────────┼────────────────┼──────────────┼──────────────────┼───────────────────┼───────────┤ │ 21│e0745d8f-ec34-4a40-9dac-556ffc8e8603│ 02:16:14.5334Z│02:16:14.8970Z│ 363.53│ 7│ 0│ └────────────┴────────────────────────────────────┴────────────────┴──────────────┴──────────────────┴───────────────────┴───────────┘ Scheduling Metrics ┌────────────┬────────────────────┬────────────────────┬────────────────────┬────────────────────┬─────────────────────┐ │Partition Id│Response Time (ms) │Run Time (ms) │Wait Time (ms) │Turnaround Time (ms)│Number of Preemptions│ ├────────────┼────────────────────┼────────────────────┼────────────────────┼────────────────────┼─────────────────────┤ │ 21│ 54314.14│ 363.53│ 54314.22│ 54677.76│ 1│ └────────────┴────────────────────┴────────────────────┴────────────────────┴────────────────────┴─────────────────────┘ ClientSideRequestStatistics: { 21:[ RequestStartTime: 2020-07-25T02:16:14.8967387Z, RequestEndTime: 2020-07-25T02:16:14.8967387Z, Number of regions attempted:1 ]} == QueryMetrics: Partition 20 Retrieved Document Count : 44,693 Retrieved Document Size : 30,777,951 bytes Output Document Count : 9 Output Document Size : 256 bytes Index Utilization : 0.00 % Utilized Indexes Potential Indexes Total Query Execution Time : 434.05 milliseconds Query Preparation Times Query Compilation Time : 2.37 milliseconds Logical Plan Build Time : 4.01 milliseconds Physical Plan Build Time : 0.46 milliseconds Query Optimization Time : 0.04 milliseconds Index Lookup Time : 2.61 milliseconds Document Load Time : 283.05 milliseconds Runtime Execution Times Query Engine Times : 126.52 milliseconds System Function Execution Time : 23.76 milliseconds User-defined Function Execution Time : 0.00 milliseconds Document Write Time : 0.02 milliseconds Client Side Metrics Retry Count : 0 Request Charge : 1,740.93 RUs Partition Execution Timeline ┌────────────┬────────────────────────────────────┬────────────────┬──────────────┬──────────────────┬───────────────────┬───────────┐ │Partition Id│Activity Id │Start Time (UTC)│End Time (UTC)│Duration (ms) │Number of Documents│Retry Count│ ├────────────┼────────────────────────────────────┼────────────────┼──────────────┼──────────────────┼───────────────────┼───────────┤ │ 20│5b5045a4-613d-408e-9d94-d44fd7a8e5d3│ 02:16:13.8872Z│02:16:14.3596Z│ 472.41│ 5│ 0│ │ 20│45c14bfb-f9bf-48f8-ab0d-7680f7aeac99│ 02:16:14.3602Z│02:16:14.5278Z│ 167.61│ 4│ 0│ └────────────┴────────────────────────────────────┴────────────────┴──────────────┴──────────────────┴───────────────────┴───────────┘ Scheduling Metrics ┌────────────┬────────────────────┬────────────────────┬────────────────────┬────────────────────┬─────────────────────┐ │Partition Id│Response Time (ms) │Run Time (ms) │Wait Time (ms) │Turnaround Time (ms)│Number of Preemptions│ ├────────────┼────────────────────┼────────────────────┼────────────────────┼────────────────────┼─────────────────────┤ │ 20│ 53667.87│ 640.03│ 53668.52│ 54308.55│ 2│ └────────────┴────────────────────┴────────────────────┴────────────────────┴────────────────────┴─────────────────────┘ ClientSideRequestStatistics: { 20:[ RequestStartTime: 2020-07-25T02:16:14.3599211Z, RequestEndTime: 2020-07-25T02:16:14.3599211Z, Number of regions attempted:1 , RequestStartTime: 2020-07-25T02:16:14.5274725Z, RequestEndTime: 2020-07-25T02:16:14.5274725Z, Number of regions attempted:1 ]}
PopulateQueryMetrics = true
in the FeedOptions and reading them from the response'sRequestDiagnosticsString
. That and docs.microsoft.com/en-us/azure/cosmos-db/… – Matias Quaranta