Comme d'autres l'ont fait remarquer, vous pouvez utiliser SQL Profiler, mais vous pouvez également tirer parti de ses fonctionnalités grâce aux procédures stockées du système sp_trace_*. Par exemple, ce snippet SQL (sur 2000 au moins ; je pense que c'est la même chose pour SQL 2008 mais vous devrez vérifier) attrape RPC:Completed
et SQL:BatchCompleted
pour toutes les requêtes qui prennent plus de 10 secondes à s'exécuter, et enregistrez la sortie dans un fichier de trace que vous pouvez ouvrir dans SQL profiler à une date ultérieure :
DECLARE @TraceID INT
DECLARE @ON BIT
DECLARE @RetVal INT
SET @ON = 1
exec @RetVal = sp_trace_create @TraceID OUTPUT, 2, N'Y:\TraceFile.trc'
print 'This trace is Trace ID = ' + CAST(@TraceID AS NVARCHAR)
print 'Return value = ' + CAST(@RetVal AS NVARCHAR)
-- 10 = RPC:Completed
exec sp_trace_setevent @TraceID, 10, 1, @ON -- Textdata
exec sp_trace_setevent @TraceID, 10, 3, @ON -- DatabaseID
exec sp_trace_setevent @TraceID, 10, 12, @ON -- SPID
exec sp_trace_setevent @TraceID, 10, 13, @ON -- Duration
exec sp_trace_setevent @TraceID, 10, 14, @ON -- StartTime
exec sp_trace_setevent @TraceID, 10, 15, @ON -- EndTime
-- 12 = SQL:BatchCompleted
exec sp_trace_setevent @TraceID, 12, 1, @ON -- Textdata
exec sp_trace_setevent @TraceID, 12, 3, @ON -- DatabaseID
exec sp_trace_setevent @TraceID, 12, 12, @ON -- SPID
exec sp_trace_setevent @TraceID, 12, 13, @ON -- Duration
exec sp_trace_setevent @TraceID, 12, 14, @ON -- StartTime
exec sp_trace_setevent @TraceID, 12, 15, @ON -- EndTime
-- Filter for duration [column 13] greater than [operation 2] 10 seconds (= 10,000ms)
declare @duration bigint
set @duration = 10000
exec sp_trace_setfilter @TraceID, 13, 0, 2, @duration
Vous pouvez trouver l'ID de chaque trace-événement, colonnes, etc. sur Books Online ; il suffit de rechercher l'option sp_trace_create , sp_trace_setevent et sp_trace_setfiler sprocs. Vous pouvez alors contrôler la trace comme suit :
exec sp_trace_setstatus 15, 0 -- Stop the trace
exec sp_trace_setstatus 15, 1 -- Start the trace
exec sp_trace_setstatus 15, 2 -- Close the trace file and delete the trace settings
...où '15' est l'ID de la trace (tel que rapporté par sp_trace_create, que le premier script lance, ci-dessus).
Vous pouvez vérifier avec quoi les traces fonctionnent :
select * from ::fn_trace_getinfo(default)
La seule chose que je dirai par prudence -- Je ne sais pas quelle sera la charge de votre système ; cela en ajoutera un peu, mais l'importance de ce "peu" dépend probablement de la charge de votre serveur.
1 votes
http://www.ssmstoolspack.com/ fournit une fenêtre d'historique si c'est ce que vous recherchez.