2008-11-14 273 views
2

我在SQL Server 2005上執行一個可序列化事務的存儲過程。在這個事務中,它選擇一個帶有行鎖的表。在過程結束時,在回滾/提交之後,它將事務隔離級別設置爲Read Commited。SQL Server目前無法獲取LOCK資源 - 該怎麼辦?

這個程序運行時,不同的進程有這些限制來控制併發訪問,但突然,一段時間後,一些流程拋出一個SQL異常:

在SQL Server 數據庫引擎實例不能獲得一個LOCK 資源在這個時候。當活動的用戶較少時重新運行 聲明。請數據庫管理員 檢查此實例的鎖和內存 配置,或者檢查長時間運行的事務的 。

這是不可預測的,它可能發生在早期或一小時後。

我能做些什麼來解決這個問題?

回答

3

你有太多鎖定你的記憶。增加內存或重寫您的查詢使用更少的鎖。 可串行化是一個鎖定豬。你真的需要它嗎?

+0

+1完全同意。你真的需要一個可序列化的交易嗎? – 2008-11-14 14:28:30

0

我通過減少數據範圍,如果你選擇1000個記錄服務器之間通過, 含義解決了這個錯誤嘗試降低交易分爲兩個批次500個記錄和其他500個記錄 保持數量減少,直至停止錯誤