4

我們正在浮動一個新的可擴展的,以性能爲中心的ASP.Net應用程序,目前處於設計階段。使用CLR存儲過程時的問題和解決方案?

經理們決定採取混合方式。他們決定廣泛使用CLR存儲過程,而T-SQL僅用於簡單的數據操作。

我想知道從社區如下:

  1. 是否有可以有這麼多的CLR存儲過程以後階段的性能問題?
  2. 如果您有任何性能問題,是否有可從MS團隊獲得的修復程序?

注意:我做了一個谷歌,發現以下最可能的問題,但沒有找到前兩個決議。

  1. 當SQL Server加載程序集時,它們被緩存在內存中。當O/S向SQL Server發出內存壓力時,可能會運行顯式垃圾回收,並且可能會卸載程序集。如果頻繁發生,這可能會導致性能問題。

  2. 查詢優化程序無法準確計算SQL CLR代碼,因爲它不會查看代碼實際執行的操作 - 這會影響執行計劃。

  3. SQL CLR代碼有時會阻止並行性,因爲它們通常是單線程的。有時這可能會損害性能。 < <雖然我找到了解決這一這裏Multi-threaded code in CLR Stored Procs? >>

讓我知道與CLR存儲過程的問題和解決。

+1

只是一個建議的話:做**數據操作**任務,如選擇或更新** T-SQL中的數據** - 比使用SQL CLR和C#更好(包括性能)同樣的任務。限制SQL CLR來完成T-SQL的工作 - 調用外部Web服務,廣泛和高級的字符串和數據操作以及類似的東西。只是因爲你**可以遍歷一個表並更新SQL CLR存儲過程中的每一行 - 激動 - 行並不意味着**你應該** .. – 2012-03-29 20:33:55

回答

2

我已經完成了SQL Server的CLR程序集。這是痛苦的經歷。您可以在這種類型的CLR項目中使用很多限制。例如,使用第三方庫和開源庫是不可能的。有些庫不能只是部署到SQL服務器。你只能使用有限的庫。

第二個問題是部署和權限設置。如果您有DBA對數據庫有非常有限的策略,那麼您不能將CLR程序集部署到數據庫。

我的建議是將您的數據庫組件編寫爲ASP.Net的庫。這很容易,並且沒有像SQL Server的CLR彙編那樣的限制。

2008年,我在這個問題上寫了一個連續博客:SQL Sever Projects (1-4)。您可以將它們用作參考。

+0

Upvote是一個很好的選擇。儘管如此,這並不能回答我關於CLR SP的問題。 – 2012-04-02 14:07:08