国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

SQLServer中死鎖產生的原因及解決辦法

2024-07-21 02:12:02
字體:
來源:轉載
供稿:網友

其實所有的死鎖最深層的原因就是一個:資源競爭
表現一:
一個用戶a 訪問表a(鎖住了表a),然后又訪問表b
另一個用戶b 訪問表b(鎖住了表b),然后企圖訪問表a
這時用戶a由于用戶b已經鎖住表b,它必須等待用戶b釋放表b,才能繼續,好了他老人家就只好老老實實在這等了
同樣用戶b要等用戶a釋放表a才能繼續這就死鎖了
解決方法:
這種死鎖是由于你的程序的bug產生的,除了調整你的程序的邏輯別無他法
仔細分析你程序的邏輯,
1:盡量避免同時鎖定兩個資源
2: 必須同時鎖定兩個資源時,要保證在任何時刻都應該按照相同的順序來鎖定資源.

表現二:
用戶a讀一條紀錄,然后修改該條紀錄
這是用戶b修改該條紀錄
這里用戶a的事務里鎖的性質由共享鎖企圖上升到獨占鎖(for update),而用戶b里的獨占鎖由于a有共享鎖存在所以必須等a釋
放掉共享鎖,而a由于b的獨占鎖而無法上升的獨占鎖也就不可能釋放共享鎖,于是出現了死鎖。
這種死鎖比較隱蔽,但其實在稍大點的項目中經常發生。
解決方法:
讓用戶a的事務(即先讀后寫類型的操作),在select 時就是用update lock
語法如下:
select * from table1 with(updlock) where ....

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延庆县| 遂昌县| 四子王旗| 昌宁县| 定安县| 朝阳区| 沧州市| 方正县| 曲沃县| 九台市| 榆社县| 乌拉特后旗| 庆阳市| 台江县| 龙川县| 梅河口市| 五常市| 丁青县| 桦南县| 贺兰县| 福州市| 江北区| 乌鲁木齐市| 和顺县| 鄂尔多斯市| 丰都县| 祁阳县| 南汇区| 永春县| 余江县| 沂水县| 山东省| 当阳市| 监利县| 宁化县| 外汇| 新安县| 和静县| 化德县| 钟山县| 合肥市|