Freigeben über


Datensammlung und Datasets von Database Watcher (Vorschau)

Gilt für:Azure SQL-DatenbankAzure SQL Managed Instance

Der Datenbankwatcher erfasst Überwachungsdaten aus SQL-Systemansichten und nimmt sie in Form von Datasets in den Datenspeicher auf. Jedes Dataset wird anhand der Daten aus einer oder mehreren SQL-Systemansichten gebildet. Für jedes Dataset gibt es eine separate Tabelle im Datenspeicher.

Datensammlung

Der Datenbankwatcher erfasst Überwachungsdaten in regelmäßigen Intervallen mithilfe von T-SQL-Abfragen. Die in jeder Ausführung einer Abfrage erfassten Daten werden als Probe bezeichnet. Die Häufigkeit der Probenerfassung je nach Dataset unterschiedlich. So können zum Beispiel Daten, die sich häufig ändern, wie SQL-Leistungsindikatoren, alle 10 Sekunden erfasst werden, während überwiegend statische Daten, wie die Datenbankkonfiguration, vielleicht nur alle fünf Minuten erfasst werden. Weitere Informationen finden Sie unter Datasets.

Database Watcher nutzt die Streamingerfassung im Azure Data Explorer und die Echtzeitanalyse in Microsoft Fabric für eine Überwachung in Quasi-Echtzeit. In der Regel stehen erfasste SQL-Überwachungsdaten für Berichte und Analysen innerhalb von weniger als 10 Sekunden zur Verfügung. Über den Link Erfassungsstatistik können Sie die Datenerfassungslatenz auf den Dashboards des Datenbankwatchers überwachen.

Interaktion zwischen Datenbankwatcher und Anwendungsworkloads

Das Aktivieren des Datenbank-Watchers wird wahrscheinlich keine erkennbaren Auswirkungen auf die Leistung des Anwendungs-Workloads haben. Häufigere Überwachungsabfragen werden in der Regel innerhalb von weniger als einer Sekunde ausgeführt, während Abfragen, die möglicherweise mehr Zeit erfordern, z. B. zum Zurückgeben großer Datasets, in selteneren Intervallen ausgeführt werden.

Um die Gefahr von Auswirkungen auf Anwendungsworkloads weiter zu verringern, werden alle Abfragen des Datenbankwatchers in Azure SQL-Datenbank ressourcengesteuert als interne Workload behandelt. Wenn ein Ressourcenkonflikt vorliegt, ist der Ressourcenverbrauch durch die Überwachungsabfragen auf einen kleinen Teil der gesamten für die Datenbank verfügbaren Ressourcen begrenzt. Dadurch werden Anwendungsworkloads gegenüber Überwachungsabfragen priorisiert.

Um Nebenläufigkeitskonflikte, wie Blockierungen und Deadlocks zwischen den in den Azure SQL-Ressourcen ausgeführten Datensammlungs- und Datenbank-Workloads zu vermeiden, verwenden die Überwachungsabfragen kurze Sperrtimeouts und eine niedrige Deadlock-Priorität. Im Fall eines Nebenläufigkeitskonflikts haben Anwendungsworkload-Abfragen Vorrang.

In den folgenden Szenarien können Lücken in den gesammelten Daten beobachtet werden:

  • Bei hoher Gesamtauslastung der Ressourcen oder bei Konkurrenzkonflikten zwischen Überwachungsabfragen und Anwendungsworkloads. In diesen Fällen werden Überwachungsabfragen zugunsten von Anwendungsworkloads entprioritisiert.
  • Wenn Sie über Automatisierung verfügen, die lang laufende Sitzungen beendet. Um Lücken in gesammelten Daten zu vermeiden, schließen Sie jede Sitzung aus, in der sich die program_name Spalte in der sys.dm_exec_sessions Systemansicht befindet SQLExternalMonitoring oder x_ms_reserved_sql_external_monitoring.

Datensammlung in Pools für elastische Datenbanken

Zum Überwachen eines Pool für elastische Datenbanken müssen Sie eine Datenbank im Pool als Ankerdatenbank festlegen. Ein Watcher verbindet sich mit der Ankerdatenbank. Da der Watcher die -Berechtigung VIEW SERVER PERFORMANCE STATE, stellen Systemansichten in der Ankerdatenbank Überwachungsdaten für den Pool als Ganzes bereit.

