Warum IQP wichtig ist – auch wenn Du nichts tust

SQL Server hat still und heimlich nachgelegt.
Intelligent Query Processing (IQP) bringt Automatik in die Query-Optimierung.
Ohne dass Du den Code ändern musst.

Du aktivierst’s über die Kompatibilitätsstufe.
Und dann arbeitet der Optimizer mit.
Leise. Unauffällig. Wirkungsvoll.

Voraussetzung: Kompatibilitätslevel

ALTER DATABASE DeineDB 
SET COMPATIBILITY_LEVEL = 150; -- für SQL Server 2019

Aktiviert automatisch die IQP-Features der jeweiligen Version.
Wichtig: Du brauchst keine neue Engine-Version.
Nur die passende compat_level.

Was bringt IQP konkret?

FeatureSeit VersionNutzen
Batch Mode on Rowstore2019große Joins schneller
Scalar UDF Inlining2019benutzerdef. Funktionen optimiert
Table Variable Deferred Compilation2019realistische Schätzungen
Approximate Count Distinct2019COUNT(DISTINCT) schneller
Memory Grant Feedback2017/2019Speicherbedarf anpassbar
Interleaved Execution for MSTVFs2017bessere Cardinality-Schätzung
Parameter Sensitive Plan (PSP)2022mehrere Pläne je nach Parameter

Beispiel: Table Variable Deferred Compilation

Vorher:

DECLARE @tmp TABLE (id INT);
INSERT INTO @tmp SELECT id FROM dbo.Kunden WHERE aktiv = 1;

SELECT * FROM @tmp WHERE id > 1000;

SQL Server schätzt 1 Zeile. Immer.
Mit IQP wartet der Optimizer auf reale Zeilen.

Besseres Estimation → besserer Plan.

Beispiel: Scalar UDF Inlining

CREATE FUNCTION dbo.USt(@netto MONEY)
RETURNS MONEY
AS
BEGIN
    RETURN @netto * 0.19;
END;

SELECT dbo.USt(100);

Früher: Schwarzbox im Plan. Langsam.
Jetzt: Der Code wird inline ersetzt → kein Funktionsaufruf im Loop.
Bis zu 30× schneller bei Massenoperationen.

Beispiel: Batch Mode on Rowstore

SELECT SUM(betrag)
FROM dbo.Rechnungen
WHERE jahr = 2023;

Früher war Batch Mode nur für Columnstore.
Jetzt auch für normale Rowstore-Tabellen – bei passenden Joins, Aggregationen und Sortierungen.

Aktiviert automatisch.
Erkennbar im Execution Plan: „Batch Mode“ statt „Row Mode“.

Beispiel: Memory Grant Feedback

Du kennst das: Mal braucht die Abfrage 5 MB, mal 500 MB.
Und der Grant ist nie optimal.

Mit IQP wird die Speicherzuteilung bei wiederholten Ausführungen angepasst.

SELECT * 
FROM dbo.Auftraege
WHERE status = 'offen'
ORDER BY auftragswert DESC;

Beim ersten Mal evtl. zu viel oder zu wenig Memory Grant.
Beim zweiten Mal: angepasst.

Parameter Sensitive Plan (PSP) – SQL 2022

Früher: Ein Plan pro Abfrage.
Jetzt: Mehrere Pläne je nach Parameterwert.

SELECT * FROM dbo.Kunden WHERE land = @land;

Für DE gibt’s 100.000 Treffer, für LU nur 3.
Früher: Ein Plan – für beide.
Jetzt: Zwei unterschiedliche Pläne, jeweils optimal.

Voraussetzung: Compat Level 160 (SQL Server 2022).

Aktivierung prüfen

SELECT compatibility_level 
FROM sys.databases 
WHERE name = 'DeineDB';

Execution Plan öffnen → nach Batch Mode, Memory Feedback, UDF Inlining suchen.

Mein Fazit

Du musst nichts neu schreiben.
Nur Kompatibilitätslevel erhöhen und beobachten.

IQP hilft bei typischen KMU-Szenarien:

  • viele kleine Abfragen
  • inkonsistente Datenverteilungen
  • schlechte Schätzungen
  • vererbte UDFs aus 2012-Zeiten

Wenn Du willst, prüf ich Deine Systeme auf IQP-Potenzial.

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert