2014-03-07 65 views
1

我有一個系統,通過SP調用通過WCF服務調用的數據。SQL Server高頻插入

在系統中,我們目前有12000+個主動登錄的用戶每隔30秒(實際每分鐘200個請求)調用WCF服務。

在SQL Server端,CPU使用率達到100%,當我檢查時,超過90%的時間花費在數據庫寫入中。這會影響整體服務器性能。

我需要一些建議來解決這個問題,這樣我們就可以減少數據庫寫入操作,而更多的CPU保持空閒狀態。

我打算集成任何其他數據庫服務器,如果需要的話,使用實體框架或任何其他ORM組合。我需要解決方案來處理這個問題。

其他可能有幫助的信息: 表沒有定義索引 數據庫的增長因子設置爲200MB。 SQL Server版本是2012.

回答

0

SImple解決方案:返回寫入。不要爲每個插入調用sql服務器。

建立一個服務,收集它們並將它們稱爲更粗。主要的問題是事務處理有點費用高昂 - 在這種情況下,批處理可能是有意義的。

不要爲每行調用一個SP,將它們加載到臨時表中,然後批量處理它們(或使用表變量來爲sp提供多行信息)。

這消除了很多問題,包括大量的提交(你基本上要求像200 TPS這是相當沉重,這裏不需要)。如何做到這一點取決於你 - 但是對於那些沉重的東西,我會遠離ORM(實體框架在沒有分配任何東西的情況下是搞笑的 - 這應該是大量的sp調用),並至少使用手工製作的sql這部分。我喜歡ORM,但在需要的時候擁有高性能的手工製作方法總是不錯的。

+0

該SP還檢查同一個表中的現有記錄。是否有可能將您的建議納入SP?任何想法,見解都會很棒。 –

+0

是的。所以呢?加載到臨時表中,讓SP處理臨時表,或使用表變量在一次調用中將多噸行運行到SP中。我從來沒有說過「不要在別的地方使用SP」,只是「不要用一條線來稱呼它」。轉向在同一個呼叫中處理一組行。 – TomTom

+0

好的。讓我看看,我會在這裏更新。感謝您的想法@TomTom –