2012-11-25 48 views
1

您好存儲過程大家再次並行執行,在處理SQL

我想在並行SQL Server 2008中執行存儲過程,我不會使用任何外部工具(SSIS,CLR)。我決定採取rusanu's blog中提到的方法,並嘗試與服務代理商合作。

現在進行並行執行 - 我將MAX_QUEUE_READERS設置爲5,並嘗試執行幾個長時間運行的過程。我注意到,他們仍然順序執行。我會假設他們在不同的對話中,因此激活應該發生幾次。 如果我錯誤地假設,請糾正我。

感謝您的解釋。

+0

也許你的「線程」等待阻塞? – usr

+0

據我所知,隊列有內部(NOLOCK)選項,從而防止當前處理的消息阻塞。另外每個對話都在不同的對話組中,所以不應該被阻止。但是再次 - 糾正我,如果我錯了 –

+0

誠然,我的意思是消息正在做的處理。當然,他們正在對其他數據進行操作? – usr

回答

3

激活最多每5秒啓動一個新線程,當且僅當在這5秒鐘內有RECIEVE擊中隊列底部(返回空結果集)。因此,要實現5個線程,您需要等待20秒才能開始,並且在這20秒內,您應該有足夠的消息,線程永遠不會處於空閒狀態。

+0

太棒了!謝謝,顯然我所有的測試程序都運行時間短於5秒。我並不知道5秒的發射間隔 - 是否在Service Broker的任何BOL中提及? –

+1

不確定是否在BOL中提及,可能被忽略,因此可以在不需要宣佈/廢棄的情況下進行更改。但在論壇和討論中有幾個地方被提及。 –