Eine Datenbank leidet unter Leistungsverschlechterung. Es müssen die ressourcenintensivsten Abfragen identifiziert, Planänderungen verfolgt und Leistungsregressionen gefunden werden.
→Aktivieren und nutzen Sie Query Store.
Warum: Query Store ist der integrierte „Flugschreiber“ für die Abfrageleistung. Es erfasst automatisch die Abfragehistorie, Pläne und Wartezustände, was es zum primären Werkzeug zur Diagnose von Leistungsproblemen im Zeitverlauf macht.
Referenz↗
Eine Abfrage funktioniert manchmal gut, manchmal schlecht aufgrund von Parameter-Sniffing-Problemen, bei denen ein Ausführungsplan für einen nicht-repräsentativen Parameterwert optimiert wird.
→Verwenden Sie Query Store, um die verschiedenen Pläne zu identifizieren und den durchgängig guten Ausführungsplan zu erzwingen.
Warum: Planerzwingung in Query Store bietet eine schnelle und effektive Möglichkeit, die Leistung problematischer Abfragen ohne Codeänderungen zu stabilisieren. Sie überschreibt die Wahl des Optimierers mit einem bekanntermaßen guten Plan.
Verbesserung der Abfrageleistung ohne Codeänderungen durch Nutzung von Funktionen wie Batch-Modus bei Rowstore, Memory Grant Feedback und verzögerter Kompilierung von Tabellenvariablen.
→Setzen Sie den Datenbankkompatibilitätsgrad auf 150 (für SQL 2019-Funktionen) oder höher.
Warum: Das Feature-Set für Intelligent Query Processing (IQP) wird durch den Datenbankkompatibilitätsgrad aktiviert. Level 150+ aktiviert eine breite Palette von Leistungsverbesserungen im Abfrageprozessor, die keine Codeänderungen erfordern.
Das Betriebsteam muss benachrichtigt werden, wenn wichtige Leistungsmetriken, wie CPU-Prozentsatz oder Deadlocks, einen definierten Schwellenwert überschreiten.
→Verwenden Sie Azure Monitor, um Metrikwarnungen (für CPU) und Protokollwarnungen (für Deadlocks) zu erstellen, die eine Aktionsgruppe auslösen.
Warum: Azure Monitor ist die zentralisierte Plattform für die Überwachung und Warnung von Azure-Ressourcen. Aktionsgruppen bieten flexible Benachrichtigungskanäle (E-Mail, SMS, Webhook usw.).
Verbessern Sie die Schreibleistung, indem Sie Indizes identifizieren und entfernen, die von keinen Leseabfragen verwendet werden.
→Abfragen Sie die `sys.dm_db_index_usage_stats` DMV.
Warum: Diese DMV verfolgt die Indexnutzung (Suchvorgänge, Scans, Lookups) im Vergleich zu Updates. Indizes mit vielen Updates, aber keiner oder sehr geringer Nutzung sind Hauptkandidaten für die Entfernung, was den Wartungsaufwand reduziert.
Es müssen detaillierte Informationen über intermittierende Blockierungsprobleme erfasst werden, einschließlich der Anweisungen und Sitzungen, die an der Blockierungskette beteiligt sind.
→Konfigurieren Sie eine Extended Events-Sitzung, die das Ereignis `blocked_process_report` erfasst.
Warum: Dieses Ereignis liefert einen detaillierten XML-Bericht über Blockierungsketten, wenn der `blocked process threshold` überschritten wird, und bietet tiefe Diagnoseinformationen, die in DMVs nicht verfügbar sind.
Eine Datenbank muss ihre Indexstrategie automatisch an sich ändernde Workload-Muster anpassen, ohne manuelles Eingreifen.
→Aktivieren Sie die CREATE_INDEX-Option in der automatischen Optimierung der Azure SQL-Datenbank.
Warum: Diese Funktion ermöglicht es Azure, die Workload zu analysieren, fehlende Indizes mit hoher Auswirkung zu identifizieren, diese zu erstellen und ihren Leistungsvorteil zu validieren, wodurch eine wichtige DBA-Aufgabe automatisiert wird.
Auslagerung leseintensiver Berichtsworkloads von der primären OLTP-Datenbank in einem Business Critical- oder Premium-Tier.
→Ändern Sie die schreibgeschützten Verbindungszeichenfolgen der Anwendung so, dass sie `ApplicationIntent=ReadOnly` enthalten.
Warum: Diese Tiers enthalten ein kostenloses, integriertes lesbares sekundäres Replikat. Die Eigenschaft `ApplicationIntent` in der Verbindungszeichenfolge leitet schreibgeschützte Verbindungen automatisch an dieses Replikat weiter und isoliert Lese-Workloads.
Eine große Faktentabelle in einem Data Warehouse wird häufig für Aggregationsabfragen (SUM, COUNT, AVG) verwendet, die langsam ausgeführt werden.
→Erstellen Sie einen gruppierten Columnstore-Index auf der Faktentabelle.
Warum: Columnstore-Indizes speichern Daten in einem spaltenbasierten Format, bieten eine sehr hohe Datenkomprimierung und ermöglichen die Batch-Modus-Ausführung, was Aggregations- und scanlastige Analyseabfragen dramatisch beschleunigt.
Eine Datenbank erfährt erhebliche Blockierungskonflikte zwischen Leseabfragen (Berichte) und Schreibabfragen (Transaktionen).
→Aktivieren Sie Read Committed Snapshot Isolation (RCSI) auf der Datenbank.
Warum: RCSI verwendet Zeilenversionierung, wodurch Leser die zuletzt committete Version von Daten sehen können, ohne gemeinsame Sperren zu setzen, wodurch Blockaden von Schreibvorgängen eliminiert werden. Schreiber blockieren Leser nicht.
Eine Anwendung, die eine Serverless-Datenbank verwendet, erfährt nach einer Inaktivitätsphase anfänglich langsame Verbindungszeiten.
→Verringern Sie die Auto-Pause-Verzögerung oder konfigurieren Sie einen Mindest-vCore-Wert größer als Null.
Warum: Die Verzögerung wird dadurch verursacht, dass die Datenbank aus einem pausierten Zustand (Kaltstart) wieder aufgenommen wird. Das Festlegen eines Mindest-vCore-Werts verhindert, dass die Datenbank vollständig pausiert, wodurch die Wiederaufnahme-Latenz auf Kosten einer kontinuierlichen Compute-Abrechnung entfällt.