Automatisierte Plan Korrektur in SQL Server 2017

Mit der Veröffentlichung des SQL Servers 2017 wurden grundlegende Änderungen durchgeführt. Und obwohl ein Großteil der Arbeitszeit in die Entwicklung einer SQL Server Version, die auf verschiedenen Linux Distributionen genutzt werden kann, gibt es zusätzlich einige neue interessante Themen und Features.

In diesem Artikel möchten wir die automatische Plan Korrektur betrachten. Sie ist eine Funktion zur Optimierung der Auswahl der Ausführungspläne. Bei Auftreten eines Problems wird dieses automatisch erkannt und durch das Erzwingen der Ausführung des letzten bekannten guten Plans behoben.

Der SQL Server kann verschiedene Ausführungspläne zum Umsetzten der T-SQL-Abfragen verwenden. Dabei gibt es Unterschiede zwischen den Plänen basierend auf Statistiken, Indizes, etc. Oft wird ein solcher Plan geändert, mit dem Ziel die Leistung zu verbessern. In einigen Fällen ist der neue Plan möglicherweise nicht besser als der vorherige, in manchen Fällen sogar schlechter.

Eine solche Regression der Leistung zu identifizieren ist nicht immer trivial. Mit dem Feature der automatisierten Plan Korrektur soll eine solche Regression in der Auswahl des Plans vollautomatisch erkannt und entsprechend behandelt werden.

Um die Regression zu beheben, erzwingt das Feature die Ausführung des zuletzt bekannten guten Plans. Dieser neue Plan wird ab der Ausführung zusätzlich überwacht, um eine Steigerung gegenüber des ersetzten Plans zu garantieren. Ist diese Steigerung nicht gegeben, kann die Datenbank-Engine einen neuen Plan kompilieren.

Um die automatisierte Korrektur der Planauswahl in SQL Server für eine Datenbank zu aktivieren, kann folgendes Kommando benutzt werden:


ALTER DATABASE database
SET AUTOMATIC_TUNING(FORCE_LAST_GOOD_PLAN = ON);

Manuelle Plan Korrektur

Als Alternative zur automatischen Plan Korrektur gibt es die Möglichkeit diese manuell vorzunehmen. Mit der folgenden von Microsoft zur Verfügung gestellten Abfrage lässt sich ein Regressionsproblem lösen. Zusätzlich werden Informationen über den geschätzten Gewinn dargestellt:


SELECT reason, score,
      script = JSON_VALUE(details, '$.implementationDetails.script'),
      planForceDetails.*,
      estimated_gain = (regressedPlanExecutionCount + recommendedPlanExecutionCount)
                  * (regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage)/1000000,
      error_prone = IIF(regressedPlanErrorCount > recommendedPlanErrorCount, 'YES','NO')
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON (Details, '$.planForceDetails')
    WITH (  [query_id] int '$.queryId',
            regressedPlanId int '$.regressedPlanId',
            recommendedPlanId int '$.recommendedPlanId',
            regressedPlanErrorCount int,
            recommendedPlanErrorCount int,
            regressedPlanExecutionCount int,
            regressedPlanCpuTimeAverage float,
            recommendedPlanExecutionCount int,
            recommendedPlanCpuTimeAverage float
          ) AS planForceDetails;

Neben diesem, gibt es natürlich noch eine Vielzahl an weiteren interessanten Änderungen. Für weitere Informationen sind Artikel über Adaptive Abfrage Verarbeitung und Showplan Erweiterung auf unserer Website zu finden. Eine vollständige Übersicht aller dieser finden Sie hier direkt auf der Microsoft Seite bzgl. des Release des SQL Server 2017.


→ Hier findest Du den Artikel zum direkten PDF-Download: madafa.de/download/artikel-downloads/


Schreibe einen Kommentar