включить профилировщик / Traceon после автоматического перезапуска сервера SQL - PullRequest
0 голосов
/ 09 ноября 2009

Мой клиент сталкивается с некоторыми тупиками при использовании нашего приложения. Я хочу отслеживать все тупики для своего исследования и решать тупики.

В настоящее время я запускаю профилировщик SQL для графа взаимоблокировки событий, чтобы зафиксировать сценарий взаимоблокировки.

реальная проблема заключается в том, что сервер SQL перезапускается каждый день в 2 часа ночи, а профилировщик прекращает захват событий после перезапуска. к тому времени, когда я прихожу в офис при запуске профилировщика, скажем, в 10 часов утра, могут быть тупики, которые я мог бы пропустить между 2 часами утра и 10 часами утра. так что я ищу способ, чтобы я мог захватить тупики без запуска вручную.

Я подумал, что мог бы использовать TRACEON (1204, -1), чтобы события взаимоблокировки регистрировались в журналах ошибок SQL Server. Но я обнаружил, что захват TRACE тоже отключается после перезапуска.

Есть ли способ, которым я могу захватить взаимоблокировки либо с помощью профилировщика SQL, либо с помощью TRACEON без моего ручного запуска захвата?

Нихилу

Ответы [ 2 ]

0 голосов
/ 29 мая 2014

Немного опоздал на вечеринку, но вы можете создать сохраненный процесс, который установит ваш след, а затем настроить его на запуск при запуске.

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 голосов
/ 10 ноября 2009

Вместо того, чтобы запускать трассировку или беспокоиться о том, что пропущено между этими конкретными часами после простоя, спросите клиента, какую ошибку возвращает приложение. Если они находятся в определенной области в приложении, вы сможете отслеживать операторы, которые вызывают тупик. Просто мое мнение =).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...