sql server deadlock跟蹤的4種實現(xiàn)方法
前言
最近寫程序常會遇到deadlock victim,每次一臉懵逼。研究了下怎么跟蹤,寫下來記錄下。文中介紹的非常詳細,對大家具有一定的參考學習價值,下面話不多說了,來一起看看詳細的介紹吧
建測試數(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,先運行只更新table1部分
USE testdb; -- Transaction1 BEGIN TRAN UPDATE table1 SET student_name = student_name + 'Transaction1' WHERE id IN (1,2,3,4,5) UPDATE table2 SET student_name = student_name + 'Transaction1' WHERE id = 1 COMMIT TRANSACTION
第二段sql,只運行更新table2部分
USE testdb; -- Transaction2 BEGIN TRAN UPDATE table2 SET student_name = student_name + 'Transaction2' WHERE id = 1 UPDATE table1 SET student_name = student_name + 'Transaction2' WHERE id IN (1,2,3,4,5) COMMIT TRANSACTION
再運行,第一段sql更新table2,運行第二段sql更新table1,死鎖問題重現(xiàn)。
說下跟蹤死鎖的方法:
1.使用trace log跟蹤,執(zhí)行如下sql開啟1222和1204 flag,死鎖信息會在sql server 日志中輸出。
DBCC TRACEON (1204, -1) DBCC TRACEON (1222, -1)
下圖是1204輸出的信息
下圖是1222輸出的信息
2.使用sql server profiler進行跟蹤
點擊Tools -> sql server profiler 選擇sql locks模板
運行當發(fā)生死鎖時會自動捕獲,點擊dead lock paragraph查看死鎖
3.使用擴展事件跟蹤,方法只適用于sql server 2012版本,08r2版本無法直接使用。
依次點擊Management -> Extended Events - >system health - >package0.event_file
輸入deadlock回車,可以點擊details 把內(nèi)容另存為xdl文件再打開,或點擊deadlock查看圖
4.使用windows性能計數(shù)器檢測到死鎖再去sql中查詢
命令行輸入:perfmon 或者 perfmon /sys
選擇實例:SQL Server :Locks \\ Number of DeadLocks/sec \\ _Total
實時查看:
下面的查詢提供了自從上次重啟以來在本服務(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)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支持。
上一篇:sql server學習基礎(chǔ)之內(nèi)存初探
欄 目:MsSql
下一篇:sql server性能調(diào)優(yōu) I/O開銷的深入解析
本文標題:sql server deadlock跟蹤的4種實現(xiàn)方法
本文地址:http://mengdiqiu.com.cn/a1/MsSql/10359.html
您可能感興趣的文章
- 01-10SQLServer存儲過程實現(xiàn)單條件分頁
- 01-10SQL Server 2012降級至2008R2的方法
- 01-10SQLServer中防止并發(fā)插入重復(fù)數(shù)據(jù)的方法詳解
- 01-10SQL Server數(shù)據(jù)庫定時自動備份
- 01-10SQL Server性能調(diào)優(yōu)之緩存
- 01-10實現(xiàn)SQL Server 原生數(shù)據(jù)從XML生成JSON數(shù)據(jù)的實例代碼
- 01-10Sql Server 死鎖的監(jiān)控分析解決思路
- 01-10SqlServer 在事務(wù)中獲得自增ID的實例代碼
- 01-10SqlServer快速檢索某個字段在哪些存儲過程中(sql 語句)
- 01-10SQLServer性能優(yōu)化--間接實現(xiàn)函數(shù)索引或者Hash索引


閱讀排行
本欄相關(guān)
- 01-10SQLServer存儲過程實現(xiàn)單條件分頁
- 01-10SQLServer中防止并發(fā)插入重復(fù)數(shù)據(jù)的方
- 01-10SQL Server 2012降級至2008R2的方法
- 01-10SQL Server性能調(diào)優(yōu)之緩存
- 01-10SQL Server數(shù)據(jù)庫定時自動備份
- 01-10Sql Server 死鎖的監(jiān)控分析解決思路
- 01-10實現(xiàn)SQL Server 原生數(shù)據(jù)從XML生成JSON數(shù)
- 01-10SqlServer快速檢索某個字段在哪些存儲
- 01-10SqlServer 在事務(wù)中獲得自增ID的實例代
- 01-10SQLServer性能優(yōu)化--間接實現(xiàn)函數(shù)索引或
隨機閱讀
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實例總結(jié)