Beeinflusst der SQL-Profiler die Serverleistung?

11

Ich habe ein Problem, bei dem der SQL Server 2008 aufgrund einer hohen Auslastung ausfällt. Ich muss diesen Lastfall finden und den Code optimieren, damit er die Last bewältigen kann. Ich habe im Internet festgestellt, dass der SQL-Profiler verwendet werden kann, um die Datenbankinteraktionen zu verfolgen, die später analysiert werden können, um den genauen Punkt zu finden, an dem das Problem auftritt. Ich habe auch herausgefunden, wie wir den SQL-Profiler starten können. Aber jetzt ist meine Frage, dass ich durch das Starten des SQL-Profilers die Serverleistung beeinflussen werde?

Jon Seigel
quelle
5
Ja. Es hängt davon ab, wie und wo Sie es ausführen. Richtig gemacht kann nur ein paar Prozent zusätzliche Last sein.
Mitch Wheat
3
Erweiterte Ereignisse können eine leichtere Option sein.
Martin Smith

Antworten:

10

SQL Server Profiler ist eine GUI, die SQL Server Trace auf der Clientseite verwendet. Aufgrund dieser Natur können Sie je nach Umgebung möglicherweise leichte bis schwere Auswirkungen auf die Leistung feststellen.

SQL Server Profiler eignet sich hauptsächlich für einen kurzen Einblick in die Vorgänge auf dem Server (vorausgesetzt, der Datenbankserver kann die zusätzliche Latenz bewältigen). Es ist nicht für längere Zeiträume vorgesehen. Verwenden Sie für längere Ablaufverfolgungen eine serverseitige Ablaufverfolgung oder erweiterte Ereignisse.

Thomas Stringer
quelle
+1 Selbst eine sehr kurze Profiler-Ablaufverfolgung kann abhängig von vielen Faktoren einen Server lahm legen.
Aaron Bertrand
3

Wenn Sie die serverseitige Ablaufverfolgung verwenden , können die Auswirkungen auf die Leistung minimiert werden.

David Brabant
quelle
Mein Server und meine Datenbank sind auf demselben Computer installiert. Wenn ich nun den SQL-Profiler über "Microsoft SQL Management Studio -> Tools-> SQL-Profiler" starte, wie viel Leistungsabfall kann ich dann erwarten und basierend auf welchen Faktoren?
Es basiert darauf, wie ausgelastet Ihr Server ist, wie viele Ereignisse und wie viele Spalten Ihre Ablaufverfolgung enthält und wie Sie filtern. Das Filtern kann sich in beide Richtungen auswirken. Auf eine Weise kann die Anzahl der Zeilen reduziert werden, die an die Benutzeroberfläche zurückgegeben werden (der Teil, der den Profiler wirklich mehr verletzt als die serverseitige Ablaufverfolgung), andererseits, wenn Sie eine schlecht ausgewählte Zeile haben Filter (zB textdata LIKE '%foo%') kann den gegenteiligen Effekt haben. Es gibt viel zu viele Variablen, um magische Erwartungen zu wecken. Sie müssen es einfach ausprobieren. Sie sollten jedoch wirklich einen serverseitigen Trace verwenden.
Aaron Bertrand
Versuchen Sie diesen Link, wenn Sie nicht auf das Original zugreifen können.
Marc Lopez
3

Alles, was die vorherigen Poster gesagt haben, ist korrekt. Profiler ist eine Anwendung, die zu einem bestimmten Zeitpunkt DMO verwendet hat und jetzt SMO zum Erfassen von Ablaufverfolgungsereignissen verwendet. Dies führt zu einem enormen Overhead im Vergleich zur einfachen Verwendung eines serverseitigen Trace.

SMO ist eine API, die dem Ablaufverfolgungsprozess zusammen mit einer Clientanwendung, Profiler, eine zusätzliche "Ebene" hinzufügt. Eine serverseitige Ablaufverfolgung liest Ablaufverfolgungsereignisse direkt aus einer Transaktionswarteschlange, deren resultierender Aufwand vernachlässigbar ist.

Ich konnte serverseitige Traces in SQL Server-Umgebungen ausführen, die mehr als 10.000 Transaktionen pro Sekunde verarbeiten. Wenn Sie Profiler in denselben Umgebungen verwenden, wird die Datenbankinstanz in die Knie gezwungen. Wenn Sie in einer Produktionsumgebung die Datenbankaktivität verfolgen müssen, verwenden Sie immer eine serverseitige Ablaufverfolgung. Der Profiler beendet die Datenbankinstanz.

Christopher W. Szabo
quelle
2

Ja, SQL Server Profiler beeinträchtigt die Leistung.

Wenn Sie über die GUI nachverfolgen, werden alle Ereignisse synchron verarbeitet und gefiltert, sodass Faktoren wie Serverlast, Netzwerklatenz, die von Ihnen erfassten Ereignisse und sogar der Speicherort der erfassten Ereignisse zum Overhead beitragen.

Wie andere Antworten vorgeschlagen haben, wird die Verwendung eines serverseitigen Trace anstelle der GUI bevorzugt. Diese Methode ist jedoch veraltet und erweiterte Ereignisse stattdessen sollten verwendet werden. (Hinweis: Selbst wenn Sie erweiterte Ereignisse verwenden, die leichter als eine Ablaufverfolgung sind, können Sie dem Server dennoch eine unerwünschte Last hinzufügen. In der Liste in meinem zweiten Absatz erfahren Sie, wie Sie den Overhead beim Einrichten eines Ereignisses minimieren können Session.)

Bei einem stark ausgelasteten Server müssen Sie sehr vorsichtig mit den gesammelten Informationen sein, da der Messvorgang selbst das untersuchte Problem beeinflussen kann.

Jon Seigel
quelle
0

SQL Server Profiler funktioniert in zwei Schritten: Zuerst weisen Sie ihn an, alle Abfragen zu protokollieren. Dann führen Sie einige typische Transaktionen aus (oder lassen es einfach gegen die Produktion protokollieren). Dies erzeugt eine "Testlast". Anschließend führen Sie die eigentliche Profilerstellung (Analyse) anhand der Testlast durch.

Die Protokollierung ist nicht sehr teuer, insbesondere im Vergleich zu den Kosten der Abfragen selbst.

Egrunin
quelle
Mein Server und meine Datenbank sind auf demselben Computer installiert. Wenn ich nun den SQL-Profiler über "Microsoft SQL Management Studio -> Tools-> SQL-Profiler" starte, wie viel Leistungsabfall kann ich dann erwarten und basierend auf welchen Faktoren?