16 Stimmen

Gibt es eine Möglichkeit, einen SQL Profiler-Trace zu filtern?

Ich versuche, eine Fehlersuche durchzuführen dieses Problem SQL Profiler verwenden (SQL 2008)

Nach ein paar Tagen, in denen der Trace in der Produktion lief, trat der Fehler wieder auf, und jetzt versuche ich, die Ursache zu diagnostizieren. Das Problem ist, dass der Trace 400k Zeilen hat, von denen 99,9% vom "Report Server" kommen, von dem ich nicht einmal weiß, warum er eingeschaltet ist, aber er scheint SQL Server jede Sekunde anzupingen...

Gibt es eine Möglichkeit, einige Datensätze aus der Aufzeichnung herauszufiltern, um den Rest betrachten zu können?
Kann ich dies mit der aktuellen .trc-Datei tun, oder muss ich den Trace erneut ausführen?
Gibt es andere Anwendungen, die die .trc-Datei anzeigen und mir diese Funktionalität bieten können?

30voto

Mitch Wheat Punkte 287474

Sie können einen aufgezeichneten Trace in SQL Server Profiler laden: Anzeigen und Analysieren von Traces mit SQL Server Profiler .

Oder Sie können in ein Tool wie ClearTrace (kostenlose Version), um eine Auslastungsanalyse durchzuführen.

Sie können in eine SQL Server-Tabelle laden, etwa so:

SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)

Dann können Sie eine Abfrage wie diese ausführen, um die Daten zu aggregieren:

SELECT 
  COUNT(*) AS TotalExecutions,     
  EventClass, 
  CAST(TextData as nvarchar(2000)) ,
  SUM(Duration) AS DurationTotal ,
  SUM(CPU) AS CPUTotal ,
  SUM(Reads) AS ReadsTotal ,
  SUM(Writes) AS WritesTotal
FROM 
  TraceTable
GROUP BY 
  EventClass, 
  CAST(TextData as nvarchar(2000))
ORDER BY 
  ReadsTotal DESC

Siehe auch: MS SQL Server 2008 - Wie kann ich die teuersten Abfragen protokollieren und finden?

Es ist auch üblich, Filter für die aufgezeichnete Spur einzurichten, bevor sie gestartet wird. Ein häufig verwendeter Filter ist beispielsweise die Beschränkung auf Ereignisse, die mehr als eine bestimmte Anzahl von Lesevorgängen erfordern, beispielsweise 5000.

4voto

Preet Sangha Punkte 62622

Laden Sie die .trc lokal und verwenden Sie dann in der Datenbank speichern in die lokale Datenbank übertragen und dann nach Herzenslust abfragen.

4voto

Sam Punkte 6047

Diese Vorschläge eignen sich hervorragend für eine bestehende Aufzeichnung - wenn Sie die Aufzeichnung filtern möchten, können Sie Ereignisfilter für die Aufzeichnung einrichten, bevor Sie sie starten.

Der nützlichste Filter ist meiner Erfahrung nach der Anwendungsname. Dazu müssen Sie sicherstellen, dass jede Verbindungszeichenfolge, die für die Verbindung zu Ihrer Datenbank verwendet wird, einen entsprechenden Wert für den Anwendungsnamen enthält, z. B:

"...Server=MYDB1;Integrierte Authentifizierung=SSPI;Anwendungsname=MyPortal;..."

Wählen Sie dann in den Trace-Eigenschaften für einen neuen Trace die Registerkarte Ereignisauswahl und klicken Sie dann auf Spaltenfilter...

Wählen Sie den Filter Anwendungsname, und fügen Sie Werte zu LIKE hinzu, um nur die von Ihnen angegebenen Verbindungen einzuschließen, d. h. die Verwendung von MyPortal im Feld LIKE schließt nur Ereignisse für Verbindungen mit diesem Anwendungsnamen ein.

Auf diese Weise müssen Sie nicht mehr den ganzen Müll sammeln, der beispielsweise von den Reporting Services erzeugt wird, und die anschließende Analyse wird wesentlich schneller.

Wenn Sie also wissen, wonach Sie suchen, z. B. lange Ausführungszeiten (Duration) oder große IO (Reads, Writes), können Sie auch nach diesen Kriterien filtern.

3voto

Anonymous Punkte 31

Seit SQL Server 2005 können Sie den Inhalt einer .trc-Datei direkt von SQL Profiler aus filtern, ohne sie in eine SQL-Tabelle zu importieren. Folgen Sie einfach dem hier vorgeschlagenen Verfahren:

http://msdn.microsoft.com/en-us/library/ms189247(v=sql.90).aspx

Ein zusätzlicher Hinweis: Sie können '%' als Platzhalter für einen Filter verwenden. Wenn Sie z. B. nach HOSTNAME wie SRV filtern möchten, können Sie SRV% verwenden.

0voto

Paolo Punkte 121

Hier finden Sie ein vollständiges Skript zur Abfrage des Standard-Trace mit der kompletten Liste der Ereignisse, die Sie filtern können:

http://zaboilab.com/sql-server-toolbox/anayze-sql-default-trace-to-investigate-instance-events

Sie müssen sys.fn_trace_gettable(@TraceFileName,default) mit sys.trace_events abfragen, um die Ereignisnummern zu entschlüsseln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X