2009-06-05 3 views
0

Ich stehe vor einem Problem, dass das Ausführen einer gespeicherten Prozedur zu viele Ressourcen beansprucht, was manchmal eine Zeitüberschreitung auf dem Server verursacht (besonders wenn die CPU-Auslastung mehr als 90% beträgt).Was ist der beste Weg, um den langsamsten Block einer SQL-Abfrage zu erkennen?

Kann jemand vorschlagen, was der beste und schnellste Weg ist, den Block zu finden, der viel Ressourcen nimmt, und schlägt auch einen guten Weg vor, es zu lösen, bitte?

  • Ich bin mit SQL Server 2005
+0

Dies ist keine "Antwort", aber Sie könnten das Buch Refactoring SQL-Anwendungen von Faroult & L'Hermite mögen. Es wird dir neben dem Lesen von arkanen Abfrageplänen noch weitere Ideen geben. –

Antwort

5

Sie möchten die Abfrage Profiler verwenden. Explained here. Dies zeigt Ihnen eine grafische Darstellung des Ausführungspfads für die Abfragen sowie die Teile, die am meisten Zeit benötigen.

0

Wenn Sie das SQl Server Management Studio verwenden, können Sie den Ausführungsplan aktivieren, um Informationen darüber anzuzeigen, wie die Abfrage von sql Server ausgeführt wird und welcher Prozentsatz des gesamten Prozesses von jedem Unterprozess beansprucht wird .

Oft wird dabei ein Teil der Abfrage verwendet, der offensichtlich die meisten Ressourcen verwendet.

Mithilfe dieser Informationen können Sie dann eine fundierte Entscheidung darüber treffen, wie die Datenbank optimiert werden soll. (Wie das Hinzufügen eines Index der säumige Tisch (e))

3

Wenn Sie wissen möchten, welcher Block am langsamsten ist, verwenden Sie die folgende

SET STATISTICS PROFILE ON

SET STATISTICS IO ON

SET STATISTICS TIME ON

Wenn Sie den SP ausführen, werden die Statistiken für jede Abfrage angezeigt.

0

Sie können SQL Profiler verwenden müssen einen Ausführungsplan zu sehen - nur:

SET SHOWPLAN_XML ON 
0

Wenn es eine Reihe von Aussagen in der sproc ist kann es ein wenig auf der SET STATISTIK dreht gefaltet werden Optionen, da Sie viele Ausgabebausteine ​​für die Eingabe haben.

Die grafische Darstellung eines Abfrageplans in SSMS ist sehr nützlich, da sie die% Kosten jeder Anweisung relativ zu den Kosten des gesamten Stapels/Sproc anzeigt. Dies ist jedoch ein einzelner Wert. Daher kann es manchmal hilfreicher sein, nur Profiler auszuführen und die Ausgabe auf Anweisungsebene zu aktivieren. Profiler gibt Ihnen separate E/A- und CPU-Kosten für jede Anweisung, wenn Sie das Ereignis SQL: StmtCompleted und die Spalten CPU und Reads hinzufügen.

Verwandte Themen