這陣子發現之前上線的程式在某一天後掛了幾次,查了一下,發現是程式掛點的原因是因為Deadlock ,於是就開始尋找原因。
改了幾個預存程序後,狀況好像有好轉,可是還是不穩,於是就祭出SQL Server Profiler來找是哪邊造成Deadlock的。
SQL Server Profiler預設是不會追蹤lock的,所以要記得勾起來,Deadlock Graph這記得一定要勾。設完之後,就是想辦法讓Deadlock出現,然後開始追問題了。等SQL Server Profiler追蹤到Deadlock產生出Deadlock Graph,點下去看,會出現下圖,然後再追下去,就可以知道問題在哪邊發生了。
上面這張圖最左邊就是因為Deadlock被犧牲掉的,所以畫了個大大的X,這邊看的出主要是因為page lock導致的deadlock,修改過後就沒有再發生了。如果看不出來的話,也可以將Deadlock Graph輸出,可以看到是哪些SQL Script執行時導致的死結。
改了幾個預存程序後,狀況好像有好轉,可是還是不穩,於是就祭出SQL Server Profiler來找是哪邊造成Deadlock的。
SQL Server Profiler預設是不會追蹤lock的,所以要記得勾起來,Deadlock Graph這記得一定要勾。設完之後,就是想辦法讓Deadlock出現,然後開始追問題了。等SQL Server Profiler追蹤到Deadlock產生出Deadlock Graph,點下去看,會出現下圖,然後再追下去,就可以知道問題在哪邊發生了。
上面這張圖最左邊就是因為Deadlock被犧牲掉的,所以畫了個大大的X,這邊看的出主要是因為page lock導致的deadlock,修改過後就沒有再發生了。如果看不出來的話,也可以將Deadlock Graph輸出,可以看到是哪些SQL Script執行時導致的死結。
No comments:
Post a Comment