Blog
Wednesday, 20. July 2022

SQL Server 2022 - Intelligent Query Processing

Kristóf
IT-Consultant

Wie bereits in einigen älteren Artikeln beschrieben, stellen wir Ihnen einzelne neue Features im neuen SQL Server 2022 Release vor. In diesem Artikel beschäftigen wir uns mit dem Intelligent Query Processing. Was das genau ist und was es für Vorteile mit sich bringt, erfahren Sie in den folgenden Absätzen.

Intelligent Query Processing

Dies ist eine Sammlung von Tools, die eine verbesserte Abfrageleistung ermöglichen. Die Funktionsfamilie der intelligenten Abfrageverarbeitung (IQP) umfasst Funktionen mit weitreichender Wirkung, die die Leistung vorhandener Workloads mit minimalem Implementierungsaufwand verbessern. Die intelligente Abfrageverarbeitung ist eine Schlüsselkomponente, um geschäftskritische Workloads bei der Ausführung in großem Maßstab zu verbessern und gleichzeitig an die sich ständig ändernde Welt der Daten anzupassen.

Mainzer Datenfabrik - SQL Server 2022 - Intelligent Query Processing

Wenn Sie eine Abfrage an SQL Server oder Azure SQL senden, versucht es intern einen Abfrageplan durch Berechnungen zu optimieren, beispielsweise durch Verwendung eines Index. Nimmt jedoch Ihr Datenvolumen massiv zu, kann dies durch SQL Server erkannt werden, jedoch kann dadurch auch die Leistung des gesamten Systems beeinträchtigt werden.

Um schlechte Performance zu vermeiden und suboptimale Pläne zu verhindern, schaut sich das Intelligent Query Processing folgende Punkte genauer an:

  • Die Menge der verarbeiteten Daten
  • Die erforderliche Genauigkeit
  • Die verwendeten Abfragefunktionen
  • Der Typ der ausgeführten Abfrage

Alles funktioniert dabei vollautomatisch. Damit diese Optimierungstools in SQL Server 2019 oder Azure SQL angewendet werden können, müssen Sie lediglich den Kompatibilitätsgrad Ihres Servers auf 150 festlegen. Sie sollten jedoch beachten, dass nicht alle dieser Optimierungen in früheren SQL Server Versionen verfügbar sind. Um das Kompatibilitätslevel auf 150 zu setzen, verwenden wir folgenden Befehl:

ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 150;

Folgend die Hauptmerkmale von IQP und wo sie während der Abfrageplanung angewendet werden.

Mainzer Datenfabrik - SQL Server 2022 - Intelligent Query Processing

Integrating Runtime Information

Adaptive Joins sind ein Beispiel für ein IQP-Tool, die Ihren Plan basierend auf dem Laufzeit-Feedback ändern. Normalerweise entscheidet SQL Server welche Art von Verknüpfung verwendet werden soll. Dabei beruft sich SQL Server auf eine Schätzung, wie viele Zeilen zur Laufzeit verknüpft werden. Bei den Adaptive Joins trifft SQL Server die Entscheidung zur Laufzeit basierend auf der tatsächlichen Anzahl der beteiligten Zeilen. Wenn viele an der Verknüpfung beteiligte Zeilen in den Datensätzen vorhanden sind, wird eine dynamisch Hash-Verknüpfung ausgewählt. Sind jedoch nur 10 oder weniger Zeilen mit einem größeren, indizierten Datensatz verknüpft, wählt SQL Server einen dynamischen Nested-Loop-Join aus.

Adaptive Joins

Die Funktion Adaptive Joins ermöglicht die Auswahl einer Hash-Join- oder Nested-Loops-Join-Methode. Bis die Eingabe vollumfänglich gescannt wurde, wird ein zwischengespeicherter Plan verwendet. Der Adaptive Join-Operator definiert dafür einen Schwellenwert, der entscheidet, wann von einem Hash-Join zu einem Nested Loops-Plan gewechselt wird. Dabei hat sich SQL Server etwas gedacht, denn der Plan kann während der Ausführung einfach zu der besser passenden Join-Strategie wechseln.

