Azure表存储事务限制

时间:2013-01-21 16:32:28

标签: azure storage azure-table-storage

我正在针对ATS运行性能测试,并且在针对同一个表/存储帐户使用多个虚拟机时,它的行为有点奇怪。

整个管道是非阻塞的(等待/异步)并使用TPL进行并发和并行执行。

首先,非常奇怪的是,通过这种设置,我只能获得大约1200次插入。这是在L VM盒上运行的,即4核+ 800mbps。

我正在插入具有独特PK和唯一RK的100.000行,这应该利用最终分布。

更具确定性的行为如下。

当我运行1个VM时,我每秒大约有1200次插入。 当我运行3个VM时,我每秒插入一次大约730个。

阅读他们指定目标的博客文章非常幽默。 https://azure.microsoft.com/en-gb/blog/windows-azures-flat-network-storage-and-2012-scalability-targets/

  

单表分区 - 表分区是表中具有相同分区键值的所有实体,通常表具有许多分区。单个表分区的吞吐量目标是:

     

每秒最多2,000个实体

     

注意,这适用于单个分区,而不是单个表。因此,具有良好分区的表格最多可处理20,000个实体/秒,这是上述整体帐户目标。

如何才能使用每秒20k的速度,以及如何在每个VM上执行超过1,2k的操作?

-

更新

我现在还尝试为每个单独的节点使用3个存储帐户,并且仍在获得性能/限制行为。我无法找到合理的理由。

-

更新2:

我已经进一步优化了代码,现在我可以执行大约1550年。

-

更新3:

我现在也在美国西部尝试过。那里的表现更糟糕。降低约33%。

-

更新4:

我尝试从XL机器执行代码。这是8个内核而不是4个内存和带宽的两倍,并且性能提高了2%,所以很明显这个问题不在我身边..

4 个答案:

答案 0 :(得分:4)

一些评论:

  1. 你提到你使用独特的PK / RK来获得终极目标 分配,但你必须记住PK平衡是 没有立即。当您第一次创建表时,整个表将会 由1个分区服务器提供服务。所以,如果你正在进行插入 几个不同的PK,他们仍然会去一个分区 服务器并受到单个可伸缩性目标的瓶颈 划分。分区主机只会开始拆分你的 在识别出hot之后,多个分区服务器之间的分区 分区服务器。在你的< 2分钟测试中,你将看不到 多个分区服务器或PK的好处。吞吐量 文章的目标是一个分布均匀的PK计划 经常访问的数据,导致数据被分割 多个分区服务器。

  2. 您的VM的大小不是问题所在 您没有被CPU,内存或带宽阻止。你可以实现 小VM大小的完整存储性能。

  3. 退房 http://research.microsoft.com/en-us/downloads/5c8189b9-53aa-4d6a-a086-013d927e15a7/default.aspx。 我刚刚在WebRole VM中使用该工具进行了快速测试 与我的存储帐户相同的数据中心和我从一个单一的实现 单个VM上的工具实例,每秒上传约2800个项目 和每秒~7300项下载。这是使用1024字节 实体,10个线程和100个批量大小。我不知道这个工具的效率如何,或者它是否禁用了Nagles算法,因为我无法使用批量大小为1获得很好的结果(我得到~1000 /秒),但至少在100个批量大小时它显示你可以达到很高的物品/秒。这是在美国西部完成的。

  4. 您使用的是存储客户端库1.7(Microsoft.Azure.StorageClient.dll)还是2.0(Microsoft.Azure.Storage.dll)? 2.0库有一些性能改进,应该会产生更好的结果。

答案 1 :(得分:0)

计算实例和存储帐户是否在同一个关联组中?关联组确保服务之间的网络接近度是最佳的,并且应该导致网络级别的较低延迟。

您可以在网络标签下找到关联组配置。

答案 2 :(得分:0)

我怀疑这可能与TCP Nagle有关。 请参阅this MSDN articlethis blog post

实际上,TCP Nagle是一种协议级优化,用于批量处理小型请求。由于您发送了大量小请求,因此可能会对您的效果产生负面影响。

您可以在启动应用程序时执行此代码来禁用TCP Nagle

ServicePointManager.UseNagleAlgorithm = false;

答案 3 :(得分:0)

我倾向于认为最大吞吐量是针对优化的负载。例如,我敢打赌,使用批处理请求可以获得比现在正在执行的单个请求更高的性能。当然,如果您为PK使用GUID,则无法在当前测试中进行批处理。

那么,如果您将测试更改为批量插入实体,以100个为一组(每批最大数量)仍然使用GUID,但是哪100个实体具有相同的PK?

相关问题