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

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

sql server deadlock跟蹤的4種實現(xiàn)方法

2024-08-31 01:05:26
字體:
供稿:網(wǎng)友

前言

最近寫程序常會遇到deadlock victim,每次一臉懵逼。研究了下怎么跟蹤,寫下來記錄下。文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,下面話不多說了,來一起看看詳細(xì)的介紹吧

建測試數(shù)據(jù)

CREATE DATABASE testdb; GO USE testdb; CREATE TABLE table1(id INT IDENTITY PRIMARY KEY,student_name NVARCHAR(50) ) INSERT INTO table1 values ('James')INSERT INTO table1 values ('Andy')INSERT INTO table1 values ('Sal')INSERT INTO table1 values ('Helen')INSERT INTO table1 values ('Jo')INSERT INTO table1 values ('Wik')  CREATE TABLE table2(id INT IDENTITY PRIMARY KEY,student_name NVARCHAR(50) ) INSERT INTO table2 values ('Alan')INSERT INTO table2 values ('Rik')INSERT INTO table2 values ('Jack')INSERT INTO table2 values ('Mark')INSERT INTO table2 values ('Josh')INSERT INTO table2 values ('Fred')

第一段sql,先運(yùn)行只更新table1部分

USE testdb; -- Transaction1BEGIN TRAN UPDATE table1SET student_name = student_name + 'Transaction1'WHERE id IN (1,2,3,4,5) UPDATE table2SET student_name = student_name + 'Transaction1'WHERE id = 1 COMMIT TRANSACTION

第二段sql,只運(yùn)行更新table2部分

USE testdb; -- Transaction2BEGIN TRAN UPDATE table2SET student_name = student_name + 'Transaction2'WHERE id = 1 UPDATE table1SET student_name = student_name + 'Transaction2'WHERE id IN (1,2,3,4,5) COMMIT TRANSACTION

再運(yùn)行,第一段sql更新table2,運(yùn)行第二段sql更新table1,死鎖問題重現(xiàn)。

sql,server,deadlock,跟蹤

說下跟蹤死鎖的方法:

1.使用trace log跟蹤,執(zhí)行如下sql開啟1222和1204 flag,死鎖信息會在sql server 日志中輸出。

DBCC TRACEON (1204, -1)DBCC TRACEON (1222, -1)

下圖是1204輸出的信息

sql,server,deadlock,跟蹤

下圖是1222輸出的信息

sql,server,deadlock,跟蹤

2.使用sql server profiler進(jìn)行跟蹤

點擊Tools -> sql server profiler 選擇sql locks模板

sql,server,deadlock,跟蹤

運(yùn)行當(dāng)發(fā)生死鎖時會自動捕獲,點擊dead lock paragraph查看死鎖

sql,server,deadlock,跟蹤

3.使用擴(kuò)展事件跟蹤,方法只適用于sql server 2012版本,08r2版本無法直接使用。

依次點擊Management -> Extended Events - >system health - >package0.event_file

sql,server,deadlock,跟蹤

輸入deadlock回車,可以點擊details 把內(nèi)容另存為xdl文件再打開,或點擊deadlock查看圖

sql,server,deadlock,跟蹤

4.使用windows性能計數(shù)器檢測到死鎖再去sql中查詢

命令行輸入:perfmon 或者 perfmon /sys

選擇實例:SQL Server :Locks // Number of DeadLocks/sec // _Total

實時查看:

sql,server,deadlock,跟蹤

下面的查詢提供了自從上次重啟以來在本服務(wù)器上發(fā)生的所有死鎖:

SELECT cntr_value AS NumOfDeadLocks

FROM sys.dm_os_performance_counters

WHERE object_name = 'SQLServer:Locks'

AND counter_name = 'Number of Deadlocks/sec'

AND instance_name = '_Total'

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 涞水县| 罗江县| 桐柏县| 大埔区| 诸暨市| 乌兰县| 怀柔区| 沈阳市| 广州市| 霍城县| 武清区| 曲周县| 库伦旗| 白城市| 云霄县| 封丘县| 左权县| 赤峰市| 曲麻莱县| 武鸣县| 博野县| 万山特区| 楚雄市| 上蔡县| 稷山县| 集贤县| 桂阳县| 阿克苏市| 汉川市| 永昌县| 海城市| 广灵县| 文成县| 正阳县| 新野县| 海原县| 卫辉市| 桐柏县| 荔浦县| 英超| 新昌县|