Tipp

Sie können zu jedem Pool für elastische Datenbanken, den Sie überwachen möchten, eine leere Datenbank hinzufügen und als Ankerdatenbank festlegen. Auf diese Weise können Sie andere Datenbanken in den Pool, aus dem Pool oder zwischen Pools verschieben, ohne dass die Überwachung des Pools für elastische Datenbanken unterbrochen wird.

Die von der Ankerdatenbank gesammelten Daten enthalten Metriken auf Poolebene und bestimmte Leistungsmetriken auf Datenbankebene für jede Datenbank im Pool, wie z. B. Metriken zur Ressourcennutzung und zur Anforderungsrate für jede Datenbank. In einigen Szenarien kann das Hinzufügen eines SQL-Ziels für die Überwachung eines elastischen Pools als Ganzes die Überwachung jeder einzelnen Datenbank im Pool überflüssig machen.

Bestimmte Überwachungsdaten wie CPU-, Speicher- und Speichernutzung sowie Wartestatistiken werden nur auf der Ebene des elastischen Pools gesammelt, da sie nicht einer einzelnen Datenbank in einem Pool zugeordnet werden können. Umgekehrt sind bestimmte andere Daten wie Abfrageausführungsstatistiken, Datenbank-Eigenschaften, Tabellen- und Index-Metadaten nur verfügbar, wenn Sie einzelne Datenbanken als SQL-Ziele hinzufügen.

Wenn Sie einzelne Datenbanken aus einem elastischen Pool als SQL-Ziele hinzufügen, sollten Sie auch den elastischen Pool als SQL-Ziel hinzufügen. Auf diese Weise erhalten Sie eine vollständigere Ansicht der Leistung von Datenbank und Pool.

Überwachen von dichten Pools für elastische Datenbanken

Ein umfangreicher Pool für elastische Datenbanken enthält eine große Anzahl von Datenbanken, hat jedoch eine relativ kleine Computegröße. Mit dieser Konfiguration können Kunden erhebliche Kosteneinsparungen erzielen, indem die Berechnungsressourcenzuordnung auf ein Minimum festgelegt wird.

Wichtig ist, dass bei diesem Ansatz nur eine kleine Anzahl von Datenbanken im Pool gleichzeitig Abfragen ausgeführt werden.

Warnung

Da Überwachungsabfragen in jeder überwachten Datenbank kontinuierlich ausgeführt werden müssen, empfiehlt es sich nicht, mehr als einige einzelne Datenbanken in einem dichten elastischen Pool zu überwachen.

Wenn Sie viele Datenbanken aus einem dichten elastischen Pool als SQL-Ziele hinzufügen, kann sich die kumulative Ressourcenauslastung durch die überwachungsabfragen, die in jeder Datenbank ausgeführt werden, auf Anwendungsworkloads auswirken, da nicht genügend Ressourcen im Pool vorhanden sind.

Aus demselben Grund sehen Sie möglicherweise Lücken in den gesammelten Daten oder größer als erwartet Intervalle zwischen Datenbeispielen.

Um einen dichten elastischen Pool zu überwachen, ermöglichen Sie die Überwachung auf Poolebene, indem Sie den elastischen Pool selbst als SQL-Ziel hinzufügen. Indem Sie die Gesamtanzahl der Überwachungsabfragen im elastischen Pool reduzieren, vermeiden Sie das Risiko, dass sich Anwendungsworkloads auswirken, während sie weiterhin Daten auf Poolebene in den SQL-flexiblenPool-Datasets sammeln.

Datensammlung in serverlosen Datenbanken

Wenn eine serverlose Datenbank automatisch angehalten wurde, überwacht die Datenbanküberwachung sie genau wie eine bereitgestellte Datenbank.

Wenn Sie die automatische Pause für eine serverlose Datenbank aktivieren, stoppt die Datenbanküberwachungsdatensammlung, wenn die Datenbank angehalten wird. Datenbanküberwachungsabfragen verhindern nicht, dass eine serverlose Datenbank angehalten wird, wenn sie andernfalls angehalten werden kann.

