我在ASP.NET應用程序中得到這個進程併發:SQL Server 2005中 - 管理上表
- 開始連接
- 開始交易
- 插入表「LoadData」一SqlBulkCopy類中的很多值包含一個包含特定LoadId的列。
- 調用一個存儲過程:
- 讀取特定LoadId的表「LoadData」。
- 對於每一行都進行大量計算,這意味着要讀取數十個表並將結果寫入臨時(#temp)表(最後幾分鐘的過程)。
- 刪除特定LoadId的「LoadDate」中的行。
- 完成一切後,將結果寫入結果表。
- 提交交易或者如果事情失敗回滾。
我的問題是,如果我有2個用戶啓動進程,第二個將不得不等待前一個已完成(因爲插入似乎把一個排他鎖),我的應用程序有時在超時(並且用戶不高興等待:))。
我正在尋找一種方法能夠有,做一切並行,因爲沒有互動的用戶,除了最後一個:寫的結果。我認爲阻止我的是「LoadData」表中的插入/刪除操作。 我檢查了其他事務隔離級別,但似乎沒有任何東西可以幫助我。
什麼是完美的是,能夠刪除「LoadData」表上的排他鎖(可以強制SqlServer只鎖定行而不是表?),當插入完成時,但沒有結束交易。
有什麼建議嗎?
事務級別`READ COMMITTED SNAPSHOT`救了我很多情況下! – 2010-07-29 13:02:44