sql server deadlock跟蹤的四種方法

來源:互聯網
上載者:User

標籤:insert   分享   nsa   jpg   style   base   問題   tran   fill   

最近寫程式常會遇到deadlock victim,每次一臉懵逼。研究了下怎麼跟蹤,寫下來記錄下。

建測試資料

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; -- 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,只運行更新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

  再運行,第一段sql更新table2,運行第二段sql更新table1,死結問題重現。

說下跟蹤死結的方法:

1.使用trace log跟蹤,執行如下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模板

運行當發生死結時會自動捕獲,點擊dead lock paragraph查看死結

3.使用擴充事件跟蹤,方法只適用於sql server 2012版本,08r2版本無法直接使用。

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

輸入deadlock斷行符號,可以點擊details 把內容另存新檔xdl檔案再開啟,或點擊deadlock查看圖

 

4.使用windows效能計數器檢測到死結再去sql中查詢

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

選擇執行個體:SQL Server :Locks \\  Number of DeadLocks/sec \\ _Total 

即時查看:

下面的查詢提供了自從上次重啟以來在本伺服器上發生的所有死結:

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‘

sql server deadlock跟蹤的四種方法

相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。