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?
Feature | Seit Version | Nutzen |
---|---|---|
Batch Mode on Rowstore | 2019 | große Joins schneller |
Scalar UDF Inlining | 2019 | benutzerdef. Funktionen optimiert |
Table Variable Deferred Compilation | 2019 | realistische Schätzungen |
Approximate Count Distinct | 2019 | COUNT(DISTINCT) schneller |
Memory Grant Feedback | 2017/2019 | Speicherbedarf anpassbar |
Interleaved Execution for MSTVFs | 2017 | bessere Cardinality-Schätzung |
Parameter Sensitive Plan (PSP) | 2022 | mehrere 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.
No responses yet