Partage via


Collection de données et jeux de données de l’observateur de base de données (aperçu)

S’applique à : Azure SQL DatabaseAzure SQL Managed Instance

L’observateur de base de données collecte les données de surveillance à partir des vues système SQL et les ingère dans le magasin de données sous la forme de jeux de données. Chaque jeu de données est formé à l’aide des données d’une ou plusieurs vues système SQL. Pour chaque jeu de données, il existe une table distincte dans le magasin de données.

Collection de données

L’observateur de base de données collecte des données de surveillance à intervalles réguliers à l’aide de requêtes T-SQL. Les données collectées lors de chaque exécution d’une requête sont appelées échantillon. La fréquence de collecte d’échantillon varie selon le jeu de données. Par exemple, les données qui changent fréquemment, telles que les compteurs de performance SQL, peuvent être collectées toutes les 10 secondes, tandis que les données statiques, telles que la configuration de la base de données, peuvent être collectées toutes les cinq minutes. Pour plus d’informations, consultez Jeux de données.

L’observateur de base de données tire parti de l’ingestion en streaming dans Azure Data Explorer et l’Analyse en temps réel dans Microsoft Fabric pour fournir une surveillance en quasi-temps réel. En règle générale, les données de surveillance SQL collectées sont disponibles pour la génération de rapports et l’analyse en moins de 10 secondes. Vous pouvez surveiller la latence d’ingestion des données sur les tableaux de bord de l’observateur de base de données, à l’aide du lien des statistiques d’ingestion.

Interaction entre l’observateur de base de données et les charges de travail d’application

L’activation de l’observateur de base de données n’a probablement pas d’impact observable sur les charges de travail d’application. Les requêtes de surveillance les plus fréquentes s’exécutent généralement en dessous de la seconde, tandis que les requêtes qui pourraient nécessiter plus de temps, par exemple pour renvoyer des jeux de données volumineux, s’exécutent à des intervalles peu fréquents.

Pour réduire davantage le risque d’impact sur les charges de travail d’application, toutes les requêtes de l’observateur de base de données dans Azure SQL Database sont régies par les ressources en tant que charge de travail interne. En cas de conflit de ressources, la consommation de ressources par les requêtes de surveillance est limitée à une petite fraction des ressources totales disponibles pour une base de données ou un pool élastique. Cela hiérarchise les charges de travail d’application par rapport aux requêtes de surveillance.

Dans Azure SQL Managed Instance, vous pouvez permettre à Resource Governor de gérer la consommation des ressources par les requêtes de surveillance de la même manière, si nécessaire.

L’exemple suivant configure Resource Governor sur une instance managée SQL. Cette configuration limite la consommation de l’UC par les requêtes de l’observateur de la base de données à 30 % lorsqu’il n’y a pas de conflit avec le processeur. En cas de conflit de processeur, elle réserve 5 % de l’UC pour les requêtes de surveillance et limite leur utilisation de l’UC à 10 %. Elle limite également la taille d’allocation de mémoire pour chaque requête de surveillance à 10 % de la mémoire disponible.

USE master;
GO

CREATE OR ALTER FUNCTION dbo.dbw_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN

DECLARE @WorkloadGroupName sysname = 'default';

IF APP_NAME() IN (N'SQLExternalMonitoring',N'x_ms_reserved_sql_external_monitoring')
    SET @WorkloadGroupName = N'database_watcher_workload_group'

RETURN @WorkloadGroupName;

END;
GO

BEGIN TRY

IF EXISTS (
          SELECT 1
          FROM sys.resource_governor_configuration
          WHERE classifier_function_id <> 0 OR is_enabled <> 0
          )
    THROW 50001, 'Resource Governor is already configured. No changes were made.', 1;

CREATE RESOURCE POOL database_watcher_resource_pool
WITH (MIN_CPU_PERCENT = 5, MAX_CPU_PERCENT = 10, CAP_CPU_PERCENT = 30);

CREATE WORKLOAD GROUP database_watcher_workload_group
WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 10)
USING database_watcher_resource_pool;

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.dbw_classifier);

ALTER RESOURCE GOVERNOR RECONFIGURE;

