Surveillance du processus de capture de données modifiées
La surveillance du processus de capture de données modifiées vous permet de déterminer si les modifications sont écrites correctement et avec une latence raisonnable aux tables de modifications. La surveillance peut également vous aider à identifier les erreurs qui peuvent se produire. SQL Server inclut deux vues de gestion dynamique pour vous aider à surveiller la capture de données modifiées :
-
La vue de gestion sys.dm_cdc_log_scan_sessions contient une ligne pour chaque session d'analyse du journal dans la base de données actuelle. La dernière ligne représente la session active. La vue contient également une ligne avec un ID de session de 0, qui a des informations globales relatives à toutes les sessions depuis le dernier démarrage de l'instance de SQL Server.
-
La vue de gestion sys.dm_cdc_errors contient une ligne pour chaque erreur rencontrée au cours de la session d'analyse du journal de capture de données modifiées.
Identification de sessions avec des jeux de résultats vides
Chaque ligne dans sys.dm_cdc_log_scan_sessions représente une session d'analyse du journal (sauf la ligne avec un ID de 0). Une session d'analyse du journal est équivalente à une exécution de sp_cdc_scan. Pendant une session, l'analyse peut retourner des modifications ou un résultat vide. Si le jeu de résultats est vide, la colonne empty_scan_count dans sys.dm_cdc_log_scan_sessions est définie sur 1. S'il existe des jeux de résultats vides consécutifs, par exemple si le travail de capture s'exécute continuellement, empty_scan_count dans la dernière ligne existante est incrémenté. Ainsi, si sys.dm_cdc_log_scan_sessions contient déjà 10 lignes pour les analyses qui ont retourné des modifications et qu'il existe cinq résultats vides dans une ligne, la vue contient 11 lignes. La dernière ligne a une valeur de 5 dans la colonne empty_scan_count. Pour déterminer les sessions qui avaient une analyse vide, exécutez la requête suivante :
SELECT * from sys.dm_cdc_log_scan_sessions where empty_scan_count <> 0
Détermination de la latence
La vue de gestion sys.dm_cdc_log_scan_sessions inclut une colonne qui enregistre la latence pour chaque session de capture. La latence correspond au temps écoulé entre la validation d'une transaction sur une table source et la dernière transaction capturée en cours de validation sur la table de modifications. La colonne de latence est remplie uniquement pour les sessions actives. Pour les sessions ayant une valeur supérieure à 0 dans la colonne empty_scan_count, la colonne de latence a la valeur 0. La requête suivante retourne la latence moyenne pour les sessions les plus récentes :
SELECT latency FROM sys.dm_cdc_log_scan_sessions WHERE session_id = 0
Vous pouvez utiliser des données de latence pour déterminer si le processus de capture traite les transactions rapidement ou lentement. Ces données sont très utiles lorsque le processus de capture s'exécute continuellement. Si le processus de capture s'exécute selon une planification, la latence peut être élevée à cause du décalage entre les transactions qui sont validées sur la table source et le processus de capture qui s'exécute à l'heure planifiée.
Une autre mesure importante du rendement du processus de la capture est le débit. Il s'agit du nombre moyen de commandes par seconde qui sont traitées pendant chaque session. Pour déterminer le débit d'une session, divisez la valeur dans la colonne command_count par la valeur dans la colonne de durée. La requête suivante retourne le débit moyen pour les sessions les plus récentes :
SELECT command_count/duration AS [Throughput] FROM sys.dm_cdc_log_scan_sessions WHERE session_id = 0
Utilisation du collecteur de données pour recueillir des données d'échantillonnage
Le collecteur de données SQL Server vous permet de collecter des captures instantanées des données à partir de n'importe quelle table ou vue de gestion dynamique et de construire un entrepôt de données des performance. Lorsque la capture de données modifiées est activée sur une base de données, il est utile de prendre des captures instantanées de la vue sys.dm_cdc_log_scan_sessions et de la vue sys.dm_cdc_errors à intervalles réguliers à des fins d'analyse ultérieure. La procédure suivante installe un collecteur de données pour recueillir les exemples de données de la vue de gestion sys.dm_cdc_log_scan_sessions.
Configuration de la collecte de données
Activez un collecteur de données et configurez un entrepôt de données de gestion. Pour plus d'informations, consultez Gestion de la collecte de données à l'aide de SQL Server Management Studio.
Exécutez le code suivant pour créer un collecteur personnalisé destiné à la capture de données modifiées.
USE msdb; DECLARE @schedule_uid uniqueidentifier; -- Collect and upload data every 5 minutes SELECT @schedule_uid = ( SELECT schedule_uid from sysschedules_localserver_view WHERE name = N'CollectorSchedule_Every_5min') DECLARE @collection_set_id int; EXEC dbo.sp_syscollector_create_collection_set @name = N' CDC Performance Data Collector', @schedule_uid = @schedule_uid, @collection_mode = 0, @days_until_expiration = 30, @description = N'This collection set collects CDC metadata', @collection_set_id = @collection_set_id output; -- Create a collection item using statistics from -- the change data capture dynamic management view. DECLARE @paramters xml; DECLARE @collection_item_id int; SELECT @paramters = CONVERT(xml, N'<TSQLQueryCollector> <Query> <Value>SELECT * FROM sys.dm_cdc_log_scan_sessions</Value> <OutputTable>cdc_log_scan_data</OutputTable> </Query> </TSQLQueryCollector>'); EXEC dbo.sp_syscollector_create_collection_item @collection_set_id = @collection_set_id, @collector_type_uid = N'302E93D1-3424-4BE7-AA8E-84813ECF2419', @name = ' CDC Performance Data Collector', @frequency = 5, @parameters = @paramters, @collection_item_id = @collection_item_id output; GO
Dans SQL Server Management Studio, développez Gestion, puis développez Collecte de données. Cliquez avec le bouton droit sur Collecteur de données de performance de capture de données modifiées, puis cliquez sur Démarrer le jeu d'éléments de collecte de données.
Dans l'entrepôt de données que vous avez configuré à l'étape 1, recherchez la table custom_snapshots.cdc_log_scan_data. Cette table fournit une capture instantanée historique de données de sessions d'analyse du journal. Ces données peuvent être utilisées pour analyser la latence, le débit et d'autres mesures de la performance sur la durée.