Kurz nach dem Wechsel einer serverlosen Datenbank zu einem Angehaltenen Zustand ändert sich der Status im Zusammenfassungsdashboard des Watchers in "Nicht sammeln". Die zuvor gesammelten Daten für die Datenbank verbleiben im Watcher-Datenspeicher und sind über Dashboards und Abfragen zugänglich.

Die Datensammlung wird innerhalb weniger Minuten nach dem Wechsel der Datenbank vom Angehaltenen in den Onlinestatus fortgesetzt.

Datenresidenz

Kunden können wählen, ob die gesammelten SQL-Überwachungsdaten in einem der drei Datenspeichertypen gespeichert werden sollen:

  • Eine Datenbank auf einem Azure Data Explorer cluster. Standardmäßig wird für jeden neuen Watcher ein neuer Azure Data Explorer-Cluster erstellt, der sich in derselben Azure-Region befindet wie der Watcher.

    Kunden können die spezifische Azure-Region in einer Azure-Geografie als Standort ihres Azure Data Explorer-Clusters und der Datenbank auswählen. Weitere Informationen zu den Datenreplikationsfunktionen in Azure Data Explorer finden Sie unter Überblick über Business Continuity und Disaster Recovery.

  • Eine Datenbank auf einem kostenlosen Azure Data Explorer-Cluster.

    Kunden können die spezifische Azure-Geografie, jedoch nicht die spezifische Azure-Region als Standort für ihren kostenlosen Azure Data Explorer-Cluster und die Datenbank auswählen. Die Datenreplikation in eine andere Region oder Geografie wird nicht unterstützt.

  • Eine Datenbank in Real-Zeit Analytics in Microsoft Fabric.

    Kunden können den geografischen Standort der Datenbank nicht wählen.

Um die Datenresidenz für gesammelte SQL-Überwachungsdaten vollständig zu kontrollieren, müssen Kunden eine Datenbank auf einem Azure Data Explorer-Cluster als Datenspeicher wählen.

Kunden können die Geografie und Region ihres Azure-Data-Explorer-Clusters an die der überwachten Azure-SQL-Ressourcen anpassen. Wenn sich die Azure SQL-Ressourcen in mehreren Regionen befinden, müssen Kunden möglicherweise mehrere Watcher und mehrere Azure Data Explorer-Cluster erstellen, um ihre Anforderungen an die Datenresidenz zu erfüllen.

Datensätze

In diesem Abschnitt werden die für jeden SQL-Zieltyp verfügbaren Datensätze beschrieben, einschließlich der Erfassungshäufigkeiten und Tabellennamen im Datenspeicher.

Hinweis

Während der Vorschau könnten Datasets hinzukommen oder wegfallen. Die Eigenschaften von Datasets wie Name, Beschreibung, Häufigkeit der Erfassung und verfügbare Spalten können sich noch ändern.