Das Plan-Explorer-Diagramm zeigt die Analyse einer Abfrage mithilfe eines adaptiven Joins. Drei Tabellen werden mit einem Adaptive Join zusammengeführt, bevor das Ergebnis an die Select-Klausel übergeben wird.

Mainzer Datenfabrik - SQL Server 2022 - Intelligent Query Processing

Memory Grant Feedback

MGF ist ein weiteres Beispiel für die Verwendung von Laufzeitinformationen zum Ändern eines Plans. Während Adaptive Joins an der aktuellen Abfrage arbeiten, ändert das Memory Grant Feedback die Schnelligkeit der Ausführung des Abfrageplans.

Das Ziel von MGF ist es, die Verwendung des verfügbaren Speichers für alle gleichzeitigen Abfragen zu optimieren. Um die Zeit einzuplanen, schätzt SQL Server wie viel Speicher für alle Zeilen einer Abfrage reserviert werden muss. Wenn SQL Server beispielsweise falsch prognostiziert und zu viel Arbeitsspeicher zuweist, dürfen andere Abfragen möglicherweise nicht gleichzeitig ausgeführt werden. Wenn zu wenig Arbeitsspeicher eingeplant wurde, lagert SQL Server Zeilen auf die Festplatte aus und Ihre Abfrage wird langsamer ausgeführt.

Das Memory Grant Feedback untersucht den tatsächlich erforderlichen Speicher, wenn eine Abfrage ausgeführt wird. Anschließend wird die Speicherzuweisung des Plans so angepasst, um die Leistung beim nächsten Ausführen der Abfrage zu verbessern. MGF ist dabei noch sehr intelligent. Um zu erkennen, dass die von einer Abfrage benötigte Speichermenge von unterschiedlichen Parametern abhängen kann, deaktiviert sie sich selbst für die Abfrage, wenn die Speicheranforderungen nicht vorhergesagt werden können.

Query Purpose

Batch Mode on Rowstore

Der Batch Mode für Rowstore wird verwendet, wenn eine analytische Abfrage für eine für Transaktionen optimierte Tabelle ausgeführt wird (z. B. eine Tabelle ohne Columnstore-Indizes). Als analytische Abfrage versteht man eine Abfrage, die eine große Anzahl von Zeilen verarbeitet, um ein zusammenfassendes Ergebnis zu erzeugen.

Der Batch Mode von IQP auf Rowstore ermöglicht die gleichzeitige Verarbeitung mehrerer Werte, die die meisten Rowstore-Indizes unterstützt. Es funktioniert mit Heaps und B-Tree-Indizes auf der Festplatte, aber nicht mit Hash-Indizes für speicheroptimierte Tabellen. Der Name dieses Tools spiegelt die Geschichte des Batch-Modus wider: Es wurde ursprünglich entwickelt, um Columnstore-Indizes zu verarbeiten und wurde später erweitert, um Rowstores verarbeiten zu können.

Approximate query processing

Die Abfrageverarbeitung im Datenbankkontext ist der Prozess, der in der Datenbank verfügbare Informationen ableitet. Aufgrund von enormen Datenmengen, ist eines der Hauptprobleme die effiziente Bearbeitung der Abfragen. Um effizienter agieren zu können, empfiehlt sich die ungefähre Abfrageverarbeitung (AQP). Sie dient als alternative Methode, eine ungefähre Antwort an Informationen zurückzugeben, die den Informationen ähneln, aus denen die Abfrage normalerweise beantwortet werden würde. Das approximate query processing ist hauptsächlich für aggregierte Abfragen konzipiert. Es aggregiert über große Datensätze hinweg, bei denen die Reaktionsfähigkeit wichtiger ist als Präzision. Ein Beispiel ist die Berechnung von COUNT(DISTINCT()). Über 10 Milliarden Zeilen befinden sich auf der Anzeige im Dashboard. In diesem Fall ist die absolute Präzision nicht sonderlich wichtig. Wichtiger hierbei ist die Reaktionsfähigkeit. Die neue Aggregatfunktion APPROX_COUNT_DISTINCT gibt dafür eine ungefähre Anzahl eindeutiger Nicht-Null-Werte in einer Gruppe zurück und garantiert damit eine schnellere Reaktionsfähigkeit.

