Azure CosmosDB 我无法获得超过 1500 RU

标签 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);

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

                            var policy = new ConnectionPolicy
                            {
                                EnableEndpointDiscovery = false,
                                ConnectionMode = ConnectionMode.Direct,
                                ConnectionProtocol = Protocol.Tcp,
                            };

客户端上的 CPU 似乎已达到极限,主要是为了服务调用 query.ExecuteNextAsync()

我做错了什么吗?有什么优化技巧吗?我可以使用较低级别的 API 吗?有没有办法预解析查询或使 Json 解析更优化?

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

更新2 我们所有的测试都在同一区域 D11_V2 的 Azure 上运行。运行多个客户端可以很好地扩展,因此我们是客户端绑定(bind)而不是服务器绑定(bind)。 仍然无法达到 CosmosDB performance guideline 中概述的性能的 10%

最佳答案

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

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

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

关于Azure CosmosDB 我无法获得超过 1500 RU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495013/

相关文章:

azure - 删除 Azure SDK 生成的日志

azure - 如何在具有多个控制台应用程序项目的Web作业中定义默认exe?

powershell - 上传到Azure后删除本地文件

c# - 如何将文件上传到 Asp.Net Core 中的 azure blob?

azure - 在一个查询中查找匹配 PartitionKey 列表的实体,而无需执行 foreach

azure - 宇宙数据库 : SQL API + Graph API -- Really multi-model?

Azure 负载均衡器 - 错误的传出 IP 地址

node.js - 如何在特定阶段将数据从 azure cosmos db 备份到 azure blob?

azure - 如何在Azure Function中设置Azure DocumentDB输出绑定(bind)的重试次数?

sql-server - 如何从链接服务器查询Azure Master DB