2009-11-09 62 views
0

我的客戶端在使用我們的應用程序時遇到了一些死鎖。我想跟蹤研究的所有僵局並解決僵局。SQL server自動重啓後啓用profiler/Traceon

我目前正在運行事件死鎖圖的SQL事件探查器來捕獲死鎖場景。

實際的問題是SQL服務器每天凌晨2點重新啓動,並且分析器在重新啓動後停止捕獲事件。當我在上午10點開始分析人員時,可能會出現僵局,我可能在凌晨2點和上午10點之間錯過了這些僵局。所以我正在尋找一種方式,這樣我就可以捕獲死鎖而無需手動啓動。

我想我可以使用TRACEON(1204,-1),以便在SQL Server錯誤日誌中捕獲死鎖事件。但是我發現TRACE捕獲也在重啓後被禁用。

有沒有辦法通過SQL事件探查器捕獲死鎖或使用TRACEON而無需我手動啓動捕獲?

尼基爾

回答

0

在這裏稍稍晚點來參加派對,但是您可以創建一個存儲過程來建立跟蹤,然後將其設置爲在啓動時運行。

USE master; 
GO 

-- define the proc 
CREATE PROCEDURE usp_MakeMyTraceAtStartup AS 
    DECLARE @TraceID INT; 
    DECLARE @on BIT = 1; 
    EXEC sp_trace_create @TraceID output, 6, 'c:\mypath\mytraceout.trc', 5, NULL; 

    -- event 25 is a deadlock; see http://msdn.microsoft.com/en-us/library/ms186265.aspx 
    EXEC sp_trace_setevent @TraceID, 25, 6, @on; -- NTUserName 
    EXEC sp_trace_setevent @TraceID, 25, 7, @on; -- NTDomainName 
    EXEC sp_trace_setevent @TraceID, 25, 8, @on; -- HostName 
    EXEC sp_trace_setevent @TraceID, 25, 10, @on; -- ApplicationName 
    EXEC sp_trace_setevent @TraceID, 25, 11, @on; -- LoginName 
    EXEC sp_trace_setevent @TraceID, 25, 12, @on; -- SPID 
    EXEC sp_trace_setevent @TraceID, 25, 14, @on; -- StartTime 
    EXEC sp_trace_setevent @TraceID, 25, 23, @on; -- Success 
    EXEC sp_trace_setevent @TraceID, 25, 26, @on; -- ServerName 
    EXEC sp_trace_setevent @TraceID, 25, 31, @on; -- Error 
    EXEC sp_trace_setevent @TraceID, 25, 35, @on; -- DatabaseName 
    EXEC sp_trace_setevent @TraceID, 25, 60, @on; -- IsSystem 
    EXEC sp_trace_setevent @TraceID, 25, 64, @on; -- SessionLoginName 
    -- whatever other columns you want to audit 

    -- turn it on 
    EXEC sp_trace_setstatus @TraceID, 1; 
GO 

-- set it to run automatically at startup 
EXEC sp_procoption 'usp_MakeMyTraceAtStartup', 'startup', 'true'; 
GO 

SQL Server 2005及更高版本支持跟蹤。

0

不是相反運行軌跡或擔心什麼是停機後的特定時間之間錯過了,要求客戶什麼樣的錯誤,應用程序返回。如果它們位於應用程序中的特定區域,則應該能夠追蹤導致死鎖的語句。只是我的意見=)。

+0

好吧,在這種情況下,我所得到的僅僅是受害者的SQL,也只是最高級的SQL正在執行。如果我得到一個死鎖圖,我可以很容易地找到哪個是導致死鎖的確切sql。例如,如果一個存儲過程調用另一個,然後再次調用另一個存儲過程,那麼發生死鎖的時候,我會使用分析器得到涉及死鎖的最內部的sql,但如果沒有它們,它們將不會相同。因此我真的很想找到蹤跡。 – Nikhil 2009-11-12 06:35:02