Azure CosmosDB我不能超过1500 RU

alb*_*ran 8 azure azure-storage azure-cosmosdb

我有一个需要大型RU的应用程序,但由于某种原因,我无法让客户端应用程序处理超过1000-1500个RU,尽管该集合设置为10000 RU.显然我可以添加更多客户端,但我需要一个客户端给我至少10000个RU然后扩展它.我的要求很简单

    var query = connection.CreateDocumentQuery<DocumentDBProfile>(
    CollectionUri, //cached
    "SELECT * FROM Col1 WHERE Col1.key = '" + partitionKey + "' AND Col1.id ='" + id + "'",
    new FeedOptions
    {
        MaxItemCount = -1,
        MaxDegreeOfParallelism = 10000000,
        MaxBufferedItemCount = 1000,
    }).AsDocumentQuery();
    var dataset = await query.ExecuteNextAsync().ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

上面的查询命中了150,000个分区,每个分区都在自己的任务中(等到最后),并使用TCP和直接模式初始化客户端:

                            var policy = new ConnectionPolicy
                            {
                                EnableEndpointDiscovery = false,
                                ConnectionMode = ConnectionMode.Direct,
                                ConnectionProtocol = Protocol.Tcp,
                            };
Run Code Online (Sandbox Code Playgroud)

客户端上的CPU似乎最大化,主要用于服务调用查询.ExecuteNextAsync()

我做错了吗?任何优化提示?我可以使用更低级别的API吗?有没有办法预解析查询或使Json解析更优化?

更新 我通过降低并发请求的数量,在一个客户端上获得了高达3000-4000 RU,并将我的反序列化类拆分为具有单个属性(id)的一个,但我仍然是50,000的限制的10%性能指南中提到的RU.不确定我还能做什么.我可以在.Net SDK中禁用任何安全检查或开销吗?

UPDATE2 我们所有的测试都在Azure上的同一区域D11_V2上运行.运行多个客户端可以很好地扩展,因此我们是客户端绑定而不是服 仍然无法达到CosmosDB性能指南中列出的10%的性能

Oli*_*ers 3

默认情况下,SDK 将使用重试策略来掩盖限制错误。您是否查看过 Azure 门户上提供的 RU 指标来确认您是否受到限制?有关此内容的更多详细信息,请参阅此处的教程。

不确定为什么 REST API 的性能比 .NET SDK 更好。您能否提供有关您在这里使用的操作的更多详细信息?

您提供的示例查询是使用每个请求的已知分区键和 ID 来查询单个文档。对于这种点读操作,最好使用DocumentClient.ReadDocumentAsnyc,因为它应该比查询便宜。