ATS に対してパフォーマンス テストを実行していますが、同じテーブル/ストレージ アカウントに対して複数の仮想マシンを使用すると、動作が少し奇妙になります。
パイプライン全体がノンブロッキング (await/async) であり、同時実行と並列実行に TPL を使用します。
まず第一に、このセットアップで約 1200 の挿入しか得られないのは非常に奇妙です。これは、4 コア + 800 mbps の L VM ボックスで実行されています。
一意の PK と一意の RK を使用して 100.000 行を挿入しています。これにより、究極の分散が活用されるはずです。
さらに決定論的な動作は次のとおりです。
1 つの VM を実行すると、1 秒あたり約 1200 回の挿入が行われます。3 つの VM を実行すると、1 秒あたりの挿入ごとに約 730 になります。
彼らがターゲットを指定しているブログ投稿を読むのは非常にユーモアがあります。 https://azure.microsoft.com/en-gb/blog/windows-azures-flat-network-storage-and-2012-scalability-targets/
単一テーブル パーティション - テーブル パーティションは、同じパーティション キー値を持つテーブル内のすべてのエンティティであり、通常、テーブルには多くのパーティションがあります。1 つのテーブル パーティションのスループット ターゲットは次のとおりです。
毎秒最大 2,000 エンティティ
これは単一のテーブルではなく、単一のパーティション用であることに注意してください。したがって、適切なパーティショニングを備えたテーブルは、上記の全体的なアカウント ターゲットである 20,000 エンティティ/秒まで処理できます。
1 秒あたり 20k を利用できるようにするにはどうすればよいですか? また、VM あたり 1.2k を超える実行を可能にする方法は?
--
アップデート:
また、個々のノードごとに 3 つのストレージ アカウントを使用してみましたが、まだパフォーマンス/スロットリング動作が発生しています。論理的な理由が見つかりません。
--
更新 2:
コードをさらに最適化した結果、約 1550 回実行できるようになりました。
--
更新 3:
私は今、米国西部でも試しました。そこではパフォーマンスが悪化します。約33%減。
--
更新 4:
XL マシンからコードを実行してみました。これは 4 コアではなく 8 コアであり、メモリと帯域幅が 2 倍になり、パフォーマンスが 2% 向上したため、明らかにこの問題は私の側ではありません..