我正在针对 ATS 运行性能测试,当对同一个表/存储帐户使用多个虚拟机时,它的行为有点奇怪。
整个管道是非阻塞的(等待/异步)并使用 TPL 进行并发和并行执行。
首先,非常奇怪的是,通过这种设置,我只能获得大约 1200 次插入。这是在 L VM 机器上运行的,即 4 核 + 800mbps。
我正在插入 100.000 行具有唯一 PK 和唯一 RK 的行,这应该利用最终分布。
以下是更具确定性的行为。
当我运行 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%,所以很明显这个问题不在我这边。