新聞中心
sql server死鎖是在sql server數(shù)據(jù)庫(kù)中經(jīng)常發(fā)生的情況,下面就將對(duì)sql server死鎖進(jìn)行深入的解讀,供您參考。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供大東網(wǎng)站建設(shè)、大東做網(wǎng)站、大東網(wǎng)站設(shè)計(jì)、大東網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、大東企業(yè)網(wǎng)站模板建站服務(wù),十載大東做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
死鎖(deadlock)指進(jìn)程之間互相永久阻塞的狀態(tài),SQL可以檢測(cè)到死鎖,并選擇終止其中一個(gè)事務(wù)以干預(yù)sql server死鎖狀態(tài)。兩個(gè)進(jìn)程發(fā)生sql server死鎖的典型例子是:進(jìn)程T1中獲取鎖A,申請(qǐng)鎖B;進(jìn)程T2中獲取鎖B,申請(qǐng)鎖A,我們下面動(dòng)手來(lái)演示一下這種情況:
1. 創(chuàng)建一個(gè)Database,名為InvDB。
2. 執(zhí)行下面腳本創(chuàng)建person表并填充兩條數(shù)據(jù):
3. 在SQL Server Management Studio的兩個(gè)窗口中同時(shí)執(zhí)行下面的查詢:
這段代碼在默認(rèn)的READ COMMITTED隔離級(jí)別下運(yùn)行,兩個(gè)進(jìn)程分別在獲取一個(gè)排它鎖的情況下,申請(qǐng)對(duì)方的共享鎖從而造成死鎖。
可見一個(gè)進(jìn)程可以正常更新并顯示結(jié)果,而另一個(gè)進(jìn)程已經(jīng)被回滾:
(1 row(s) affected)
Msg 1205, Level 13, State 45, Line 8
Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
4. 啟動(dòng) SQL Server Profiler,選擇下面4種Events:
再執(zhí)行一次上面的死鎖實(shí)驗(yàn),可以看到如下所示的死鎖圖:
非常有趣的一點(diǎn)是:第二次執(zhí)行上述語(yǔ)句不會(huì)發(fā)生死鎖!這是因?yàn)榇藭r(shí)兩個(gè)進(jìn)程中,SQL Server會(huì)智能的識(shí)別出update語(yǔ)句是不需要做的,所以都不會(huì)去獲取排它鎖,當(dāng)然也就不會(huì)死鎖了。SQL Server 2008 的查詢優(yōu)化器還真是非常強(qiáng)大!
【編輯推薦】
SQL SERVER字段類型的說(shuō)明
SQL Server安全解析
保護(hù)sql server安全的措施
sql server安全的兩層模型
Sql Server日期時(shí)間函數(shù)
新聞名稱:sqlserver死鎖的檢測(cè)方法
URL分享:http://www.dlmjj.cn/article/djdseid.html


咨詢
建站咨詢
