I run performance tests with ATS and it is a little strange when you use multiple virtual machines against the same table / storage account.
The entire pipeline is not blocked (await / async) and uses TPL for parallel and parallel execution.
First of all, it is very strange that with this setting I get only 1200 attachments. This works on an L VM field, i.e. 4 cores + 800 Mbps.
I insert 100,000 lines with a unique PC and a unique PK, which the final distribution should use.
An even greater deterministic behavior is as follows.
When I start 1 VM, I get about 1200 inserts per second. When I start 3 virtual machines, I get about 730 for each insert per second.
Its pretty humor to read a blog post where they set their goals. https://azure.microsoft.com/en-gb/blog/windows-azures-flat-network-storage-and-2012-scalability-targets/
A single column - a table section - these are all entities in a table with the same section key value, and usually there are many sections in tables. Throughput target for one table partition:
Up to 2000 objects per second
Note that this is for a single partition, not a single table. Therefore, a table with a good partitioning can process up to 20,000 units per second, which is the general purpose of the account described above.
What should I do to use 20 thousand per second and how can I execute more than 1.2 thousand per VM?
-
Update:
I also tried using 3 storage accounts for each individual node and still getting performance / throttling behavior. Which I cannot find a logical reason.
-
Update 2:
I have optimized the code further, and now I can execute about 1550.
-
Update 3:
I also tried in the West USA. Performance is worse there. About 33% lower.
-
Update 4:
I tried to execute code from an XL device. Which is 8 cores instead of 4 and doubles the memory and bandwidth and received a 2% increase in performance, so this problem is not on my side.