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

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

SQLServer 中的死鎖說明

2020-07-25 13:24:20
字體:
來源:轉載
供稿:網友
兩個進程發生死鎖的典型例子是:進程T1中獲取鎖A,申請鎖B;進程T2中獲取鎖B,申請鎖A,我們下面動手來演示一下這種情況:

1. 創建一個Database,名為InvDB。

2. 執行下面腳本創建person表并填充兩條數據:

image

3. 在SQL Server Management Studio的兩個窗口中同時執行下面的查詢:

image image

這段代碼在默認的READ COMMITTED隔離級別下運行,兩個進程分別在獲取一個排它鎖的情況下,申請對方的共享鎖從而造成死鎖。

可見一個進程可以正常更新并顯示結果,而另一個進程已經被回滾:

(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. 啟動 SQL Server Profiler,選擇下面4種Events:

image

再執行一次上面的死鎖實驗,可以看到如下所示的死鎖圖:

image

 

非常有趣的一點是:第二次執行上述語句不會發生死鎖!這是因為此時兩個進程中,SQL Server會智能的識別出update語句是不需要做的,所以都不會去獲取排它鎖,當然也就不會死鎖了。SQL Server 2008 的查詢優化器還真是非常強大!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安图县| 福安市| 防城港市| 三穗县| 萍乡市| 炉霍县| 峨山| 当雄县| 徐水县| 广汉市| 江源县| 叙永县| 娄底市| 肃宁县| 淳化县| 筠连县| 汝阳县| 夏津县| 大同县| 永靖县| 神农架林区| 河北省| 屏东市| 新田县| 平谷区| 阜阳市| 曲水县| 玉屏| 大洼县| 缙云县| 昌邑市| 密云县| 邯郸县| 扶绥县| 牙克石市| 潮安县| 阳谷县| 荆门市| 黄骅市| 和田县| 花莲市|