Cosmos DB Table 请求在并行化时停止
Cosmos DB Table requests stall when parallelized
并行启动操作时,它们通常会超时或失败
我正在使用:
- Azure Cosmos DB Table API
- .NET Core 2.0(控制台应用程序)
- WindowsAzure.Storage (9.2.0) nuget 包
标准 CloudStorageAccount.Parse(...).CreateCloudTableClient().GetTableReference("...") 设置
这段代码触发了 8999 个任务。每个任务都是一个 TableOperation.Retrieve 指定 PartitionKey 和 RowKey。我注入了一些代码来跟踪任务完成状态和任何 IRetryPolicy 命中。 没有429错误
这是最近 运行 的输出:
await Task.WhenAll(stuff.Select(x => table.ExecuteAsync(opGetter.Get(x))));
0:01 - 12 done
0:02 - 228 done
0:03 - 313 done
0:04 - 435 done
0:05 - 1010 done
0:06 - 1883 done
0:07 - 2833 done
0:08 - 3014 done
0:09 - 3878 done
0:10 - 5447 done
0:11 - 5569 done
0:12 - 6492 done
0:13 - 6527 done
0:14 - 6532 done
0:15 - 6541 done
0:16 - 6543 done
0:17 - 6547 done
0:18 - 6552 done
0:19 - 6554 done
0:20 - 6951 done
0:21 - 8105 done
0:22 - 8128 done
0:23 - 8591 done
0:24 - 8907 done
0:25 - 8908 done
0:29 - 8994 done
0:32 - 8996 done
1:14 - 8997 done
2:26 - 8998 done
5:02 - StatusCode: 0 "An error occurred while sending the request."
5:05 - All 8999 Done
(有时,我得到的是客户端超时,而不是那个特定的错误,或者多个错误)
理想情况下,这 8999 次检索应该花费几秒的时间。
我怎样才能阻止他们拖延?
注:
- 我没有摆弄任何 ServicePoint 设置,例如 max
连接等
- 我无法使用 "Direct Mode" 或 "TCP"(对比 Gateway/Https),因为没有支持 Cosmos DB Table API for .NET Core 的 SDK或标准
- 我怀疑是客户端的问题
- 这是 运行 来自本地服务器(不是在 azure 上)
- 这不是 "occasional"。几乎每次都会发生这种情况,像这样的大批量。
编辑:也作为 GitHub 问题发布。 https://github.com/Azure/azure-documentdb-dotnet/issues/517
我已将你的问题上报给产品团队,他们会在 Github 中与你联系,因为你在那里也有未解决的问题:https://github.com/Azure/azure-documentdb-dotnet/issues/517,我将更新此线程一次找到解决方案。
并行启动操作时,它们通常会超时或失败
我正在使用:
- Azure Cosmos DB Table API
- .NET Core 2.0(控制台应用程序)
- WindowsAzure.Storage (9.2.0) nuget 包
标准 CloudStorageAccount.Parse(...).CreateCloudTableClient().GetTableReference("...") 设置
这段代码触发了 8999 个任务。每个任务都是一个 TableOperation.Retrieve 指定 PartitionKey 和 RowKey。我注入了一些代码来跟踪任务完成状态和任何 IRetryPolicy 命中。 没有429错误
这是最近 运行 的输出:
await Task.WhenAll(stuff.Select(x => table.ExecuteAsync(opGetter.Get(x))));
0:01 - 12 done
0:02 - 228 done
0:03 - 313 done
0:04 - 435 done
0:05 - 1010 done
0:06 - 1883 done
0:07 - 2833 done
0:08 - 3014 done
0:09 - 3878 done
0:10 - 5447 done
0:11 - 5569 done
0:12 - 6492 done
0:13 - 6527 done
0:14 - 6532 done
0:15 - 6541 done
0:16 - 6543 done
0:17 - 6547 done
0:18 - 6552 done
0:19 - 6554 done
0:20 - 6951 done
0:21 - 8105 done
0:22 - 8128 done
0:23 - 8591 done
0:24 - 8907 done
0:25 - 8908 done
0:29 - 8994 done
0:32 - 8996 done
1:14 - 8997 done
2:26 - 8998 done
5:02 - StatusCode: 0 "An error occurred while sending the request."
5:05 - All 8999 Done
(有时,我得到的是客户端超时,而不是那个特定的错误,或者多个错误)
理想情况下,这 8999 次检索应该花费几秒的时间。
我怎样才能阻止他们拖延?
注:
- 我没有摆弄任何 ServicePoint 设置,例如 max 连接等
- 我无法使用 "Direct Mode" 或 "TCP"(对比 Gateway/Https),因为没有支持 Cosmos DB Table API for .NET Core 的 SDK或标准
- 我怀疑是客户端的问题
- 这是 运行 来自本地服务器(不是在 azure 上)
- 这不是 "occasional"。几乎每次都会发生这种情况,像这样的大批量。
编辑:也作为 GitHub 问题发布。 https://github.com/Azure/azure-documentdb-dotnet/issues/517
我已将你的问题上报给产品团队,他们会在 Github 中与你联系,因为你在那里也有未解决的问题:https://github.com/Azure/azure-documentdb-dotnet/issues/517,我将更新此线程一次找到解决方案。