Wir haben einen SQL 2000-Server mit sehr unterschiedlichen Aufträgen, die zu unterschiedlichen Tageszeiten oder sogar an verschiedenen Tagen des Monats ausgeführt werden. Normalerweise verwenden wir den SQL-Profiler nur zum Ausführen von Ablaufverfolgungen für sehr kurze Zeitspannen für die Leistungsverbesserung, aber in diesem Fall würde mir das kein gutes Gesamtbild der Arten von Abfragen geben, die über die Datenbank ausgeführt werden Kurs eines Tages oder einer Woche oder eines Monats.Reduzieren des Overheads einer SQL-Ablaufverfolgung mit Filtern
Wie kann ich den Leistungsaufwand einer lang laufenden SQL-Ablaufverfolgung minimieren? Ich weiß bereits:
- Führen Sie die Trace-Server-Seite (sp_ create_trace) aus, anstatt die SQL Profiler-Benutzeroberfläche zu verwenden.
- Verfolgen Sie in eine Datei und nicht in eine Datenbanktabelle (was zusätzlichen Aufwand für den DB-Server hinzufügen würde).
Meine Frage ist wirklich über Filter. Wenn ich einen Filter hinzufüge, um nur Abfragen zu protokollieren, die mehr als eine bestimmte Dauer ausführen oder liest, muss es immer noch untersuchen alle Aktivitäten auf dem Server zu entscheiden, ob es es protokollieren muss, richtig? Wird der Trace selbst bei diesem Filter einen nicht akzeptablen Overhead für einen Server erzeugen, der bereits an der Grenze einer inakzeptablen Leistung steht?
Sie sollten Ihre Antwort bearbeiten, um eine Zusammenfassung der Ergebnisse aus diesem Post hinzuzufügen: Ausführen einer serverseitigen Ablaufverfolgung (die ihre Daten in eine Datei auf einer anderen als der Festplatte protokolliert, auf der sich die SQL Server-DB-Dateien befinden) viel Einfluss auf die Serverleistung, aber [wie in den Kommentaren angegeben] mit mehr als 7 oder 8 Filtern für ein einzelnes Trace-Ereignis * kann sich negativ auswirken. –