iT邦幫忙

3

SQL Server 死結 (deadlock) 的分析查詢 - 心得分享

DBABootcamp

在 SQL Server, 死結的發生是因為有兩個或多個工作(processes) 正在互相等待彼此所保留鎖著的資源,而造成工作永久封鎖彼此的情況。當 deadlock 發生時, SQL Server 會自行選擇其中一個工作作為犧牲者,以錯誤來結束其交易。如下。

https://ithelp.ithome.com.tw/upload/images/20210302/20135038n93p1gbaYE.jpg

一般來講, DBA 會開啟設定 trace flag (1222) 來蒐集 deadlock 的資訊,以便分析 deadlock 的發生。另外一個方法就是使用擴充事件 (Extended Events) 的 system_health 工作階段 (Sessions) 來查詢 deadlock 的發生原因。如下。

select event_data = CONVERT(XML, event_data)
from sys.fn_xe_file_target_read_file(N'system_health*.xel', NULL, NULL, NULL)
where event_data like '%xml_deadlock%'

https://ithelp.ithome.com.tw/upload/images/20210302/20135038EqXtigdF9U.jpg

點選 xml,就可以查詢到死結發生的原因。

https://ithelp.ithome.com.tw/upload/images/20210302/20135038LvgOu6nYV7.jpg


尚未有邦友留言

立即登入留言