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.