今天在執行一個存儲過程中碰到了一個問題。系統裏,有一個存儲過程,執行時間比較長,如果在網頁上用戶同時提交的數量比較多的話,裏面的事務就會執行失敗,造成處理錯誤。
試驗修改了這個事務的級別,從read uncomitted 改到serializable,但是都還是會出錯,分析原因,最有可能的是數據庫資源不夠,無法同時處理多個大規模的事務。既然數據庫這一塊不能解決問題,那麼,就從調用的程序入手,限定爲完全順序執行,於是……解決問題。 現將方法貼出來,請各位指教。
環境 ASP.NET, 數據庫 SQLServer 2005
代碼很簡單,如下
function RunProcedure()
{
if (Application["lockobj"]==null) Application["lockobj"]=new Object();
lock(Application["lockobj"])
{
// exec sp
// 較長時間的等待, 10秒鐘左右
}
//其他處理
}
這樣保證不管有多少用戶同時進入,只能有一個用戶來運行這個存儲過程,防止了錯誤,唯一的問題在於,用戶等待的時間會長一點……
請大家指教。