2017-07-03 62 views
0

我想知道WITH的性能影響是什麼?我是否應該儘可能地依靠WITH caluse?與消費羣體 - 性能和其他考慮事項

舉例來說,如果我有一個看起來像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的所有內容都進行一次限制,以限制讀者?作爲第二步做其他過濾。我猜這會影響性能。

b。我不應該只爲每個查詢創建一個使用者組?爲什麼不 ?

c。有點不同,不同產出的表現之間是否存在關係?如果我有幾個輸出,其中一部分是高吞吐量的CosDb集合,而另一部分是表格拼塊,這有什麼關係?雖然表格存儲分區更好。將兩者分割成不同的(輸入,消費者羣)對還是完全不同的ASA作業會更好嗎?

回答

1

TL; DR:對於大多數典型的工作負載,您應該很好地使用WITH語句來減少接收方的數量。如果你想調整表演,你可以用不同的接收器創建不同的輸入。

請看以下詳細的解答:

一)對於第一個問題,使用不帶,然後做在該步驟的過濾這個查詢將不會影響性能。 b)利用WITH語句,可以減少所需接收器的數量。但是,如果您需要有更多的接收器,則必須定義多個輸入,併爲每個輸入定義一個不同的CG。這兩種方法的優缺點將取決於不同的因素,例如查詢的並行/分區程度,數據量和分佈等。如果您的吞吐量非常高,則可能需要進行實驗,並使用perf數字和「工作圖」來指導你的決定。請注意,對於大多數當前作業,您應該可以使用WITH語句。

c)如果管道是完全獨立的,你可能想創建不同的工作來最大化性能。您可以使用ASA作業的「作業圖」來可視化您的作業拓撲並對其進行優化。

讓我知道它是否回答你的問題。

感謝,

JS

+0

首先,感謝了一堆回答。我需要一些時間來編寫一些工具來讓我測試性能。有沒有辦法衡量ASA查詢的運行時間?或ASA +輸出文字或類似的東西。目前,我想給CosDB添加一個觸發器來記錄插入時間,並將其與ASA等數據上留下的不同時間戳進行比較。我的輸入是一個物聯網集線器,因此它可以進行分區和用戶分組(?)一個EventHub,我還不確定將分區或將許多用戶組添加到物聯網集線器的性能影響 – Shrulik

+0

您是指什麼程度的並行化/分區,它對此有何影響?很高興知道WITH語句實際上做了什麼。它是否將結果保存在內存中?擁有許多消費者羣體的缺點是什麼?除了創造它們的麻煩之外。 – Shrulik

+0

這似乎是衡量您的端到端流量性能的好方法。 WITH是告訴查詢優化器將調用分組在一起而不是並行執行的方法。由於您的查詢示例非常簡單,我認爲您不會對性能產生任何影響。如果您有複雜的查詢(JOIN等),則可能需要保持它們並行運行。您可以在這裏擴展ASA作業:https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-scale-jobs –