Datasetname Tabellenname Häufigkeit der Erfassung (hh:mm:ss) Beschreibung
Aktive Sitzungen sqldb_database_active_sessions 00:00:30 Jede Zeile stellt eine Sitzung dar, die eine Anforderung ausführt, ein Blocker ist oder eine offene Transaktion hat.
Sicherungsverlauf sqldb_database_sql_backup_history 00:05:00 Jede Zeile stellt eine erfolgreich abgeschlossene Datenbanksicherung dar.
Verarbeitung von Änderungen sqldb_database_change_processing 00:01:00 Jede Zeile stellt eine Momentaufnahme aggregierter Protokollscanstatistiken für ein Feature zur Verarbeitung von Änderungen wie Change Data Capture oder Änderungsfeed (Azure Synapse Link) dar.
Fehler bei der Verarbeitung von Änderungen sqldb_database_change_processing_errors 00:01:00 Jede Zeile stellt einen Fehler dar, der während der Verarbeitung von Änderungen aufgetreten ist, wenn ein Feature zur Verarbeitung von Änderungen wie Change Data Capture oder Änderungsfeed (Azure Synapse Link) eingesetzt wird.
Konnektivität sqldb_database_connectivity 00:00:30 Jede Zeile stellt einen Verbindungstest (eine Anmeldung und eine Abfrage) für eine Datenbank dar.
Georeplikate sqldb_database_geo_replicas 00:00:30 Jede Zeile stellt ein primäres oder sekundäres Georeplikat dar, einschließlich Metadaten und Statistiken zur Georeplikation.
Index-Metadaten sqldb_database_index_metadata 00:30:00 Jede Zeile stellt eine Indexpartition dar und enthält Indexdefinition, Eigenschaften und Betriebsstatistiken.
Arbeitsspeichernutzung sqldb_database_memory_utilization 00:00:30 Jede Zeile stellt einen Speicherclerk dar und enthält den Speicherverbrauch durch den Clerk in der Instanz des Datenbankmoduls.
Fehlende Indizes sqldb_database_missing_indexes 00:15:00 Jede Zeile stellt einen Index dar, der im Fall seiner Erstellung die Abfrageleistung verbessern könnte.
Arbeitsspeichermangel-Ereignisse sqldb_database_oom_events 00:01:00 Jede Zeile stellt ein Ereignis mit unzureichendem Arbeitsspeicher in der Datenbank-Engine dar.
Leistungsindikatoren (allgemein) sqldb_database_performance_counters_common 00:00:10 Jede Zeile stellt einen Leistungsindikator der Instanz der Datenbank-Engine dar. Dieses Dataset enthält häufig verwendete Leistungsindikatoren.
Leistungsindikatoren (detailliert) sqldb_database_performance_counters_detailed 00:01:00 Jede Zeile stellt einen Leistungsindikator der Instanz der Datenbank-Engine dar. Dieses Dataset enthält Leistungsindikatoren, die gegebenenfalls für eine detaillierte Überwachung und Problembehandlung erforderlich sind.
Eigenschaften sqldb_database_properties 00:05:00 Jede Zeile stellt eine Datenbank dar und enthält Datenbankoptionen, Grenzwerte für die Ressourcengovernance und andere Datenbankmetadaten.
Abfragelaufzeitstatistiken sqldb_database_query_runtime_stats 00:15:00 Jede Zeile stellt ein Laufzeitintervall des Abfragespeichers dar und enthält Abfrage-Ausführungsstatistiken.
Abfragewartestatistiken sqldb_database_query_wait_stats 00:15:00 Jede Zeile stellt ein Laufzeitintervall des Abfragespeichers dar und enthält Statistiken zu Wartekategorien.
Replikate sqldb_database_replicas 00:00:30 Jede Zeile stellt ein Datenbankreplikat dar, einschließlich Metadaten und Statistiken zur Replikation. Enthält das primäre Replikat und Georeplikate, wenn sie im primären System erfasst werden, und sekundäre Replikate, wenn sie in einem sekundären System erfasst werden.
Ressourcenverwendung sqldb_database_resource_utilization 00:00:15 Jede Zeile stellt Statistiken zum CPU-, Daten-E/A-, Protokoll-E/A- und sonstigen Ressourcenverbrauch für eine Datenbank in einem Zeitintervall dar.
Sitzungsstatistiken sqldb_database_session_stats 00:01:00 Jede Zeile stellt eine Zusammenfassung der Sitzungsstatistiken für eine Datenbank dar, aggregiert nach nicht-additiven Sitzungsattributen wie Anmeldename, Hostname, Anwendungsname usw.
SOS-Planer sqldb_database_sos_schedulers 00:01:00 Jede Zeile stellt einen SOS-Planer dar und enthält Statistiken für den Planer, den CPU-Knoten und den Arbeitsspeicherknoten.
Speicher-E/A sqldb_database_storage_io 00:00:10 Jede Zeile stellt eine Datenbankdatei dar und enthält kumulative Statistiken zu IOPS, Durchsatz und Wartezeit für die Datei.
Speichernutzung sqldb_database_storage_utilization 00:01:00 Jede Zeile stellt eine Datenbank dar und enthält ihre Speichernutzung, einschließlich tempdb, Abfragespeicher und permanentem Versionsspeicher.
Tabellenmetadaten sqldb_database_table_metadata 00:30:00 Jede Zeile stellt eine Tabelle oder eine indizierte Sicht dar und enthält Metadaten wie Zeilenanzahl, Platzbedarf, Datenkomprimierung, Spalten und Einschränkungen. Wird erfasst, wenn die Anzahl der Tabellen und indizierten Ansichten in der Datenbank 100 oder weniger beträgt.
Wartestatistiken sqldb_database_wait_stats 00:00:10 Jede Zeile stellt einen Wartetyp dar und enthält kumulative Wartezeitstatistiken der Instanz der Datenbank-Engine. Bei Datenbanken in einem Pool für elastische Datenbanken werden nur datenbankbezogene Wartezeitstatistiken erfasst.

