Blog
Friday, 14. February 2020

Automatisierte Plan Korrektur in SQL Server 2017

Anna
Teamleitung Website & Content

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.

Mainzer Datenfabrik - Automatisierte Plan Korrektur in SQL Server 2017

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.

Mainzer Datenfabrik - Automatisierte Plan Korrektur in SQL Server 2017

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.

Interesse geweckt?

Unsere Expert:innen stehen Ihnen bei allen Fragen rund um Ihre IT Infrastruktur zur Seite.

Kontaktieren Sie uns gerne über das Kontaktformular und vereinbaren ein unverbindliches Beratungsgespräch mit unseren Berater:innen zur Bedarfsevaluierung. Gemeinsam optimieren wir Ihre Umgebung und steigern Ihre Performance!
Wir freuen uns auf Ihre Kontaktaufnahme!

Taunusstraße 72
55118 Mainz
info@madafa.de
+49 6131 3331612
Bürozeiten
Montag bis Donnerstag:
9:00 - 17:00 Uhr MEZ

Freitags:
9:30 - 14:00 Uhr MEZ
Wir sind Ihre SQL Expert:innen!
Noch Fragen? - Wir haben immer die passende Antwort für Sie!