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

首頁 > 數據庫 > SQL Server > 正文

總結 SQL Server 中死鎖產生的原因及解決辦法

2024-08-31 00:49:06
字體:
來源:轉載
供稿:網友


其實所有的死鎖最深層的原因就是一個:資源競爭
表現一:
    一個用戶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 ....


 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通江县| 德令哈市| 永济市| 娄底市| 芒康县| 衡东县| 崇明县| 弥勒县| 康平县| 会理县| 阿拉善右旗| 石景山区| 苍南县| 抚远县| 中阳县| 河源市| 西华县| 齐齐哈尔市| 夹江县| 宜阳县| 邹平县| 大洼县| 邯郸县| 临泉县| 奇台县| 嘉祥县| 西乌| 巴林左旗| 紫金县| 衡东县| 孝感市| 浏阳市| 孝感市| 肥城市| 尼勒克县| 习水县| 阜新市| 郯城县| 三原县| 关岭| 兰州市|