当前位置: 首页 > 知识库问答 >
问题:

使用CreateDocumentQuery和ExecuteNextAsync提高性能

督建柏
2023-03-14

当我直接在Azure门户的数据资源管理器中运行以下查询时,大约需要2秒才能完成。使用DocumentDB SDK运行相同的查询时,大约需要1分钟才能完成。为什么两种方法之间的性能差距如此之大,以及如何使用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)

我们使用的代码:


    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;
        }
    }

我们使用Microsoft软件包。蔚蓝色的文档数据库。2.11.2. _客户端使用ConnectionMode打开。直接和协议。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

]}

共有1个答案

陈俊誉
2023-03-14

附加的诊断似乎表明您正在进行跨分区查询(似乎要点击3个分区才能获得查询结果),您可以在每个分区统计信息中看到“运行时”(245ms、363ms、640ms)。

这似乎是由于结果数量高(其中一个查询中有44K个结果)。

我们不知道您正在执行哪种类型的查询,但它看起来确实像一个扫描(引用)。这似乎与您使用的较低值一致(另请参阅诊断中的索引利用率:0.00%)。

另一个有用的链接是调整查询性能的指南,其中有一些很好的提示(请参阅链接进行解释:

  • 将MaxItemCount设置为-1

但总的来说,问题似乎是由于使用LOWER而没有使用索引。

 类似资料:
  • 我正在用docx4j做一些测试。我需要做的是将复杂的Word文档(2-3页的文本、表格、项目符号列表、图像)转换成XHTML。

  • 我在我的应用程序中创建了第二个DataSource。 我用HikariDataSource创建了它,因为它断开了连接,所以出现了问题。 现在它没有断开,但是很慢 我的配置如下: 爪哇: 有人能告诉我如何提高绩效吗。 它们是表的小查询,分页约为25条记录,需要4秒钟。 我观察到,查询一个select的200条记录需要46秒,而查询只需要2秒。 以前,它们是千分之一秒。 非常感谢。

  • 在我的ASP. net网站,我有一个连接到SQL服务器快速数据库。有时候我确实会犯很多错误,比如 系统。异常:超时已过期。从池中获取连接之前的超时时间。这可能是因为所有池连接都在使用中,并且达到了最大池大小。 搜索错误后,我发现可能是由于SQL Server连接未关闭。但是我已经正确地使用了SQL Server连接,并且正确地处理了它。我已使用using语句处理连接。在我的应用程序中,我在一天中的

  • 问题内容: 以下是我用于通过电子邮件搜索人的查询 在“电子邮件”上添加索引会加快查询速度吗? 问题答案: 不可以,因为当您使用通配符时,MySQL将无法使用该索引。如果您将LIKE更改为’f%’,那么它将能够使用索引。

  • 我明白为什么C 11中的类型提高了正确性和可运维性。我读到它也可以提高性能(赫伯·萨特的《几乎总是自动》),但我错过了一个很好的解释。 如何提高性能

  • 我有一个cron作业方法,它根据用户的特色故事构建用户的故事提要,跟踪类别并跟踪用户。 最终提要按正确顺序添加到以下数据库表中: 用户提要表: Uid 方法如下,包含注释<代码: 对于30名用户,上述方法需要约35秒才能完成<问:我如何改进代码和性能?