Hinweis

Bei Datenbanken in einem Pool für elastische Datenbanken werden die SQL-Datenbank-Datasets, die Daten auf Poolebene enthalten, nicht erfasst. Dazu gehören die Datasets für Arbeitsspeichernutzung, Ereignisse mit unzureichendem Arbeitsspeicher, Leistungsindikatoren (allgemein) und Leistungsindikatoren (detailliert). Das Dataset für die Wartezeitstatistik wird erfasst, enthält jedoch nur datenbankbezogene Wartezeiten. Dadurch wird vermieden, dass von jeder Datenbank im Pool die gleichen Daten erfasst werden.

Daten auf Poolebene werden in den Datasets für den Pool für elastische SQL-Datenbanken erfasst. Für einen bestimmten Pool für elastische Datenbanken enthalten die Datasets für Leistungsindikatoren (allgemein) und Leistungsindikatoren (detailliert) Metriken auf Poolebene und gewisse Metriken auf Datenbankebene, wie CPU, Daten-E/A, Protokollschreibvorgänge, Anforderungen, Transaktionen usw.

Allgemeine Spalten

für jeden SQL-Zieltyp haben die Datensätze gemeinsame Spalten, wie in den folgenden Tabellen beschrieben.

Spaltenname Beschreibung
subscription_id Die Azure-Abonnement-ID der SQL-Datenbank.
resource_group_name Der Name der Ressourcengruppe der SQL-Datenbank.
resource_id Die Azure-Ressource-ID der SQL-Datenbank.
sample_time_utc Die Zeit, zu der die Werte in der Zeile beobachtet wurden, in UTC.
collection_time_utc Die Zeit, zu der die Zeile vom Watcher erfasst wurde, in UTC. Diese Spalte ist in Datasets vorhanden, bei denen die Erfassungszeit von der Probenzeit abweichen kann.
replica_type Eine der folgenden Optionen: Primär, Hochverfügbarkeit sekundär, Geo-Replikationsweiterleitung, Benannt sekundär.
logical_server_name Der Name des logischen Servers in Azure SQL-Datenbank, der die überwachte Datenbank oder den Pool für elastische Datenbanken enthält.
database_name Der Name der überwachten Datenbank.
database_id Datenbank-ID der überwachten Datenbank, eindeutig innerhalb des logischen Servers.
logical_database_id Ein eindeutiger Datenbankbezeichner, der während der Lebensdauer der Benutzerdatenbank unverändert bleibt. Die Umbenennung der Datenbank oder die Änderung ihres Serviceziels ändert diesen Wert nicht.
physical_database_id Ein eindeutiger Datenbankbezeichner für die aktuelle physische Datenbank, die der Benutzerdatenbank entspricht. Durch Ändern des Serviceobjekts der Datenbank ändert sich dieser Wert.
replica_id Ein eindeutiger Bezeichner für ein Hyperscale-Compute-Replikat.

Ein Dataset hat sowohl die Spalte sample_time_utc als auch collection_time_utc, wenn es Proben enthält, die vor der Erfassung der Zeile durch den Datenbankwatcher beobachtet wurden. Ansonsten sind Beobachtungszeit und Erfassungszeit gleich, und das Dataset enthält nur die Spalte sample_time_utc.

Beispielsweise wird das Dataset sqldb_database_resource_utilization aus der dynamischen Verwaltungssicht (DMV) sys.dm_db_resource_stats abgeleitet. Die DMV enthält die Spalte end_time, bei der es sich um die Beobachtungszeit für jede Zeile handelt, die aggregierte Ressourcenstatistiken für ein Intervall von 15-Sekunden angibt. Diese Zeit wird in der Spalte sample_time_utc angegeben. Wenn ein Watcher diese DMV abfragt, enthält das Resultset möglicherweise mehrere Zeilen, jeweils mit einem anderen end_time-Wert. Alle diese Zeilen haben denselben Wert collection_time_utc.