Monday, August 3, 2009

[SQL] 用SQL Server Profiler 找出Deadlock原因

這陣子發現之前上線的程式在某一天後掛了幾次,查了一下,發現是程式掛點的原因是因為Deadlock ,於是就開始尋找原因。

改了幾個預存程序後,狀況好像有好轉,可是還是不穩,於是就祭出SQL Server Profiler來找是哪邊造成Deadlock的。


SQL Server Profiler預設是不會追蹤lock的,所以要記得勾起來,Deadlock Graph這記得一定要勾。設完之後,就是想辦法讓Deadlock出現,然後開始追問題了。等SQL Server Profiler追蹤到Deadlock產生出Deadlock Graph,點下去看,會出現下圖,然後再追下去,就可以知道問題在哪邊發生了。

DeadLock2

上面這張圖最左邊就是因為Deadlock被犧牲掉的,所以畫了個大大的X,這邊看的出主要是因為page lock導致的deadlock,修改過後就沒有再發生了。如果看不出來的話,也可以將Deadlock Graph輸出,可以看到是哪些SQL Script執行時導致的死結。

No comments:

Post a Comment