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?
sql-server
sql-server-2008
performance
profiler
Jon Seigel
quelle
quelle
Antworten:
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.
quelle
Wenn Sie die serverseitige Ablaufverfolgung verwenden , können die Auswirkungen auf die Leistung minimiert werden.
quelle
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.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.
quelle
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.
quelle
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.
quelle