在這裏,我面臨一個更具挑戰性的問題,並像往常一樣打開本網站獲得幫助。將多個插入到一個表中
我有一個Web服務執行一些業務邏輯,並最終將結果插入到表中。這工作正常,如果我的應用程序是在最小的負載。
現在,當負載很重時,我的INSERT
SQL語句已超時。我增加了連接超時和命令超時。但問題是調用相同Web方法的線程太多。只是爲了提供一些提示,我在重負載下的OPEN sql連接數量達到了500+。僅供參考,每次執行命令後我都會關閉連接。
現在我應該在這裏做什麼來優化這個東西?
我打算將INSERT
數據存儲在數據表中,並將此數據表存儲在APPLICATION變量中。每兩分鐘後,將數據表中的數據插入數據庫。
你們有沒有其他的想法可以使我的生活更順暢?
謝謝
編輯
這裏有更多的細節,當我在Management Studio運行插入查詢
SQL Server分析和編譯時間: CPU時間= 0毫秒,經過的時間= 0毫秒。
SQL Server分析和編譯時間: CPU時間= 0毫秒,經過時間= 11毫秒。
表'IndexTable1'。掃描計數0,邏輯讀取2,物理讀取0,預讀讀取0,lob邏輯讀取0,lob物理讀取0,lob預讀取讀取0.
表'IndexTable2'。掃描計數0,邏輯讀取2,物理讀取0,預讀讀取0,lob邏輯讀取0,lob物理讀取0,lob預讀取讀取0.
表'fulltext_index_docidstatus_171147655'。掃描計數0,邏輯讀取11,物理讀取0,預讀讀取0,lob邏輯讀取0,lob物理讀取0,lob預讀取讀取0.
表'MAINTABLE'。掃描計數0,邏輯讀取28,物理讀取4,預讀0,lob邏輯讀取0,lob物理讀取0次,lob預讀0
(受影響1行(S))
(1 row(s)affected)
SQL Server執行時間: CPU時間= 0毫秒,經過時間= 69毫秒。
SQL Server分析和編譯時間: CPU時間= 0毫秒,經過時間= 0毫秒。
SQL Server執行時間: CPU時間= 0毫秒,經過時間= 0毫秒。
連接池有多大? – Jordan 2012-01-05 06:20:28
您完全需要對您的應用程序進行基準測試,以確定潛在的瓶頸。對於初學者來說,熟悉SQL Server的「解釋計劃」,檢查你的索引,並查看負載下的Windows性能監視器,以檢查CPU,RAM和磁盤I/O利用率。請看這些鏈接:1)http://msdn.microsoft.com/en-us/library/ff647768.aspx 2)http://msdn.microsoft.com/en-us/library/ms178071.aspx – paulsm4 2012-01-05 06:23:36
您是否查看過生產者/消費者模式以處理來自共享上下文的插入,這樣您就可以控制連接數並使用SqlBulkCopy。 – Lloyd 2012-01-05 06:24:49