2017-07-03 7 views
0

WITHのパフォーマンスへの影響は何ですか? WITH caluseに可能な限り依存することを好むべきですか?例えばWITH WITHコンシューマー・グループ - パフォーマンスおよびその他の考慮事項

、私はそのように見えるquereis持っている場合:

Select * from Input1 i where i.type = 'something' 

Select * from Input1 i where i.type = 'something-else' 

Select * from Input1 i where i.type = 'something-else' and i.cost > 500 

Select * from Input1 i where i.size < 10 

。読者を制限するために、Input1からすべてのものにWITHを付けるべきですか?もう一方のフィルタリングを2番目のステップとして実行します。私はこれがパフォーマンスを傷つけるだろうと推測しています。

b。クエリごとにコンシューマグループを作成してはいけませんか?何故なの ?

c。少し異なる、異なる出力のパフォーマンスの間には関係がありますか?もし私がいくつかの出力を持っていれば、それらの一部が高処理量のCosDbコレクションであり、部分がテーブルストロークであるかどうかは重要ですか?テーブルストレージははるかに良い分割されていますが。 2人を異なる(入力、消費者グループ)のペア、あるいはまったく異なるASAの仕事に選ぶ方が良いでしょうか?

答えて

1

TL; DR:最も一般的なワークロードでは、受信者の数を減らすためにWITH文を使用してください。パフォーマンスを微調整したい場合は、レシーバごとに異なる入力を作成することができます。 WITH使用して、最初の質問については

a)と、その段階でフィルタリングを行うと、このクエリのパフォーマンスに影響を与えません。

以下の詳細な回答を見つけてください。

b)WITHステートメントを使用すると、必要な受信者の数を減らすことができます。しかし、より多くのレシーバが必要な場合は、いくつかの入力を定義し、各入力に対して異なるCGを定義する必要があります。 2つのアプローチの長所/短所は、クエリの並列化/パーティション化の程度、データの量と分布など、さまざまな要因によって異なります。スループットが非常に高い場合は実験しなければならず、perfあなたの決定を導くための数字と "仕事の図"。現在のほとんどのジョブでは、WITH文を使用することをお勧めします。

c)パイプラインが完全に独立している場合、パフォーマンスを最大化するために異なるジョブを作成することができます。 ASAジョブの「ジョブ図」を使用して、ジョブトポロジを視覚化して最適化することができます。

あなたの質問に答えるかどうか教えてください。

おかげで、答えるため

JS

+0

まず、おかげでたくさん。私はパフォーマンスをテストできるようにいくつかのツールを書くのに少し時間が必要です。 ASAクエリの実行時間を測定する方法はありますか?またはASA +の出力ライティングなど。現時点では、CosDBにトリガーを追加して挿入時間を記録し、ASAなどがデータに残したタイムスタンプと比較することを考えました。私の入力はIoTハブなので、パーティション化でき、消費者グループ化(?イベントハブ、IoTハブに多くのコンシューマグループを分割する、または追加することによるパフォーマンスの影響についてはまだ分かりません – Shrulik

+0

並列化/パーティション化の程度はどういう意味ですか、どのように影響を受けますか? WITH文が実際に何をしているか知っているといいでしょう。結果は記憶に残っていますか?多くの消費者団体を持つことの問題は何ですか?それらの作成の気になることのほかに。 – Shrulik

+0

E2Eフローのパフォーマンスを測定するのは良い方法のようです。 WITHは、照会オプティマイザーに、その入力を並列に処理するのではなく、それらの呼び出しをまとめてグループ化するように指示する方法です。あなたの例は非常にシンプルなので、パフォーマンスには影響しません。複雑なクエリ(JOINなど)がある場合は、それらを並列に実行し続ける必要があります。 ASAジョブのスケーリングについては、次のURLを参照してください。https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-scale-jobs –

関連する問題