我尝试将Azure SQL表中的大约2500万行批量加载到Azure表存储中的三个不同表中。我目前正在设法处理大约50-100行/秒,这意味着在当前速度下,我需要大约70-140小时来完成负载。那是很长一段时间,似乎应该有可能加快速度。
这就是我正在做的事情:
TableBatchOperation
。一些注意事项:
我能想出的唯一另一个明显的想法是我之前尝试过的,即在SQL select语句中执行order by
分区键,以便我们可以为批处理获得完美的分区密度插入。由于各种原因已被证明是困难的,因为表的索引并没有为此设置。虽然我希望某些使用这种方法在ATS端加速,但鉴于我已经通过他们的分区键对10K记录进行分组,我不希望得到它更多的性能提升。
有什么其他建议可以加快速度吗?或者这是否和其他任何人一样快?
答案 0 :(得分:1)
仍然接受其他建议,但我发现此页面非常有用:
http://blogs.msmvps.com/nunogodinho/2013/11/20/windows-azure-storage-performance-best-practices/
具体来说,这些:
ServicePointManager.Expect100Continue = false;
ServicePointManager.UseNagleAlgorithm = false;
ServicePointManager.DefaultConnectionLimit = 100;
通过这些,我能够将平均处理时间从~10-20 ms /事件下降到~2 ms。 好多了。
但正如我所说,仍然接受其他建议。我已经读过其他人在ATS上每秒超过20,000次操作,而且我仍然被困在500左右。
答案 1 :(得分:0)
你的分区键怎么样?如果它们是增量数字,则Azure会将它们优化为一个存储节点。所以你应该使用完全不同的分区键" A1"," B2"而不是" 1"," 2"等等 在这种情况下,所有分区都将由不同的存储节点处理,性能将被多重化。