SQL Profiler - Skripterstellung eines Trace mit HostName-Filter

7

Ich habe einen Bestand an Skript-Trace-Definitionen, die ich für verschiedene Diagnoseebenen verwende, von denen keine nach Hostname filtern. Ich musste heute den Datenverkehr nach Host filtern, um:

  1. Profiler angezündet
  2. Leere Spur erstellt
  3. SP hinzugefügt: Start / Complete
  4. Legen Sie einen Filter für den Hostnamen fest
  5. Skript für die Datei test.sql

Datei in SSMS öffnen, kein Zeichen des Filters. Spülen, wiederholen, gleich noch einmal. Angenommen, ich habe etwas Dummes getan, habe ich den zu verwendenden Wert nachgeschlagen (schwerer zu finden als er sein sollte!) Und manuell zu meiner Trace-Definition hinzugefügt, was funktioniert hat.

EXEC sp_trace_setfilter @TraceId, 8, 0, 6, N'MyHostName'

Kam zurück, um zu überprüfen, warum ich dies nicht von Profiler zum Laufen bringen konnte und das gleiche Ergebnis. Ich fand Erwähnung, dass dies ein Problem beim Skripting von Traces für 2000 von SSMS ist, aber keine Erwähnung dieser Situation mit SSMS2005 / 2008 bis 2005/2008 Servern. Ist das ein Fehler in Profiler?

Mark Storey-Smith
quelle

Antworten:

6

Wenn das Skript in Profiler 2005 generiert wird, ist der für den logischen Operator gespeicherte Standardwert 1 = 'ODER', sodass der Trace mehr Informationen erfasst, als wir ursprünglich beabsichtigt hatten.

exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME1'    -- OR 
exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME2'
exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME3'
set @bigintfilter = 10 -- reads >= 10
exec sp_trace_setfilter @TraceID, 16, 0, 4, @bigintfilter  -- AND
exec sp_trace_setfilter @TraceID, 35, 1, 6, N'DB'          -- OR

In Profiler> = 2008 hat das Skript 0 (UND) für das erste Auftreten der zu filternden Spalte.

exec sp_trace_setfilter @TraceID, 8, 0, 0, N'HOSTNAME1'    -- AND               
exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME2'  
exec sp_trace_setfilter @TraceID, 8, 1, 0, N'HOSTNAME3' 
exec sp_trace_setfilter @TraceID, 35,0, 6, N'DB'           -- AND                
set @bigintfilter = 10 -- reads
exec sp_trace_setfilter @TraceID, 16, 0, 4, @bigintfilter  -- AND

Dies sieht aus wie ein Fehler in Profiler 2005.

Vorabend
quelle
1

Sie müssen überprüfen, ob in der Server-Trace-Datei die Spalte in der Spaltenliste für alle Ihre Ereignisse hinzugefügt wurde. Wenn Sie also Ereignisse 10 und 12 haben (RPC: Completed und SQL: BatchCompleted), müssen Sie sp_trace_setevent für alle Spalten ausführen, einschließlich für die Spalte Hostname:

exec sp_trace_setevent @TraceID, 10, 8, @on
exec sp_trace_setevent @TraceID, 12, 8, @on

wobei 10 und 12 - Ereignisse und 8 - Spalten Hostname

sp_trace_setevent sagt:

"Benutzer müssen sp_trace_setevent für jede für jedes Ereignis hinzugefügte Spalte ausführen. Wenn @on bei jeder Ausführung auf 1 gesetzt ist, fügt sp_trace_setevent das angegebene Ereignis zur Liste der Ereignisse des Trace hinzu. Wenn @on auf 0 gesetzt ist, entfernt sp_trace_setevent das angegebenes Ereignis aus der Liste. "

Danach sollte der Filter ordnungsgemäß funktionieren können.

Marian
quelle
Das Problem ist, dass wenn ich HostName als Filter in Profiler festlege, dieser nicht in der Skript-Trace-Definition angezeigt wird. Wenn ich den Filter manuell zu meiner Skriptdefinition hinzufüge, funktioniert er einwandfrei.
Mark Storey-Smith
Markieren - Sie sagten "Datei in SSMS öffnen, kein Zeichen des Filters.". Daraus ergibt sich, dass der sp_trace_setfilter kein Skript enthält. Aber haben Sie überprüft, ob das Ereignis für diese bestimmte Spalte festgelegt ist: exec sp_trace_setevent _TraceID, 12, 8, _on (anstelle von 12 benötigen Sie Ihre verwendete Ereignis-ID)?
Marian
Du hast vielleicht recht. Ich habe den Prozess mit einem einzigen Ereignis noch einmal durchlaufen und es wurde ein gutes Skript erstellt. Ich hätte geschworen, HostName mit "Spalte auswählen" oben im Raster auszuwählen (um sicherzustellen, dass es für alle Ereignisse ausgewählt wurde), aber es sieht so aus, als wäre ich irgendwo falsch gelaufen! Ich werde später mit verschiedenen Kombinationen herumspielen und das ursprüngliche Q aktualisieren, wenn es noch irgendwelche Kuriositäten gibt.
Mark Storey-Smith