2009-08-24 58 views
3

多線程CLR存儲過程可能嗎?CLR存儲過程中的多線程代碼?

我有很多潛在的並行化的數據密集型任務。 CLR Stored Procs會很好地消除將數據移出流程的開銷,我擔心我不得不放棄並行計算。

我有什麼選擇?

注:我們的SQL Server 2005上的<4個月範圍計劃升級到SQL Server 2008

回答

4

如果是數據密集的與潛在的並行化,你應該處理它在設置面向對象的方式,並讓SQL按照它認爲合適的方式來平行處理。你不能做任何比SQL在分區每個CPU的數據訪問方面更聰明的事情,它只能訪問你不知道的信息(緩衝池填充狀態,頁面預期壽命,CPU/NUMA關聯度etC)。

如果你的處理是標導向,CPU密集型(甚至有些組面向處理),將處理的UDF CLR函數,並再次,讓查詢執行paralelize你的函數執行。

如果你的處理有任何種類的I/O(即網絡調用),那麼不是把它放在SQL中,放在服務器進程之外。

如果您的處理真的超出所有這些類別,並且您仍然相信您可以從多線程中受益,理論上可以在SQL中啓動線程。被警告,SQL裏面的CLR主機正常的CLR主機(即衆所周知的應用程序主機或主機ASP)。 SQL CLR是第三主機類型,層次上的SOS結構(工人,鎖存器,內存職員等)的頂部提供自己的原語(線程,鎖,內存管理等)。我強烈建議不要在SQL中進行顯式的多線程CLR處理。