Query Components

Scalar UDF Inlining

Mehrere IQP-Tools wurden entwickelt, um die Leistung von Abfragen mithilfe von Funktionen oder Tabellenvariablen zu verbessern. Skalares UDF-Inlining wird auf Abfragen mit benutzerdefinierten Funktionen (UDFs) angewendet, die einen einzelnen Datenwert zurückgeben. Standardmäßig werden diese Funktionen einmal für jede verarbeitete Zeile ausgeführt. Skalares UDF-Inlining behandelt die Funktion effektiv wie eine Unterabfrage, wodurch die Anzahl der Aufrufe der Funktion erheblich reduziert wird. Scalar UDF Inlining ist jedoch in Azure SQL nicht verfügbar.

Interleaved Execution

Die Interleaved Execution wird aufgerufen, wenn die Abfrage Funktionen verwendet, die eine Tabelle zurückgeben. Aber wie bei den Adaptive Joins, verwendet die Interleaved Execution Laufzeitinformationen, um die Abfrageverarbeitung zu verbessern, anstatt sie umzustrukturieren.

Wenn eine Tabellenfunktion mehrere Anweisungen enthält, kann SQL Server zur Planungszeit nicht bestimmen, wie viele Zeilen zurückgegeben werden. Daher geht SQL Server standardisiert davon aus, dass die Funktion 100 Zeilen zurückgibt. Wenn zur Laufzeit die tatsächliche Anzahl der zurückgegebenen Zeilen deutlich höher oder niedriger ist, wird dieser Plan möglicherweise nicht optimal ausgeführt.

Wenn bei Interleaved Execution die Abfrage die Tabellenfunktion ausführt, stoppt Interleaved Execution die Hauptabfrage. Sie führt dann die Tabellenfunktion aus und verwendet die resultierenden Schätzungen der Anzahl der von der Funktion zurückgegebenen Zeilen, um den Rest der Verarbeitung der Hauptabfrage zu planen. Bestimmte Bedingungen können die Anwendung von Interleaved Execution einschränken. Beispielsweise darf die Hauptabfrage keine Daten ändern und die Funktion muss Laufzeitkonstanten verwenden (z. B. SUSER_SNAME oder GETDATE).

Table Variable Deferred Compilation

Hier wird eine eine ähnliche Strategie wie bei Interleaved Executions verwendet. Sie wird aber auf Abfragen angewendet, die eine Tabellenvariable verwenden. Wie bei Funktionen mit mehreren Anweisungen, die eine Tabelle zurückgeben, kann SQL Server zur Planzeit nicht bestimmen, wie viele Zeilen sich zur Laufzeit in einer Tabellenvariablen befinden. Wie bei der verschachtelten Ausführung oder der adaptiven Verarbeitung wartet die verzögerte Kompilierung von Tabellenvariablen, um die tatsächliche Anzahl der Zeilen in der Tabelle zu ermitteln. Diese Parameter werden dann verwendet, um den Rest der Abfrage zu planen.

Fazit

Das neue Release von SQL Server 2022 bringt einige neue Features mit. In unserer Artikelreihe stellen wir vereinzelte, sinnvolle und brauchbare Features genauer vor. Gerne stehen wir Ihnen bei Rückfragen beratend zur Seite. Unsere Experten auf dem SQL Server Gebiet helfen Ihnen bei der Optimierung Ihrer Infrastruktur. Kontaktieren Sie uns dafür gerne über unser Kontaktformular.

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!