2008-11-13 3 views
6

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?

Antwort

2

fand ich einen Artikel, der die Auswirkungen auf die Leistung einer SQL Profiler-Sitzung vs eine serverseitige Ablaufverfolgung tatsächlich misst:

http://sqlblog.com/blogs/linchi_shea/archive/2007/08/01/trace-profiler-test.aspx

Das ist wirklich war meine zugrundeliegende Frage, wie ich sicherstellen kann, dass ich meinen Produktionsserver während einer Ablaufverfolgung nicht störe. Es scheint, dass wenn Sie es richtig machen, gibt es minimale Overhead.

+0

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. –

2

Das Hinzufügen von Filtern minimiert den Overhead der Ereigniserfassung und verhindert auch, dass der Server nicht benötigte Transaktionseinträge protokolliert.

Ob der Trace einen unannehmbaren Overhead verursacht, müssen Sie ihn nur testen und bei weiteren Beschwerden stoppen. Die Hinweise des DB Tuning Advisors mit dieser Produktions-Trace-Datei könnten die Leistung für alle morgen verbessern.

2

Sie sollten den Trace eigentlich nicht verarbeiten lassen, da dies zu Problemen führen kann: "Wenn der Server die Ablaufverfolgung verarbeitet, wird kein Ereignis gelöscht - auch wenn dies bedeutet, dass die Serverleistung für alle Ereignisse verloren geht Verarbeiten der Ablaufverfolgung, werden Ereignisse übersprungen, wenn der Server zu beschäftigt wird. " (. Von SQL 70-431 Prüfung Buch Best Practices)

+0

Also, wenn ich es richtig gelesen, den Profiler GUI von einem anderen Rechner läuft? Dies scheint angesichts der meisten anderen Ratschläge, die ich dort gesehen habe, zu fliegen. – BradC

+0

Das sagt der offizielle Microsoft Training Guide ... – Sam

0

Es ist tatsächlich möglich, detailliertere Messungen zu sammeln, als Sie mit Profiler erfassen können - und zwar 24x7 über die gesamte Instanz hinweg - ohne zusätzlichen Aufwand. Dies vermeidet die Notwendigkeit, im Voraus herauszufinden, was Sie filtern müssen ... was schwierig sein kann.

Volle Enthüllung: Ich arbeite für einen der Verkäufer, die solche Werkzeuge zur Verfügung stellen ... aber, ob Sie unsere oder jemand anderes benutzen ... dieses kann Sie um das Kernthema hier erhalten.

Weitere Informationen über unser Tool hier http://bit.ly/aZKerz

Verwandte Themen