END TRY
BEGIN CATCH
    THROW;
END CATCH;

Remarque

Pour rendre la configuration Resource Governor immédiatement effective sur un réplica secondaire haute disponibilité d’une instance managée SQL, connectez-vous au réplica et exécutez ALTER RESOURCE GOVERNOR RECONFIGURE;.

Pour éviter les conflits de concurrence tels que blocage et interblocages entre les charges de travail de collection de données et de base de données s’exécutant sur vos ressources Azure SQL, les requêtes de surveillance utilisent des dépassements de délai d’attente de verrou courts et une faible priorité d’interblocage. S’il existe un conflit d’accès concurrentiel, la priorité est donnée aux requêtes de charge de travail d’application. Selon les modèles de charge de travail d’application, cela peut entraîner des lacunes occasionnelles dans les données collectées pour certains jeux de données.

Collection de données dans des pools élastiques

Pour surveiller un pool élastique, vous devez désigner une base de données dans le pool comme base de données d’ancrage. L’observateur de base de données se connecte à la base de données d’ancrage. Étant donné que l’observateur détient l’autorisation VIEW SERVER PERFORMANCE STATE, les vues système de la base de données d’ancrage fournissent des données de surveillance pour le pool dans son ensemble.

Conseil

Vous pouvez ajouter une base de données vide à chaque pool élastique que vous souhaitez surveiller et la désigner comme base de données d’ancrage. De cette façon, vous pouvez déplacer d’autres bases de données dans et hors du pool, ou entre des pools, sans interrompre la surveillance du pool élastique.

Les données collectées à partir de la base de données d’ancrage contiennent des métriques au niveau du pool et certaines métriques de performances au niveau de la base de données pour chaque base de données du pool. Par exemple, cela inclut l’utilisation des ressources et les métriques de taux de requête pour chaque base de données. Dans certains cas, la surveillance d’un pool élastique dans son ensemble rend inutile la surveillance de chaque base de données du pool.

Certaines données de surveillance, telles que l’utilisation de l’UC, de la mémoire et du stockage au niveau du pool, ainsi que les statistiques d’attente ne sont collectées qu’au niveau du pool élastique, car elles ne peuvent pas être attribuées à une base de données individuelle dans un pool. Inversement, certaines autres données telles que les statistiques d’exécution des requêtes, les propriétés de la base de données, les métadonnées des tables et des index ne sont disponibles qu’au niveau de la base de données.

Si vous ajoutez des bases de données individuelles d’un pool élastique en tant que cibles de l’observateur de base de données, vous devez également ajouter le pool élastique en tant que cible. De cette façon, vous obtenez une vue plus complète des performances de la base de données et du pool.

Surveiller des pools élastiques denses

Un pool élastique dense contient un grand nombre de bases de données, mais a une taille de calcul relativement faible. Cette configuration permet aux clients de réaliser des économies substantielles en réduisant au minimum l’allocation des ressources de calcul, en partant du principe que seul un petit nombre de bases de données du pool sont actives en même temps.

Les ressources de calcul disponibles pour les requêtes de l’observateur de base de données dans un pool élastique dense sont encore plus limitées pour éviter d’affecter les requêtes de l’application. En raison de cela, l’observateur de base de données peut ne pas être en mesure de collecter des données de surveillance à partir de chaque base de données dans un pool élastique dense.

Conseil

Pour surveiller un pool élastique dense, activez la surveillance au niveau du pool en ajoutant le pool élastique en tant que cible.

Il n’est pas recommandé de surveiller plus de quelques bases de données individuelles dans un pool élastique dense. Il se peut que vous constatiez des lacunes dans les données collectées ou des intervalles plus importants que prévu entre les échantillons de données, en raison de l’insuffisance des ressources de calcul disponibles pour les requêtes de l’observateur de base de données.

Groupes de données

Cette section décrit les jeux de données disponibles pour chaque type cible, y compris les fréquences de collecte et les noms de tables dans le magasin de données.

Remarque

Pendant la phase d’aperçu, les jeux de données peuvent être ajoutés et supprimés. Les propriétés du jeu de données telles que le nom, la description, la fréquence de collecte et les colonnes disponibles sont susceptibles de changer.

