回到目錄
關于鎖的相關知識,大家可以看我的這篇文章《知方可補不足~Sqlserver中的幾把鎖和.net中的事務級別》
死鎖我想大家都知道,當一個對話(線程)占用一個資源時,別一個線程也同時去訪問它,并且其中一個優化級高的對話將SQL鎖狀態提升為X鎖(排它鎖)后,其一個對話將會被作為“犧牲品”拋棄,這種現象在SQLSERVER中就叫做死鎖,引起死鎖的原因有很多,一般在網上被前人總結為四點
1、互斥使用(資源獨占) 一個資源每次只能給一個進程使用 2、不可強占(不可剝奪) 資源申請者不能強行的從資源占有者手中奪取資源,資源只能由占有者自愿釋放 3、請求和保持(部分分配,占有申請) 一個進程在申請新的資源的同時保持對原有資源的占有(只有這樣才是動態申請,動態分配) 4、循環等待 存在一個進程等待隊列 {P1 , P2 , … , Pn}, 其中P1等待P2占有的資源,P2等待P3占有的資源,…,Pn等待P1占有的資源,形成一個進程等待環路
觀察鎖的發生,使用sqlProfiler工具
新聞熱點
疑難解答