Azure 表存储事务限制

标签 azure storage azure-table-storage

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

整个管道是非阻塞的(await/async)并使用TPL进行并发和并行执行。

首先,非常奇怪的是,使用此设置我只获得了大约 1200 个插入。它在 L VM 机器上运行,即 4 核 + 800mbps。

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

更具确定性的行为如下。

当我运行 1 个虚拟机时,每秒大约插入 1200 次。 当我运行 3 个虚拟机时,每秒每次插入大约得到 730 次。

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

Single Table Partition– a table partition are all of the entities in a table with the same partition key value, and usually tables have many partitions. The throughput target for a single table partition is:

Up to 2,000 entities per second

Note, this is for a single partition, and not a single table. Therefore, a table with good partitioning, can process up to the 20,000 entities/second, which is the overall account target described above.

我应该怎样做才能利用每秒 20k 的速度,以及如何才能在每个虚拟机上执行超过 1,2k 的速度?

--

更新:

我现在还尝试为每个单独的节点使用 3 个存储帐户,但仍然遇到性能/限制行为。我找不到合理的理由。

--

更新2:

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

--

更新3:

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

--

更新4:

我尝试从 XL 机器上执行代码。这是 8 核而不是 4 核,内存和带宽加倍,性能提高了 2%,所以显然这个问题不在我这边。

最佳答案

一些评论:

  1. 你提到你正在使用独特的PK/RK来获得终极 分布,但你必须记住,PK平衡是 不是立即的。当你第一次创建一个表时,整个表将 由 1 台分区服务器提供服务。所以如果你正在做跨插入 几个不同的 PK,它们仍然会进入一个分区 服务器的可扩展性目标成为瓶颈 分割。分区主机只会开始分割您的 识别热点后在多个分区服务器之间进行分区 分区服务器。在 <2 分钟的测试中,您将看不到 多个分区服务器或 PK 的好处。吞吐量在 文章的目标是一个分布良好的 PK 方案 频繁访问的数据,导致数据被划分为 多个分区服务器。

  2. 虚拟机的大小不是问题,因为 您的 CPU、内存或带宽不会受到限制。你可以实现 通过较小的 VM 大小即可获得完整的存储性能。

  3. 查看 http://research.microsoft.com/en-us/downloads/5c8189b9-53aa-4d6a-a086-013d927e15a7/default.aspx 。 我刚刚在 WebRole 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 库有一些性能改进,应该会产生更好的结果。

关于Azure 表存储事务限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14443081/

相关文章:

azure - 证书问题(与安全相关?!?)

azure - 在数据库中创建物化 View 后如何检查其回填属性?

azure - Window Azure 表存储查询性能

macos - 有适用于 Mac 的 Azure 存储查看器吗?

java - Android - 外部存储的可用空间无法正确显示

azure - 当我将核心从 3.1 更新到 6 时,在 .net6 中找不到 TableClientConfiguration

git - Jenkins 无法访问 Azure Ubuntu VM 上的 Git 存储库

java - Java junits 中的模拟 CosmosClient

android - 在android中获取外部SDCard的路径

python - 如何/在何处存储云应用程序的临时文件和日志?