In der Welt der Datenbanksysteme ist Stillstand Rückschritt. Die Modernisierung Ihrer Infrastruktur ist entscheidend, um die Leistung zu optimieren, neue Funktionen zu nutzen und die Sicherheit zu verbessern. Eine oft übersehene, aber immens wichtige Einstellung in SQL Server und Azure SQL Database ist das Compatibility Level (Kompatibilitätsgrad). Es ermöglicht Ihnen, die neuesten Verbesserungen des Datenbankmoduls zu nutzen, ohne sofort ein vollständiges Upgrade des Servers durchführen zu müssen.
In diesem umfassenden Leitfaden erfahren Sie, warum die Erhöhung des Compatibility Levels auf 150 – das Level von SQL Server 2019 und der aktuellen Azure SQL Database – so vorteilhaft ist und wie Sie diesen Prozess sicher und ohne unerwartete Probleme durchführen können. Egal, ob Sie Datenbankadministrator, Entwickler oder IT-Profi sind, diese Anleitung hilft Ihnen, Ihre SQL-Datenbanken auf das nächste Level zu heben.
Was ist das Compatibility Level (Kompatibilitätsgrad) und warum ist es wichtig?
Das Compatibility Level ist eine Datenbankeigenschaft, die bestimmt, wie bestimmte T-SQL-Anweisungen und Verhaltensweisen des Abfrageoptimierers gehandhabt werden. Es ist der Mechanismus, den SQL Server verwendet, um Abwärtskompatibilität zu gewährleisten. Wenn Sie eine ältere Datenbank auf eine neuere SQL Server-Version migrieren, behält diese Datenbank zunächst ihr ursprüngliches Compatibility Level bei, es sei denn, Sie ändern es explizit.
Warum ist das so wichtig? Ein höheres Compatibility Level bedeutet, dass Ihre Datenbank die neuesten Funktionen des Datenbankmoduls nutzen kann. Dazu gehören Verbesserungen im Abfrageoptimierer, neue T-SQL-Syntax, verbesserte Sicherheitsfunktionen und Performance-Optimierungen. Die Erhöhung auf 150 bedeutet, dass Ihre Datenbank die Leistungsfähigkeit und die Merkmale von SQL Server 2019 voll ausschöpfen kann.
Die Vorteile des Kompatibilitätsgrads 150
Die Umstellung auf Compatibility Level 150 bringt eine Reihe signifikanter Vorteile mit sich, die Ihre Datenbankleistung und Entwicklerproduktivität erheblich steigern können:
- Intelligente Abfrageverarbeitung (Intelligent Query Processing – IQP): Dies ist vielleicht der größte Vorteil. CL 150 führt eine Reihe von IQP-Funktionen ein, die die Abfrageleistung ohne Anwendungsänderungen verbessern können. Dazu gehören:
- Scalar UDF Inlining: Skalare UDFs, die traditionell als Performance-Killer galten, können inline in den aufrufenden Abfragetext eingebettet werden, was zu erheblichen Geschwindigkeitssteigerungen führt.
- Batch Mode on Rowstore: Verbessert die Leistung für Analyselasten, indem Batches von Zeilen verarbeitet werden, selbst wenn die Daten in Rowstore-Format vorliegen.
- Table Variable Deferred Compilation: Verzögert die Kompilierung von Abfragen, die Tabellenvariablen verwenden, bis zur ersten tatsächlichen Kompilierung, was zu genaueren Kardinalitätsschätzungen und besseren Ausführungsplänen führt.
- Parameter Sensitive Plan Optimization (PSP): Eine wichtige Neuerung in Azure SQL Database (und SQL Server 2022, kann aber via Query Store auch in SQL Server 2019 bis zu einem gewissen Grad erreicht werden), die die Erzeugung mehrerer, spezifischer Pläne für Abfragen mit parametrisierten Parametern ermöglicht, um Leistungsprobleme aufgrund von Parameter-Sniffing zu mindern.
- Verbesserungen im Abfrageoptimierer: Jede neue SQL Server-Version bringt einen optimierten Abfrageoptimierer mit sich, der intelligentere und effizientere Ausführungspläne generieren kann. Dies kann zu schnelleren Abfragen und einer geringeren Ressourcenlast führen.
- Neue T-SQL-Funktionen: Sie erhalten Zugriff auf die neuesten T-SQL-Erweiterungen, wie z.B. Verbesserungen für Graph-Datenbanken, Resumable Online Index Create und andere sprachliche Erweiterungen, die die Entwicklung erleichtern und die Flexibilität erhöhen.
- Sicherheitsverbesserungen: Obwohl das Compatibility Level selbst keine direkten Sicherheitsfunktionen einführt, ermöglicht es die Nutzung der neuesten SQL Server-Versionen, die regelmäßig mit neuen Sicherheitsfeatures und -korrekturen ausgestattet sind.
- Modernisierung und Zukunftssicherheit: Das Upgrade auf CL 150 ist ein wichtiger Schritt zur Modernisierung Ihrer Datenbanklandschaft und erleichtert zukünftige Upgrades auf noch neuere SQL Server-Versionen oder die Migration in die Cloud.
Risiken und Herausforderungen bei der Erhöhung des Compatibility Levels
Obwohl die Vorteile überzeugend sind, ist die Erhöhung des Compatibility Levels keine trivialer Vorgang. Es gibt potenzielle Risiken, die sorgfältig gemanagt werden müssen:
- Veränderungen im Abfrageoptimierer: Das größte Risiko. Ein neues Compatibility Level bedeutet einen neuen Abfrageoptimierer. Dies kann dazu führen, dass Abfragen, die zuvor gut liefen, plötzlich schlechter performen (sogenannte „Regressionen”), da der Optimierer einen neuen, weniger effizienten Ausführungsplan wählt.
- Breaking Changes: In seltenen Fällen können sich bestimmte T-SQL-Funktionen oder Verhaltensweisen ändern, die zu Anwendungsfehlern führen. Es ist entscheidend, die Microsoft-Dokumentation für Breaking Changes sorgfältig zu prüfen.
- Unerwartetes Verhalten: Selbst wenn keine direkten Fehler auftreten, kann es zu subtilen Änderungen im Verhalten kommen, die in einer Produktionsumgebung problematisch sein könnten.
- Anwendungskompatibilität: Ihre Anwendung könnte sich auf spezifische Verhaltensweisen einer älteren SQL Server-Version verlassen. Ein neues Compatibility Level könnte diese Annahmen stören und zu unerwarteten Problemen führen.
Die gute Nachricht ist, dass diese Risiken durch sorgfältige Planung und Tests minimiert werden können.
Vorbereitung: Der Schlüssel zum sicheren Upgrade
Eine gründliche Vorbereitung ist absolut entscheidend, um ein reibungsloses und sicheres Upgrade auf Compatibility Level 150 zu gewährleisten. Überspringen Sie diese Schritte nicht!
1. Umfassende Sicherung (Full Backup)
Bevor Sie Änderungen vornehmen, erstellen Sie eine vollständige und überprüfte Sicherung Ihrer Produktionsdatenbank. Dies ist Ihr Rettungsanker, falls etwas schiefgeht und ein Rollback erforderlich wird.
2. Testumgebung einrichten
Erstellen Sie eine exakte Kopie Ihrer Produktionsdatenbank auf einem Testserver, der idealerweise dieselbe SQL Server-Version und Hardwarekonfiguration wie Ihr Produktionssystem aufweist. Führen Sie alle Änderungen und Tests zuerst in dieser Umgebung durch.
3. Leistungs-Baseline erstellen
Sammeln Sie umfassende Leistungsdaten aus Ihrer Produktionsumgebung, bevor Sie das Compatibility Level erhöhen. Konzentrieren Sie sich auf:
- CPU-Auslastung, I/O-Latenz und Durchsatz.
- Die Top-N-Abfragen (z.B. die 100 Abfragen mit der höchsten CPU-Zeit, logischen Lesevorgängen oder längster Ausführungsdauer).
- Durchschnittliche und maximale Ausführungszeiten für kritische Geschäftsprozesse.
- Nutzen Sie hierfür den Query Store (Abfragespeicher) von SQL Server, Performance Monitor (PerfMon) und Dynamic Management Views (DMVs).
Diese Baseline ist Ihr Maßstab, um nach dem Upgrade festzustellen, ob sich die Leistung verbessert oder verschlechtert hat.
4. Anwendungskompatibilität prüfen
Führen Sie umfangreiche Tests Ihrer Anwendung(en) gegen die Testdatenbank durch. Stellen Sie sicher, dass alle Funktionen, Berichte und Integrationen wie erwartet funktionieren. Beziehen Sie Endbenutzer oder Qualitätssicherungsteams in diesen Prozess ein.
5. Breaking Changes verstehen
Lesen Sie die offizielle Microsoft-Dokumentation zu Breaking Changes und Verhaltensänderungen für SQL Server 2019. Prüfen Sie, ob diese Änderungen für Ihre Datenbank relevant sind. Für die meisten Datenbanken sind die Breaking Changes gering, aber es ist besser, auf Nummer sicher zu gehen.
6. Kritische Abfragen identifizieren
Nutzen Sie den Query Store, um Abfragen zu identifizieren, die besonders ressourcenintensiv oder geschäftskritisch sind. Diese Abfragen sollten nach dem Upgrade besonders genau überwacht werden.
Schritt-für-Schritt-Anleitung zur Erhöhung des Compatibility Levels
Nachdem Sie die sorgfältigen Vorbereitungsschritte abgeschlossen haben, können Sie das Compatibility Level erhöhen. Denken Sie daran, dies zuerst in Ihrer Testumgebung zu tun!
A. Erhöhung mittels SQL Server Management Studio (SSMS)
Dies ist der visuelle Weg und oft der bevorzugte für einzelne Datenbanken:
- Stellen Sie eine Verbindung zu Ihrer SQL Server-Instanz in SSMS her.
- Erweitern Sie den Knoten „Datenbanken”.
- Rechtsklicken Sie auf die Datenbank, deren Compatibility Level Sie ändern möchten (z.B. Ihre Testdatenbank).
- Wählen Sie im Kontextmenü „Eigenschaften”.
- Navigieren Sie im Fenster „Datenbankeigenschaften” zum Reiter „Optionen”.
- Suchen Sie das Dropdown-Menü „Kompatibilitätsgrad” und wählen Sie „SQL Server 2019 (150)” aus.
- Klicken Sie auf „OK”, um die Änderung zu speichern.
B. Erhöhung mittels T-SQL-Befehl
Für Skripting, Automatisierung oder die Änderung mehrerer Datenbanken ist der T-SQL-Ansatz effizienter:
- Öffnen Sie ein neues Abfragefenster in SSMS oder Azure Data Studio.
- Verwenden Sie den folgenden Befehl, wobei
[YourDatabaseName]
der Name Ihrer Datenbank ist:ALTER DATABASE [YourDatabaseName] SET COMPATIBILITY_LEVEL = 150;
- Führen Sie den Befehl aus.
Hinweis: Die Änderung des Compatibility Levels erfordert keinen Neustart der Datenbank oder des SQL Server-Dienstes. Neue Verbindungen zur Datenbank werden automatisch das neue Compatibility Level verwenden. Bestehende Verbindungen verwenden weiterhin das alte Level, bis sie getrennt und wieder verbunden werden.
C. Für Azure SQL-Datenbanken
Für neue Azure SQL-Datenbanken ist das Compatibility Level in der Regel standardmäßig auf 150 eingestellt. Für bestehende Datenbanken können Sie den T-SQL-Befehl wie oben beschrieben verwenden. Im Azure-Portal selbst gibt es keine direkte GUI-Option wie in SSMS, daher ist T-SQL der Standardweg.
Überprüfung und Überwachung nach der Änderung
Nachdem Sie das Compatibility Level erhöht haben (zuerst in der Testumgebung!), beginnt die entscheidende Phase der Überprüfung und Überwachung.
- 1. Leistung überwachen: Vergleichen Sie die aktuelle Leistung mit Ihrer zuvor erstellten Baseline. Suchen Sie nach signifikanten Änderungen bei CPU, I/O und Ausführungszeiten.
- 2. Fehlerprotokolle prüfen: Überprüfen Sie das SQL Server Error Log und die Anwendungsprotokolle auf neue oder erhöhte Fehlermeldungen.
- 3. Abfragepläne überprüfen: Konzentrieren Sie sich auf die zuvor identifizierten kritischen Abfragen. Haben sich ihre Ausführungspläne geändert? Sind die neuen Pläne effizienter oder weniger effizient?
- 4. Abfragespeicher (Query Store) nutzen: Der Query Store ist Ihr bester Freund in dieser Phase. Er ermöglicht es Ihnen, Abfrageleistung „vorher” und „nachher” zu vergleichen. Identifizieren Sie Abfragen mit Leistungsregressionen und analysieren Sie die neuen Pläne im Vergleich zu den alten.
- 5. Indizes warten: Führen Sie eine Indexreorganisation oder einen Indexneuaufbau für die betroffenen Datenbanken durch. Manchmal profitieren Abfragen mit dem neuen Compatibility Level von aktualisierten Statistiken und optimalen Indexstrukturen.
- 6. Ausgiebige Anwendungstests: Führen Sie erneut vollständige Anwendungstests durch, um sicherzustellen, dass alles wie erwartet funktioniert und keine Regressionen aufgetreten sind.
Troubleshooting: Was tun bei Problemen?
Sollten Sie nach der Erhöhung des Compatibility Levels auf Leistungsprobleme oder unerwartetes Verhalten stoßen, ist schnelles und gezieltes Handeln gefragt:
- 1. Rückgängigmachung (Rollback): Wenn schwerwiegende und geschäftskritische Probleme auftreten, zögern Sie nicht, das Compatibility Level sofort auf den vorherigen Wert zurückzusetzen. Dies ist die sicherste und schnellste Möglichkeit, die Produktion wiederherzustellen:
ALTER DATABASE [YourDatabaseName] SET COMPATIBILITY_LEVEL = [PreviousLevel]; -- z.B. 140 für SQL Server 2017
- 2. Abfrageoptimierung (Query Tuning): Nutzen Sie den Query Store, um die problematischen Abfragen zu identifizieren. Analysieren Sie die Ausführungspläne. Oft können Indexanpassungen, das Umschreiben von Abfragen oder das Hinzufügen von Hints das Problem beheben.
- 3. Kardinalitätsschätzer (Cardinality Estimator – CE): Der Abfrageoptimierer verwendet den Kardinalitätsschätzer, um die Anzahl der Zeilen abzuschätzen, die von einer Abfrage zurückgegeben werden. Ab Compatibility Level 120 wurde ein neuer, verbesserter CE eingeführt. In seltenen Fällen kann der neue CE zu schlechteren Plänen führen. Sie haben mehrere Optionen:
- Query Hint: Für einzelne problematische Abfragen können Sie den alten CE erzwingen:
OPTION (USE HINT ('FORCE_LEGACY_CARDINALITY_ESTIMATION'))
- Datenbank-Scoped Configuration: Als Übergangslösung können Sie den alten CE auf Datenbankebene aktivieren:
ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = ON;
Dies sollte jedoch keine Dauerlösung sein, da Sie die Vorteile des neuen CE verlieren.
- Query Hint: Für einzelne problematische Abfragen können Sie den alten CE erzwingen:
- 4. Abfragespeicher (Query Store) zum Erzwingen von Plänen: Eine der mächtigsten Funktionen des Query Store ist die Möglichkeit, einen bestimmten Abfrageplan zu „erzwingen”. Wenn Sie vor dem Upgrade einen guten Plan für eine Abfrage hatten, können Sie diesen über den Query Store erzwingen, um die Performance-Regression zu umgehen.
- 5. Trace Flags: In bestimmten Situationen können spezielle Trace Flags das Verhalten des Abfrageoptimierers beeinflussen. Dies ist jedoch eine fortgeschrittene Technik und sollte nur nach gründlicher Recherche und in Absprache mit erfahrenen DBAs angewendet werden.
Best Practices für zukünftige Upgrades und Wartung
Um Ihre Datenbankumgebung zukunftssicher zu machen und Upgrades reibungsloser zu gestalten, beachten Sie diese Best Practices:
- Regelmäßige Überprüfung: Bleiben Sie über neue SQL Server-Versionen und deren Compatibility Levels auf dem Laufenden. Planen Sie regelmäßige Upgrades.
- Schrittweise Einführung: Wenn Ihre Umgebung dies zulässt, führen Sie Upgrades in Phasen durch, beginnend mit weniger kritischen Systemen oder Testumgebungen.
- Dokumentation: Halten Sie alle vorgenommenen Änderungen, Testergebnisse und Rollback-Pläne fest.
- Automatisierung: Nutzen Sie Skripte und Automatisierung für wiederholbare Upgrade-Schritte, um menschliche Fehler zu minimieren.
- Kontinuierliche Leistungsüberwachung: Etablieren Sie eine kontinuierliche Überwachung Ihrer Datenbankleistung, um Performance-Regressionen frühzeitig zu erkennen.
Fazit
Die Erhöhung des Compatibility Level Ihrer SQL-Datenbank auf 150 ist ein wichtiger Schritt, um von den neuesten Leistungsverbesserungen und Funktionen von SQL Server 2019 und Azure SQL Database zu profitieren. Es ist jedoch kein einfacher Knopfdruck, sondern erfordert eine sorgfältige Planung, gründliche Tests und eine umfassende Überwachung. Mit den in dieser Anleitung beschriebenen Schritten können Sie diesen Prozess jedoch sicher und erfolgreich durchführen und Ihre Datenbank auf ein neues Niveau der Effizienz und Modernität heben.
Investieren Sie die Zeit in die Vorbereitung und Sie werden die Früchte in Form einer schnelleren, stabileren und zukunftssicheren Datenbankumgebung ernten.