国产探花免费观看_亚洲丰满少妇自慰呻吟_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 ....

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 明光市| 浪卡子县| 山西省| 温泉县| 望江县| 木兰县| 海安县| 沙坪坝区| 延津县| 桐梓县| 台州市| 西和县| 平安县| 太仓市| 丰县| 琼结县| 溆浦县| 新沂市| 华亭县| 巴东县| 定西市| 北辰区| 东海县| 克山县| 松阳县| 郸城县| 正宁县| 眉山市| 新乐市| 广河县| 揭东县| 高州市| 夏津县| 台前县| 南皮县| 千阳县| 文水县| 河曲县| 深州市| 孟村| 读书|