SQL 2019 Intelligent Query Processing – Was bringt es wirklich?

Nachdem in SQL Server 2017 das Adaptive Query Processing eingeführt wurde, kommt mit SQL 2019 nun das Intelligent Query Processing. Handelte es sich beim Adaptive Query Processing um eine Sammlung an Funktionen für die verbesserte Abfragebearbeitung, sind mit dem Intelligent Query Processing weitere spannende Funktionen hinzugekommen:

SQL 2017: Adaptive Query Processing

  • Interleaved Execution
  • Batch Mode Memory Grant Feedback
  • Batch Mode Adaptive Join

SQL 2019: Intelligent Query Processing

  • Batch Mode Rowstore
  • Approximate Query Processing
  • Table Variable Deferred Compilation
  • Scalar UDF Inlining

https://docs.microsoft.com/de-de/sql/relational-databases/performance/intelligent-query-processing

Wie beim Adaptive Query Processing können die neuen Funktionen gezielt aktiviert oder implementiert werden und spielen Ihre Stärken in speziellen Abfrageszenarien aus. Beim Approximate Query Processing kann beispielsweise mit der neuen APPROX_COUNT_DISTINCT-Anweisung ein schnelleres Ergebnis in umfangreichen Big Data-Tabellen ermittelt werden, wenn der Wert nicht exakt sein muss. Die Abweichung liegt dabei bei kleiner 2%.

Durch die Table Variable Deferred Compilation wird die tatsächliche Anzahl an Zeilen für eine Tabellenvariable verwendet, statt bisher der Standardwert 1. Dadurch ist bei solchen Abfragen eine bessere Performance möglich, weil ein besser passender Ausführungsplan erzeugt werden kann.

Das Scalar UDF Inlining bindet Aufrufe von benutzerdefinierten Funktionen in die Hauptquery ein, wodurch solche Abfragen ebenfalls profitieren können. Ob das Inlining möglich ist, hängt jedoch von der UDF ab.

Sind diese drei neuen Features in speziellen Szenarien (Big Data Count Distinct, Table Variables, User-defined Functions) hilfreich, ist vom Batch Mode on Rowstore im Allgemeinen eine spürbare Performanceverbesserung zu erwarten. Wenn mindestens eine in der Abfrage beteiligte Tabelle 131.072 oder mehr Zeilen hat, verjoint, aggregiert oder mit einer Fensterfunktion abgefragt wird, kann SQL den Batch Mode verwenden. Dadurch wird die Operation statt zeilenweise in Batches von 899 Zeilen ausgeführt, wovon dann unter anderem Multi-Core-Umgebungen profitieren.

Bringt Intelligent Query Processing also wirklich was? Approximate Query Processing, Table Variable Deferred Compilation und Scalar UDF Inlining sind Spezialwerkzeuge, die in ihrem jeweiligen Bereich sehr sinnvoll sind. Das Highlight ist jedoch der Batch Mode on Rowstore, von dem eine deutlicher Vorteil in vielen Szenarien erwartet werden kann.

Adaptive und Intelligent Query Processing bei den SQL Saturdays (Miloš Radivojević, MVP)
https://www.sqlsaturday.com/SessionDownload.aspx?suid=22889