SQL Server Profiler - Wie filtere ich Trace, um nur Ereignisse aus einer Datenbank anzuzeigen?


381

Wie beschränke ich einen SQL Server Profiler-Trace auf eine bestimmte Datenbank? Ich kann nicht sehen, wie der Trace gefiltert wird, um nicht Ereignisse für alle Datenbanken der Instanz anzuzeigen, zu der ich eine Verbindung herstelle.

Antworten:


574

Wählen Sie unter Trace-Eigenschaften> Registerkarte Ereignisauswahl> Alle Spalten anzeigen aus. Unter Spaltenfiltern sollte nun der Datenbankname angezeigt werden. Geben Sie den Datenbanknamen für den Abschnitt "Gefällt mir" ein und Sie sollten nur Traces für diese Datenbank sehen.


8
Ich weiß nicht, ob dies ein häufiges Problem ist, aber wenn ich den Profiler ausführe, ist der Datenbankname für viele der von mir verfolgten Werte leer. Ich muss die Spalte DatabaseID verwenden und die richtigen Werte für die Eingabe herausfinden, indem ich die Tabelle sysdatabases in der Master-Datenbank abfrage
Jim Birchall

34
So finden Sie die Datenbank-ID: SELECT [Name], [dbid] FROM [master]. [Dbo]. [Sysdatabases] ORDER BY [name]
Simon

1
Hängt auch von der ausgewählten Vorlage ab, falls vorhanden. +1
wunderschön

2
Und Sie müssen es tun, beforeum die Spur zu starten. Wenn Sie es danach tun, kann das Feld nicht bearbeitet werden!
DarkWalker

2
Vergessen Sie nicht, die Ablaufverfolgung zu stoppen oder zu starten, bevor Sie sie ausführen.
Fery

42

In SQL 2005 müssen Sie zuerst die Spalte Datenbankname in Ihrer Ablaufverfolgung anzeigen. Am einfachsten ist es, die Optimierungsvorlage auszuwählen, zu der diese Spalte bereits hinzugefügt wurde.

Angenommen, Sie haben die Tuning-Vorlage ausgewählt, um zu filtern:

  • Klicken Sie auf die Registerkarte "Ereignisauswahl"
  • Klicken Sie auf die Schaltfläche "Spaltenfilter"
  • Aktivieren Sie Alle Spalten anzeigen (rechte Seite nach unten).
  • Wählen Sie "DatabaseName", klicken Sie im rechten Bereich auf das Pluszeichen neben "Gefällt mir" und geben Sie Ihren Datenbanknamen ein.

Ich speichere den Trace immer auch in einer Tabelle, damit ich nachträglich ähnliche Abfragen zu den Trace-Daten durchführen kann.


8

Durch Experimente konnte ich Folgendes beobachten:

Wenn SQL Profiler 2005 oder SQL Profiler 2000 mit einer Datenbank in SQLServer 2000 verwendet wird, besteht das erwähnte Problem weiterhin, aber wenn SQL Profiler 2005 mit einer SQLServer 2005-Datenbank verwendet wird, funktioniert es perfekt!

Zusammenfassend scheint das Problem in SQLServer 2000 weit verbreitet und in SQLServer 2005 behoben zu sein.

Die Lösung für das Problem beim Umgang mit SQLServer 2000 lautet (wie von wearejimbo erläutert).

  1. Identifizieren Sie die Datenbank-ID der Datenbank, die Sie filtern möchten, indem Sie die Tabelle sysdatabases wie folgt abfragen

    SELECT * 
    FROM master..sysdatabases 
    WHERE name like '%your_db_name%'   -- Remove this line to see all databases
    ORDER BY dbid
  2. Verwenden Sie den DatabaseID-Filter (anstelle von DatabaseName) im Fenster New Trace von SQL Profiler 2000


4

Klicken Sie in den Trace-Eigenschaften oben neben Allgemein auf die Registerkarte Ereignisauswahl . Klicken Sie dann unten rechts auf Spaltenfilter . Sie können dann auswählen, was gefiltert werden soll, z. B. oderTextDataDatabaseName .

Erweitern Sie den Knoten Gefällt mir und geben Sie Ihren Filter mit den Prozentzeichen %wie %MyDatabaseName%oder ein %TextDataToFilter%. Ohne das%% Zeichen funktioniert der Filter nicht.

Stellen Sie außerdem sicher, dass das Kontrollkästchen Zeilen ausschließen, die keine Werte enthalten. Wenn Sie das zu filternde Feld nicht finden, z. B. DatabaseNamezur Registerkarte Allgemein wechseln und Ihre Vorlage ändern , sollte das leere Feld alle Felder enthalten.


1

Erstellen Sie eine neue Vorlage und überprüfen Sie den DB-Namen. Verwenden Sie diese Vorlage für Ihre Trace-Datei.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.