Frage

Ich bin Debuggen von gespeicherten Prozeduren, und im Moment bin ich daran interessiert, was lief in welcher Reihenfolge und welche welche Parameter im Gegensatz zu, wie schnell sich die Dinge liefen und was schleichen kann zwischendurch und verursachen eine Verlangsamung.

Also, gefangen ich ein paar Minuten im Wert von Spur. Das Problem ist, dass es zu viel Zeug ist, und ich brauche es zu verengen. Wenn ich File -> Save As tun, ich die folgenden Optionen erhalten:

  • Trace-Datei ...
  • Trace Template ...
  • Trace Table ...
  • Trace XML-Datei ...
  • Trace XML-Datei für Replay ...

Nun, das sind anständige Optionen, aber was ich wirklich will, ist ein Tabellenformat, wie CSV. Ich denke, dass Kommas in SP Spur würde wahrscheinlich vermasselt das CSV-Format. Ich würde die Verwendung etwas anderes, wie || als Trennzeichen gern.

Wenn ich das Tabellenformat zu tun haben, kann ich es unten filtern mit grep usw. und dann leicht mit Python verarbeiten die genauen Dinge, die ich sehen wollen. Ich begann mit einem Skript, um die XML-Datei parsen, sondern fand mich auf der Spur XML Dateiformat zu viel Zeit (nicht lxml Bibliothek verwendet haben).

So ... gibt es einen einfacheren Weg? Kann ich zumindest kopieren Sie es in Excel irgendwie?

War es hilfreich?

Lösung

Wenn Sie es in eine Trace-Tabelle speichern; Sie können die Daten in einer Tabelle in SQL Server erhalten, die Sie es zu Ihrem Herzen Inhalt manipulieren lassen; wenn nach wie vor erforderlich, einschließlich es aus in CSV-Dumping. Die Textdaten Spalte in der Tabelle vollständig dargestellt.


Wenn Sie Speichern ? Trace Table . Sie werden nach dem Namen der Tabelle und die Datenbank aufgefordert. Lassen Sie uns sagen Sie es ProfilerTemp in der Datenbank Grund auf neu aufrufen.

Geben Sie diejenigen; Sie können die Tabelle abfragen mit

select * from scratch.dbo.ProfilerTemp

Sie werden alles im Trace-Fenster in der Tabelle sehen. Wenn Sie didnt nur gespeicherte Prozeduren filtern nach unten und wollen einfach nur in der Auswahl

Select textdata from [Scratch].[dbo].[ProfilerTemp] 
  where eventclass = 10 
  And textdata like 'exec %' 
  and not cast(TextData as nvarchar(max))= 'exec sp_reset_connection'

Diese filtert nicht Prozeduraufrufe und keine Verbindung setzt können Sie haben. Unter Umständen müssen Sie weitere Filter hinzufügen, je nachdem, was Sie zu tun versuchen.

Wenn Sie diese als Textdatei wollen; Wählen Sie Abfrage - Ergebnisse Datei und die Abfrage ausführen. Dies fordert für die Dateinamen und gibt Ihnen den Parameter Text als Textdatei.

Andere Tipps

TL; DR:. Kopieren in einen Texteditor, manuell prep, dann fügen Sie in Excel

Ich habe sehr wenig Erfahrung mit SQL Server, damit ich weiß nicht, ob dies für andere arbeiten, aber es hat für mich:

  • Wählen Sie gewünschten Zeilen in SQL Server Profiler. Strg + C zu kopieren.
  • Einfügen in einen Texteditor, die Suche mit regulären Ausdrücken tun und ersetzen (zum Beispiel Notepad ++ in meinem Fall).
  • Regex ersetzen (N'(''')?[^']*?)\r\n(([^']*?)\r\n)?(([^']*?)\r\n)? mit $1 $4 $6
    • Dies löscht alle Zeilenumbrüche von SQL-Skripten.
    • Halten Sie tun „Alle ersetzen“, bis keine weiteren Ergebnisse zu finden sind.
  • Regex ersetzen (Batch(Starting|Completed)[^\\]*?)\r\n mit $1
    • Dies löscht Zeilenumbrüche aus mehreren SQL-Zeug. Auch hier halten, bis keine Ergebnisse zu ersetzen.
  • Regex ersetzen \r\nset mit set
    • Dies löscht alle Zeilenumbrüche von Audit Login-Scripts
  • Sie müssen möglicherweise mehr ersetzen tun, Sie bekommen die Idee.
  • Einfügen in Excel mit dem „Textimport-Assistenten.“ Verwenden Sie Registerkarten als deliminator.
  • Sortieren nach der ersten Spalte und entfernen Sie alle nicht hilfreich Reihen (zum Beispiel „Audit Login“ in meinem Fall). Sie können auch
  • manuell einige Daten über eine Säule bewegen (in meinem Fall zum Beispiel „EntityFramework“ Daten) benötigen

hatte ich eine Reihe von SQL Profiler-Trace-Dateien Deadlock-Ablaufverfolgung Ereignisse enthalten, dass ich zu analysieren, benötigt. Ich landete sie auf eine einzelne XML-Datei mithilfe von SQL Profiler umwandelt und dann die XML-Datei mit Python zu lesen, die lxml und pandas Bibliotheken.

Wie die Daten in einem Pandas Dataframe endet, können Sie ganz einfach konvertieren Sie es in CSV, Excel, ... oder analysieren es in Python (wenn Sie vertraut mit Pandas).

Das Skript ist als ein Kern . Es ist speziell für die Deadlock-Trace-Dateien geschrieben, da ich keine anderen Spuren verfügten. Mit anderen Worten, müssen Sie es ein wenig optimieren Ihren Zweck zu dienen. Sorgen Sie sich nicht, wenn die XML-Datei groß (mehrere 100 MBs) ist; Das Skript verwendet iterparse() , was bedeutet, dass die Datei nicht gelesen werden in den Speicher und werden nur die relevanten Elemente erfasst. Z.B. eine xdl Datei von ca. 220MB wurde in weniger als 13 Sekunden analysiert.

Speichern der Trace-Dateien im XML-Format (xdl Erweiterung):

Stellen Sie sicher, dass Sie die Option alle Ereignisse in einer einzigen Datei .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top