Nom du jeu de données Nom de table Fréquence de collecte (hh:mm:ss) Description
Sessions actives sqldb_database_active_sessions 00:00:30 Chaque ligne représente une session qui exécute une requête, qui est bloquante ou qui a une transaction ouverte.
Historique de sauvegarde sqldb_database_sql_backup_history 00:05:00 Chaque ligne représente une sauvegarde de base de données terminée.
Traitement des modifications sqldb_database_change_processing 00:01:00 Chaque ligne représente un instantané des statistiques d’analyse de journal agrégées pour une fonctionnalité de traitement des modifications, telle que la capture des changements de données ou le flux de modification (Azure Synapse Link).
Erreurs de traitement des modifications sqldb_database_change_processing_errors 00:01:00 Chaque ligne représente une erreur qui s’est produite pendant le traitement des modifications, lors de l’utilisation d’une fonctionnalité de traitement des modifications, telle que la capture des changements de données ou le flux de modification (Azure Synapse Link).
Connectivité sqldb_database_connectivity 00:00:30 Chaque ligne représente une sonde de connectivité (une connexion et une requête) pour une base de données.
Géoréplicas sqldb_database_geo_replicas 00:00:30 Chaque ligne représente un géoréplica principal ou secondaire, y compris les métadonnées et les statistiques de géoréplication.
Métadonnées d’index sqldb_database_index_metadata 00:30:00 Chaque ligne représente une partition d’index et inclut la définition d’index, les propriétés et les statistiques opérationnelles.
Utilisation de la mémoire sqldb_database_memory_utilization 00:00:10 Chaque ligne représente un régisseur de mémoire et inclut la consommation de mémoire par le régisseur sur l’instance du moteur de base de données.
Index manquants sqldb_database_missing_indexes 00:15:00 Chaque ligne représente un index dont la création est susceptible d’améliorer les performances de la requête.
Événements de mémoire insuffisante sqldb_database_oom_events 00:01:00 Chaque ligne représente un événement mémoire insuffisante dans le moteur de base de données.
Compteurs de performances (courants) sqldb_database_performance_counters_common 00:00:10 Chaque ligne représente un compteur de performances de l’instance du moteur de base de données. Ce jeu de données inclut des compteurs couramment utilisés.
Compteurs de performances (détaillés) sqldb_database_performance_counters_detailed 00:01:00 Chaque ligne représente un compteur de performances de l’instance du moteur de base de données. Ce jeu de données inclut des compteurs qui peuvent être nécessaires pour une surveillance et une résolution des problèmes détaillées.
Propriétés sqldb_database_properties 00:05:00 Chaque ligne représente une base de données et inclut des options de base de données, des limites de gouvernance des ressources et d’autres métadonnées de base de données.
Statistiques d’exécution des requêtes sqldb_database_query_runtime_stats 00:15:00 Chaque ligne représente un intervalle d’exécution du Magasin des requêtes et inclut des statistiques d’exécution de requête.
Statistiques d’attente des requêtes sqldb_database_query_wait_stats 00:15:00 Chaque ligne représente un intervalle d’exécution du Magasin des requêtes et inclut des statistiques de catégorie d’attente.
Réplicas sqldb_database_replicas 00:00:10 Chaque ligne représente un réplica de base de données, y compris les métadonnées de réplication et les statistiques. Inclut le réplica principal et les géoréplicas lorsqu’ils sont collectés sur le réplica principal et les réplicas secondaires lorsqu’ils sont collectés sur un réplica secondaire.
Utilisation des ressources sqldb_database_resource_utilization 00:00:15 Chaque ligne représente les statistiques de consommation de l’UC, des E/S de données, des E/S de journal et d’autres ressources pour une base de données dans un intervalle de temps.
Statistiques de session sqldb_database_session_stats 00:01:00 Chaque ligne représente un résumé des statistiques de session pour une base de données, agrégées par des attributs de session non additifs tels que le nom de connexion, le nom d’hôte, le nom d’application, etc.
Planificateurs SOS sqldb_database_sos_schedulers 00:01:00 Chaque ligne représente un planificateur SOS et inclut des statistiques pour le planificateur, le nœud de processeur et le nœud de mémoire.
E/S de stockage sqldb_database_storage_io 00:00:10 Chaque ligne représente un fichier de base de données et inclut des statistiques cumulatives d’IOPS, de débit et de latence pour le fichier.
Utilisation du stockage sqldb_database_storage_utilization 00:01:00 Chaque ligne représente une base de données et inclut son utilisation du stockage, notamment tempdb, le Magasin des requêtes et le magasin de versions persistantes.
Métadonnées de table sqldb_database_table_metadata 00:30:00 Chaque ligne représente une table ou une vue indexée et inclut des métadonnées telles que le nombre de lignes, l’utilisation de l’espace, la compression des données, les colonnes et les contraintes.
Statistiques d’attente sqldb_database_wait_stats 00:00:10 Chaque ligne représente un type d’attente et inclut des statistiques d’attente cumulatives de l’instance du moteur de base de données. Pour les bases de données d’un pool élastique, seules les statistiques d’attente limitées à l’étendue de la base de données sont collectées.

