Azure SQL Database ist das Database-as-a-Service-Angebot von Microsoft, das ein enormes Maß an Flexibilität und Sicherheit bietet und als Teil von Microsofts Platform-as-a-Service zusätzliche Funktionen nutzen kann. Da die Azure SQL-Datenbank datenbankbezogen ist, gibt es einige große Unterschiede bei der Leistungsoptimierung.
Optimieren der Instanz
Viele Elemente auf Instanzebene, die Sie bisher bei vollständigen Installationen konfiguriert haben, sind tabu. Einige dieser Elemente sind:
- Festlegen des minimalen und maximalen Serverspeichers
- Optimierung für Ad-hoc-Workloads aktivieren
- Änderung der Kostenschwelle für Parallelität
- Ändern des maximalen Parallelitätsgrades auf Instanzebene
- Optimieren von tempdb mit mehreren Datendateien
- Trace-Flags
Seien Sie nicht zu verärgert über einige davon. Die Anweisung ALTER DATABASE SCOPED CONFIGURATION ermöglicht eine Reihe von Konfigurationseinstellungen auf der Ebene der einzelnen Datenbanken. Dies wurde mit Azure SQL-Datenbank und in SQL Server ab SQL Server 2016 eingeführt. Einige dieser Einstellungen umfassen:
- Prozedur-Cache leeren
- Setzen von MAXDOP auf einen anderen Wert als Null
- Legen Sie das Kardinalitätsschätzmodell des Abfrageoptimierers fest
- Hotfixes zur Abfrageoptimierung aktivieren oder deaktivieren
- Parameter-Sniffing aktivieren oder deaktivieren
- Aktivieren oder deaktivieren Sie den Identitäts-Cache
- Aktivieren oder deaktivieren Sie, dass ein Stub eines kompilierten Plans im Cache gespeichert wird, wenn ein Stapel zum ersten Mal kompiliert wird.
- Aktivieren oder deaktivieren Sie die Erfassung von Ausführungsstatistiken für nativ kompilierte T-SQL-Module.
- Standardmäßig Online-Optionen für DDL-Anweisungen aktivieren oder deaktivieren, die die ONLINE=ON/OFF-Syntax unterstützen.
- Aktivieren oder deaktivieren Sie standardmäßig fortsetzbare Optionen für DDL-Anweisungen, die die RESUMABLE=ON/OFF-Syntax unterstützen.
- Aktivieren oder deaktivieren Sie die Auto-Drop-Funktion globaler temporärer Tabellen
Wie Sie der Liste der bereichsbezogenen Konfigurationen entnehmen können, haben Sie viel Kontrolle und Präzision für die Feinabstimmung bestimmter Verhaltensweisen für einzelne Datenbanken. Für einige Kunden können sich die Einschränkungen für die Kontrolle auf Instanzebene negativ auswirken, während andere darin einen Vorteil sehen werden.
Für Unternehmen, die pro Kunde über eine Datenbank verfügen, die vollständig isoliert werden muss und in Azure SQL-Datenbank integriert ist. Für diejenigen, die die Funktionen von SQL Server auf Instanzebene benötigen, aber das PaaS-Angebot von Microsoft nutzen möchten, gibt es Azure SQL Managed Instance, das auf Instanzen beschränkt ist. Das Ziel dort ist eine 100-prozentige Oberflächenkompatibilität mit SQL Server; Sie können also den minimalen und maximalen Serverspeicher festlegen, die Optimierung für Ad-hoc-Arbeitslasten aktivieren und sowohl MAXDOP als auch den Kostenschwellenwert für Parallelität ändern. Tempdb auf einer verwalteten Instanz verfügt bereits über mehrere Dateien, aber Sie können weitere hinzufügen und die Standardgröße erhöhen. In vielerlei Hinsicht fühlt es sich wirklich wie die vollständige Installation von SQL Server an.
Anfrageoptimierung
Ein weiterer Unterschied zwischen Azure SQL-Datenbank und SQL Server besteht darin, dass der Abfragespeicher standardmäßig in Azure SQL-Datenbank aktiviert ist. Sie können den Abfragespeicher deaktivieren, aber dann schränken Sie die Intelligent Performance-Tools im Azure-Portal ein, die ihn verwenden. Der Abfragespeicher ist eine Funktion, die Einblick in die Abfrageleistung und Planauswahl bietet. Der Abfragespeicher erfasst auch einen Verlauf von Abfragen, Plänen und Laufzeitstatistiken, sodass Sie überprüfen können, was vor sich geht. Möchten Sie wissen, welche Abfrage die höchste Neukompilierungszeit, Ausführungszeit, Ausführungsanzahl, CPU-Auslastung, Speicherauslastung, die meisten physischen Lese-/Schreibvorgänge und mehr hat? Der Abfragespeicher verfügt über diese Informationen. Für SQL Server müssen Sie diese Funktion pro Datenbank aktivieren. Wenn Sie neu bei Query Store sind, bietet meine Kollegin Erin Stellato einen dreistündigen Kurs zu Pluralsight an, der Ihnen den Einstieg erleichtern wird.
Die Kategorie „Intelligente Leistungswerkzeuge“ umfasst vier Funktionen. Zunächst bietet die Leistungsübersicht eine Zusammenfassung Ihrer gesamten Datenbankleistung, indem die 5 wichtigsten Abfragen nach CPU-Auslastung, Empfehlungen aus der automatischen Optimierung, der Optimierungsaktivität und den aktuellen automatischen Optimierungseinstellungen aufgelistet werden. Diese Zielseite gibt Ihnen einen schnellen Einblick in Ihre Leistung.
Zweitens listet die Option Leistungsempfehlungen alle aktuellen Empfehlungen für die Indexerstellung auf oder ob Indexe gelöscht werden sollten. Wenn kürzlich durchgeführte Aktionen abgeschlossen wurden, sehen Sie auch den Verlauf.
Drittens erhalten Sie in Query Performance Insight einen tieferen Einblick in Ihren Ressourcenverbrauch, indem Sie die Top-5-Abfragen nach CPU, Daten-E/A oder Protokoll-E/A anzeigen. Die Top-5-Abfragen sind farbcodiert, sodass Sie den Prozentsatz des Gesamtverbrauchs schnell visuell erkennen können. Sie können auf die Abfrage-ID klicken, um weitere Details einschließlich des SQL-Texts zu erhalten. Es gibt auch eine Registerkarte für lange laufende Abfragen. Ich finde es sehr gut, dass Microsoft eine solche Funktion kostenlos in das Azure-Portal aufgenommen hat. Es bietet einen Mehrwert, indem es Kunden ein Portal bietet, um die häufigsten anstößigen Abfragen anzuzeigen. Was ich hier als Herausforderung empfinde, ist eine Möglichkeit, eine allgemeine Basislinie für den Vergleich von Tag zu Tag, Woche zu Woche und dem Vormonat anzuzeigen. Für eine schnelle Analyse und Übersicht ist jedoch Query Performance Insight hilfreich.
Das letzte Feature in dieser Kategorie ist das automatische Tuning. Hier können Sie den Force-Plan konfigurieren, Index erstellen und Indexeinstellungen löschen. Sie können es ein- oder ausschalten oder vom Server erben. Plan erzwingen ermöglicht es Azure, den Ausführungsplan für rückgängig gemachte Abfragen auszuwählen, der seiner Meinung nach der bessere ist. Dieses Feature ist auch in SQL Server 2017 Enterprise Edition als automatische Plankorrektur vorhanden. Einige DBAs werden nervös, wenn sie von den automatischen Optimierungsfunktionen hören, da sie befürchten, dass sie in Zukunft den Bedarf an DBAs ersetzen könnten. Ich stelle immer gerne die Frage:„Wie viel Zeit verbringen Sie jeden Tag damit, Abfragen proaktiv zu optimieren?“. Die überwältigende Resonanz ist, dass die Leute tatsächlich sehr wenig Zeit für die proaktive Optimierung aufwenden können, und die meisten antworten, dass sie nur nach einer Code-Veröffentlichung oder wenn sich die Benutzer beschweren, wirklich „tunen“.
Zusätzlich zu den integrierten Tools und dem Vorteil der Verwendung von Query Store sind auch DMVs leicht verfügbar. Glenn Berry verfügt über eine ganze Sammlung von Skripts nur für Azure SQL-Datenbank, die Sie verwenden können. Eine bestimmte DMV, die ich hervorheben möchte, ist sys.dm_os_wait_stats. Dies wird von der Serverebene abgerufen. Wenn Sie sich also wirklich die Wartestatistiken für die Datenbankebene ansehen möchten, müssen Sie stattdessen sys.dm_db_wait_stats verwenden.
Hardware – Skalierung
Ein weiterer zu berücksichtigender Bereich bei der Betrachtung der Leistung mit Azure SQL-Datenbank ist die zugrunde liegende Hardware. Azure SQL-Datenbank wird nach Database Transaction Units (DTUs) und virtuellen Kernen berechnet. DTUs sind ein gemischtes Maß aus CPU, Arbeitsspeicher und E/A und in drei Stufen erhältlich; Basic, Standard und Premium. Basic umfasst nur 5 DTUs, Standard reicht von 10–3.000 DTUs und Premium reicht von 125–4.000 DTUs. Für die vCore-basierten Tarife haben wir General Purpose und Business Critical mit 1–80 virtuellen Kernen.
Im DTU-Modell sollte Basic für Entwicklung und Tests berücksichtigt werden. Es hat nur eine Backup-Aufbewahrung von 7 Tagen, daher würde ich es für Produktionsdaten nicht als praktikabel erachten. Standard eignet sich für niedrige, mittlere und hohe CPU-Anforderungen mit mittlerer bis niedriger E/A-Anforderung. Die Tarife Basic und Standard bieten 2,5 IOPS pro DTU mit 5 ms (Lesen), 10 ms (Schreiben). Der Premium-Tarif ist für mittlere bis hohe CPU-Anforderungen und hohe E/A mit 48 IOPS pro DTU mit 2 ms (Lesen/Schreiben). Die Premium-Stufe verfügt über einen um Größenordnungen schnelleren Speicher als der Standard. Im vCore-Modell haben Sie Gen4-Prozessoren, die 7 GB RAM pro physischem Kern bieten, und Gen 5-Prozessoren, die 5,1 GB RAM pro logischem Kern bieten. Aus E/A-Perspektive bietet General Purpose 500 IOPS pro vCore mit 7.000 max. Business Critical bietet 5.000 IOPS pro Kern mit 200.000 max.
Zusammenfassung
Azure SQL-Datenbank eignet sich hervorragend für Systeme, die eine Datenbankisolierung benötigen, während Azure SQL Managed Instance hervorragend für Umgebungen geeignet ist, in denen Sie Kompatibilität auf Instanzebene benötigen (Unterstützung datenbankübergreifender Abfragen). Wenn Sie Azure SQL-Datenbank optimieren müssen, müssen Sie Dinge auf Datenbankebene tun, da Optionen auf Instanzebene tabu sind, sodass datenbankbezogene Konfigurationseinstellungen Ihre Feinabstimmungsoptionen sind. Bei der Fehlerbehebung bei Abfragen mit schlechter Leistung stehen Ihnen einige integrierte Tools zur Verfügung, darunter der Abfragespeicher, und die meisten Ihrer regulären Optimierungsskripts funktionieren. Möglicherweise benötigen Sie noch mehr, z. B. Baselines, mehr Verlaufsdaten und die Möglichkeit, Beratungsbedingungen zu erstellen, die Ihnen bei der Verwaltung Ihrer Workloads helfen. Hier können leistungsstarke Überwachungslösungen wie SentryOne DB Sentry helfen.
Wenn alles andere fehlschlägt oder Ihre Arbeitslast einfach über Ihre aktuellen Hardwareressourcen hinaus angestiegen ist, skalieren Sie auf eine höhere Ebene.