Remarque

Pour les bases de données d’un pool élastique, les jeux de données SQL Database contenant des données au niveau du pool ne sont pas collectés. Cela inclut les jeux de données Utilisation de la mémoire, Événements de mémoire insuffisante, Compteurs de performances (courants) et Compteurs de performances (détaillés). Le jeu de données Statistiques d’attente est collecté, mais ne contient que des attentes limitées à l’étendue de la base de données. Cela permet d’éviter de collecter les mêmes données depuis chaque base de données du groupe.

Les données au niveau du pool sont collectées dans les jeux de données Pool élastique SQL. Pour un pool élastique donné, les jeux de données Compteurs de performance (communs) et Compteurs de performance (détaillés) contiennent des métriques au niveau du pool et certaines métriques au niveau de la base de données, telles que UC, E/S de données, écriture de journal, requêtes, transactions, etc.

Colonnes courantes

Pour chaque type cible, les jeux de données ont des colonnes communes, comme décrit dans les tableaux suivants.

Nom de colonne Description
sample_time_utc Heure à laquelle les valeurs de la ligne ont été observées, au format UTC.
collection_time_utc Heure à laquelle la ligne a été collectée par l’observateur, au format UTC. Cette colonne est présente dans les jeux de données où l’heure de collecte peut être différente de l’heure de l’échantillon.
replica_type L’un des éléments suivants : primaire, secondaire HA, redirecteur de géoréplication, secondaire nommé.
logical_server_name Nom du serveur logique dans Azure SQL Database contenant la base de données ou le pool élastique surveillé.
database_name Nom de la base de données surveilllée.
database_id ID de la base de données surveillée, unique au sein du serveur logique.
logical_database_id Un identificateur de base de données unique qui reste inchangé pendant la durée de vie de la base de données utilisateur. Le changement de nom de la base de données ou la modification de son objectif de service ne modifient pas cette valeur.
physical_database_id Un identificateur de base de données unique pour la base de données physique actuelle correspondant à la base de données utilisateur. Le changement de l’objectif du service de base de données entraîne la modification de cette valeur.
replica_id Un identificateur unique d’un réplica de calcul Hyperscale.

Un jeu de données comporte à la fois des colonnes sample_time_utc et collection_time_utc s’il contient des échantillons observés avant la collecte de la ligne par l’observateur de base de données. Sinon, le temps d’observation et l’heure de collecte sont identiques, et le jeu de données ne contient que la colonne sample_time_utc.

Par exemple, le jeu de données sqldb_database_resource_utilization est dérivé de la vue de gestion dynamique (DMV) sys.dm_db_resource_stats. La DMV contient la colonne end_time, qui correspond au temps d’observation de chaque ligne signalant les statistiques de ressources agrégées pour un intervalle de 15 secondes. Cette fois-ci est signalée dans la colonne sample_time_utc. Lorsque l’observateur de base de données interroge cette DMV, le jeu de résultats peut contenir plusieurs lignes, chacune avec une valeur end_time différente. Toutes ces lignes ont la même valeur collection_time_utc.