Résolution des problèmes du collecteur de données

Cette rubrique traite des catégories suivantes de problèmes :

  • Conditions d'erreur. Cette catégorie couvre le modèle d'objet et les erreurs au moment de l'exécution.

  • Problèmes de performances. Cette catégorie couvre les scénarios de performances généraux et spécifiques.

  • Blocages du système. Cette catégorie couvre les blocages des sous-composants au cours de la collecte des données.

Conditions d'erreur

Des erreurs peuvent être déclenchées à partir du modèle d'objet ou au moment de l'exécution.

Erreurs liées au modèle d'objet

Le modèle d'objet du collecteur de données est une API managée qui fournit un moyen de gérer par programme les propriétés et jeux d'éléments de collecte de données du collecteur de données. Le modèle d'objet constitue une fine couche qui enveloppe un jeu de procédures stockées et de vues qui fournissent un mécanisme de configuration pour le collecteur de données. Pour plus d'informations, consultez Programmation du collecteur de données.

Les erreurs liées au modèle d'objet peuvent provenir de l'un des composants suivants du modèle d'objet :

  • Une erreur Transact-SQL est déclenchée à partir d'une procédure stockée ou du code Transact-SQL appelé à partir de l'une des procédures stockées du collecteur de données.

  • Une erreur Transact-SQL est déclenchée directement à partir d'une procédure stockée du collecteur de données.

  • Une exception managée est levée directement à partir du modèle d'objet.

Le tableau ci-dessous décrit les erreurs qui peuvent être déclenchées à partir du modèle d'objet.

Message d'erreur

Numéro d'erreur

Description

Impossible de mettre à jour name, target, proxy_id ou collection_mode du jeu d'éléments de collecte actif '%s'. Arrêtez le jeu d'éléments de collecte, puis réessayez de le mettre à jour.

14669

Tentative de mise à jour d'un jeu d'éléments de collecte actif. Un jeu d'éléments de collecte doit être arrêté avant que toute mise à jour de ce type puisse être effectuée. Seule la planification des téléchargements peut être modifiée lorsque le jeu d'éléments de collecte est actif.

Impossible de supprimer le jeu d'éléments de collecte actif '%s'. Arrêtez le jeu d'éléments de collecte, puis réessayez de le supprimer.

14670

Tentative de suppression d'un jeu d'éléments de collecte en cours d'exécution.

Impossible de mettre à jour le nom ou les paramètres de l'élément de collecte '%s' dans le jeu d'éléments de collecte actif '%s'. Arrêtez le jeu d'éléments de collecte, puis réessayez de mettre à jour l'élément de collecte.

14671

Tentative de mise à jour d'un élément de collecte dans un jeu d'éléments de collecte en cours d'exécution.

Impossible de supprimer l'élément de collecte '%s' dans le jeu d'éléments de collecte actif '%s'. Arrêtez le jeu d'éléments de collecte, puis réessayez de supprimer l'élément de collecte.

14672

Tentative de suppression d'un élément de collecte dans un jeu d'éléments de collecte en cours d'exécution.

Impossible de supprimer le type de collecteur '%s'. Supprimez tous les éléments de collecte associés à ce type de collecteur, puis réessayez de le supprimer.

14673

Tentative de suppression d'un type de collecteur qui a des éléments de collecte qui lui sont associés.

Impossible de télécharger les données pour le jeu d'éléments de collecte inactif '%s'. Démarrez le jeu d'éléments de collecte, puis réessayez de télécharger les données.

14674

Tentative de téléchargement de données collectées par un jeu d'éléments de collecte qui n'est pas en cours d'exécution.

Impossible de mettre à jour name, target, proxy_id, logging_level ou collection_mode, ou d'ajouter un élément de collecte au jeu d'éléments de collecte actif '%s'. Arrêtez le jeu d'éléments de collecte, puis réessayez de le mettre à jour.

14675

Tentative de mise à jour d'un jeu d'éléments de collecte en cours d'exécution.

L'utilisateur n'est pas autorisé à modifier '%s'. L'utilisateur doit être membre du rôle de collecteur de données '%s'.

14676

L'utilisateur a essayé de mettre à jour une propriété qui peut être modifiée uniquement par un rôle de collecteur de données spécifique.

L'utilisateur n'est pas autorisé à effectuer cette opération. L'utilisateur doit être membre du rôle de collecteur de données '%s'.

14677

L'utilisateur a essayé d'effectuer une opération alors qu'il ne fait pas partie du rôle de collecteur de données requis.

La trace SQL Server avec l'ID %d a été arrêtée et fermée par un utilisateur externe. Le collecteur de traces SQL Server va tenter de recréer la trace.

14678

Une trace qui a été créée et utilisée par le collecteur de données a été arrêtée et fermée en dehors de l'exécution du collecteur.

Le %s (%s) spécifié n'est pas valide dans cet entrepôt de données.

14679

Un paramètre transmis à l'une des procédures stockées dans l'entrepôt de données de gestion a une valeur qui ne correspond pas aux autres entrées dans l'entrepôt.

Cette version de instmdw.sql ne doit être exécutée que sur un serveur SQL Server 2005 ou version ultérieure.

14680

Tentative d'installer un entrepôt de données de gestion sur un serveur qui exécute SQL Server 2000 ou une version antérieure.

Impossible d'effectuer cette procédure lorsque le collecteur est désactivé. Activez le collecteur, puis réessayez.

14681

Tentative d'exécution d'une opération en conflit avec l'état du collecteur.

L'état du jeu d'éléments de collecte a changé mais ce dernier ne démarrera ou ne s'arrêtera que lorsque le collecteur sera activé.

14682

Tentative de démarrer ou d'arrêter le jeu d'éléments de collecte lorsque le collecteur n'est pas activé.

Un jeu d'éléments de collecte en mode capture instantanée ou en mode continu requiert une planification.

14683

Créez ou mettez à jour un jeu d'éléments de collecte en mode capture instantanée ou en mode continu sans fournir de planification.

Interception de l'erreur n° : %d, niveau : %d, état : %d, dans la procédure : %s, ligne : %d, avec le message : %s

14684

Une erreur générique s'est produite dans le composant du collecteur de données ; l'erreur a été interceptée dans un bloc catch et levée de nouveau.

Opération non valide. L'état du jeu d'éléments de collecte avec l'ID = %d est actuellement Non exécuté.

14685

Appel à sp_syscollector_create_set_queue_and_service pour un jeu avec un état is_running de 0.

Les paramètres MDWInstance et MDWDatabase du magasin de configurations ne peuvent pas être Null.

14686

Une chaîne de connexion à l'entrepôt de données de gestion est Null pour les paramètres MDWInstance ou MDWDatabase.

Valeur non valide (%d) du paramètre @cache_window. Les valeurs autorisées sont : -1 (mise en cache de toutes les données téléchargées depuis les précédents échecs de téléchargement), 0 (aucune mise en cache des données téléchargées), N (mise en cache des données depuis les N précédents échecs de téléchargement, où N >= 1)

14687

Une tentative a été effectuée pour définir la valeur du paramètre CacheWindow du magasin de configurations du collecteur sur une valeur inférieure à -1.

Un jeu d'éléments de collecte ne peut pas démarrer lorsque l'Agent SQL Server est arrêté. Démarrez l'Agent SQL Server.

14688

Tentative de démarrage d'un jeu d'éléments de collecte lorsque l'Agent SQL Server n'est pas activé.

Un jeu d'éléments de collecte ne peut pas démarrer si l'entrepôt de données de gestion n'est pas configuré. Exécutez le script instmdw.sql pour créer et configurer l'entrepôt de données de gestion.

14689

Tentative de démarrage d'un jeu d'éléments de collecte lorsque l'entrepôt de données de gestion n'est pas installé.

Impossible d'effectuer cette procédure lorsque le collecteur est activé. Désactivez le collecteur, puis réessayez.

14690

Tentative d'exécution d'une opération en conflit avec l'état du collecteur.

L'état du collecteur ne peut pas être Null. Cela peut indiquer une altération interne des données de configuration du collecteur.

14691

Un appel à sp_syscollector_verify_collector_state a détecté le paramètre CollectorEnabled avec une valeur Null. Cela peut indiquer une altération interne des données de configuration du collecteur.

Erreurs au moment de l'exécution

Des erreurs d'exécution peuvent se produire lorsqu'un package de collecte ou un package de téléchargement s'exécute et rencontre un problème. Les erreurs peuvent provenir de l'un des composants suivants :

  • Flux de données d'un package SQL Server 2008 Integration Services (SSIS). Ces erreurs peuvent résulter de l'échec d'une conversion de données ou d'une troncation de données. Le collecteur de données enregistre le nombre de lignes affectées par l'erreur et insère ce nombre dans les tables du journal du collecteur de données.

  • Flux de contrôle d'un package SSIS. Ces erreurs sont enregistrées dans les tables du journal SSIS dans la base de données msdb (msdb.dbo.sysssislog) et sont propagées jusqu'aux tables du journal du collecteur de données.

  • Composant d'exécution du collecteur de données (dcexec.exe). Ces erreurs sont entrées directement dans les tables du journal du collecteur de données.

Pour plus d'informations, consultez Journalisation du collecteur de données.

Nous vous recommandons l'une des méthodes ci-dessous pour obtenir des informations d'état sur les erreurs d'exécution.

Procédures stockées et vues Transact-SQL

Pour consulter l'état de tous les jeux et packages de collecte en cours d'exécution ou finis, exécutez la requête suivante :

use msdb
select * from syscollector_execution_log_full

La requête précédente retourne le jeu de résultats suivant :

Nom de la colonne

Description

log_id

Un ID unique pour l'exécution de chaque jeu d'éléments de collecte. Il permet de joindre cette vue à d'autres journaux détaillés.

parent_log_id

L'ID du package parent ou du jeu d'éléments de collecte. Il a la valeur NULL pour le jeu d'éléments de collecte. Les ID sont chaînés dans une relation parent-enfant pour permettre d'identifier aisément quel jeu d'éléments de collecte a démarré quel package. En outre, cette vue groupe les entrées de journal par leur chaînage parent-enfant et met en retrait les noms des packages, afin que la chaîne d'appel soit clairement visible.

name

Nom du jeu d'éléments de collecte ou du package que cette entrée de journal représente.

collection_mode

Activité du jeu d'éléments de collecte lorsque l'entrée a été effectuée, collecte ou téléchargement.

start_time

Instant où le jeu d'éléments de collecte ou le package a été démarré.

last_iteration_time

Pour des packages exécutés en permanence, dernière fois où le package a effectué une capture instantanée.

finish_time

Pour des packages et des jeux d'éléments de collecte terminés, instant où l'exécution s'est terminée.

duration

Durée d'exécution, en millisecondes, du package ou du jeu d'éléments de collecte.

operator

Opérateur qui a démarré le jeu d'éléments de collecte ou le package.

status

État du jeu d'éléments de collecte ou du package. Ce sera :

  • 0 – exécution

  • 1 – terminé

  • 2 – échec

failure_task

Si le jeu d'éléments de collecte ou le package a échoué, nom de la tâche dans le package SSIS à l'origine de l'échec.

package_execution_id

Lien à la table du journal SSIS.

collection_set_id

Lien à la table de configuration du collecteur de données.

RemarqueRemarque
Vous pouvez utiliser collection_set_id comme un filtre pour mettre l'accent sur un jeu d'éléments de collecte spécifique dans le journal.

Pour plus d'informations, consultez syscollector_execution_log_full (Transact-SQL).

Vous pouvez obtenir des informations supplémentaires sur l'exécution du jeu d'éléments de collecte et du package en exécutant l'une des fonctions fournies par le collecteur de données.

La fonction ci-dessous retourne des statistiques détaillées sur le jeu d'éléments de collecte ou le package, y compris le nombre de lignes d'erreur enregistrées par le package.

select * from fn_syscollector_get_execution_stats(@log_id)

La fonction suivante retourne une partie du journal SSIS (sysdtslog90) qui correspond au package_execution_id pour un package. En cas d'échec du package, ceci est la meilleure méthode pour découvrir quelle était l'erreur racine.

select * from fn_syscollector_get_execution_details(@log_id)

Rapports sur l'état du collecteur de données

Vous pouvez obtenir les mêmes informations retournées par les requêtes Transact-SQL précédentes en consultant les journaux fournis dans SQL Server Management Studio. Pour plus d'informations, consultez Procédure : afficher les journaux des jeux d'éléments de collecte.

Problèmes de performances

Il existe trois sources principales de données que vous pouvez utiliser pour examiner et diagnostiquer les performances.

En premier lieu, les tables de journal décrites dans la section précédente fournissent également des informations utiles permettant de traiter des problèmes de performances.

La fonction fn_syscollector_get_execution_stats retourne les informations ci-dessous.

Nom de la colonne

Description

avg_row_count_in

Nombre moyen de lignes qui ont entré les tâches de flux de données du package.

min_row_count_in

Nombre minimal de lignes qui ont entré les tâches de flux de données du package.

max_row_count_in

Nombre maximal de lignes qui ont entré les tâches de flux de données du package.

avg_row_count_out

Nombre moyen de lignes qui ont quitté les tâches de flux de données du package.

min_row_count_out

Nombre minimal de lignes qui ont quitté les tâches de flux de données du package.

max_row_count_out

Nombre maximal de lignes qui ont quitté les tâches de flux de données du package.

avg_duration

Durée moyenne (en millisecondes) passée dans le composant de flux de données du package.

min_duration

Durée minimale (en millisecondes) passée dans le composant de flux de données du package.

max_duration

Durée maximale (en millisecondes) passée dans le composant de flux de données du package.

La table syscollector_execution_log_full constitue une deuxième source de données de performances, qui fournit des informations sur la durée pendant laquelle un jeu d'éléments de collecte s'est exécuté ou s'exécute.

Enfin, les compteurs de performances peuvent vous aider à évaluer des problèmes de performances. Le nombre de processus standard pour les instances de processus (dcexec.exe) du collecteur de données en particulier constitue un indicateur efficace de la quantité de ressources système utilisée par le composant d'exécution du collecteur de données.

Scénarios liés à des problèmes de performances

Deux scénarios sont susceptibles de générer des problèmes de performances lors de l'exécution du collecteur de données :

  • Le collecteur de données consomme trop de ressources système.

  • Le collecteur de données est dépassé par la charge de collecte.

Consommation excessive de ressources système

Si une analyse des compteurs de performances des processus indique que les processus dcexec.exe utilisent trop de ressources système, les investigations ci-dessous doivent être effectuées.

En premier lieu, déterminez s'il existe un jeu d'éléments de collecte individuel qui utilise la plupart des ressources.

  • Pour identifier ce jeu d'éléments de collecte, mappez l'ID du processus à l'ID du jeu d'éléments de collecte dans syscollector_execution_log_full, puis recherchez le jeu d'éléments de collecte dans la table syscollector_collection_sets.

  • Déterminez ce que le jeu d'éléments de collecte collecte. Utilisez la requête ci-dessous pour répertorier tous les éléments de collecte groupés dans le jeu :

    select * from syscollector_collection_set_items where collection_set_id = <id>
    
  • À l'aide des informations de la requête précédente, considérez les questions suivantes :

    • Existe-t-il trop d'éléments de collecte ?

    • Un élément de collecte individuel provoque-t-il la plupart des problèmes ?

    • Est-ce que trop de données sont collectées ?

    • Si la réponse à chacune des questions précédentes est oui, envisagez de modifier la collecte ou des éléments de collecte pour réduire le volume des données collectées. Cela réduira la consommation de ressources.

Ensuite, déterminez si le nombre de jeux d'éléments de collecte actifs est à l'origine du problème.

  • Découvrez combien de jeux d'éléments de collecte sont définis sur le système en utilisant la requête suivante :

    select count(*) from syscollector_collection_sets
    
  • Découvrez combien de jeux d'éléments de collecte sont en cours d'exécution en utilisant la requête suivante :

    select count(*) from syscollector_execution_log_full where parent_log_id is null and status = 1
    
  • Si le problème de performances est intermittent, voyez si le problème correspond à toute activité de collecte ou de téléchargement. Si les planifications sont toutes les mêmes, cela peut être à l'origine du problème. Ajuster une planification de collecte ou de téléchargement peut constituer une solution simple.

Impossible de suivre la charge

Cette condition se produit uniquement avec des jeux d'éléments de collecte exécutés en permanence. Si la fréquence de collecte est élevée et qu'il existe un volume important de données à collecter, le package de collectes peut ne pas être en mesure de traiter les données au cours du temps alloué pour une itération de capture instantanée unique. Vous pouvez détecter cette condition en comparant les colonnes avg_duration et max_duration dans la table du journal à la fréquence de collecte définie pour un élément de collecte spécifique.

Si la valeur max_duration est supérieure à la valeur de fréquence, le package de collectes peut ne pas être toujours en mesure de suivre la fréquence configurée. Si la valeur avg_duration est supérieure à la fréquence, le package de collectes a un problème persistent. Dans ce dernier cas, la fréquence doit être réduite ou l'élément de collecte doit être modifié pour limiter la quantité de données collectées.

Blocages du système

Un système peut se bloquer si un package qui s'exécute dans le cadre du collecteur de données arrête le traitement sans se fermer et reste dans cet état. La plupart des blocages système peuvent être résolus en arrêtant et redémarrant un jeu d'éléments de collecte.

Il est important de distinguer un véritable blocage d'un comportement souhaité.

  • Un package de collectes exécuté en permanence passe la plupart du temps dans un état d'attente, se réveillant périodiquement pour collecter une capture instantanée de données. Après avoir collecté les données, le package repasse en état d'attente. Cet état d'attente peut apparaître comme un blocage du système, mais ce n'en est pas un. Pour vérifier, examinez la table syscollector_execution_log_full pour rechercher le package suspect. Si last_iteration_time n'a pas une valeur postérieure à l'heure actuelle, la condition ne correspond pas à un blocage.

  • Un package peut être conçu pour attendre un événement qui déclenchera une action de collecte. Dans ce cas, le package attendra cet événement. Ceci n'est pas un blocage.

Pour vérifier l'existence d'un blocage du système lié au collecteur de données, effectuez les vérifications suivantes :

  • En premier lieu, identifiez l'ID du processus dcexec.exe qui correspond au jeu d'éléments de collecte que vous souhaitez étudier.

  • Ensuite, vérifiez que le processus est en cours d'exécution et qu'il utilise des ressources. Tout processus raccroché utilise habituellement 0 % de l'UC et n'alloue pas plus de mémoire. Le processus peut également utiliser un pourcentage élevé de l'UC. Si tel est le cas, il effectue peut-être une boucle sans quitter la mémoire.

  • Enfin, recherchez le processus dans la table du journal pour voir quand il a été mis à jour pour la dernière fois. Si le moment de la mise à jour dépasse la fréquence de l'élément de collecte, le processus est peut-être suspendu.

Le processus du collecteur de données peut être suspendu pour plusieurs raisons, dont les plus courantes sont les suivantes :

  • Un package attend que l'itération suivante soit signalée, mais cela ne se produit pas.

  • Un package attend un verrou partagé maintenu par un autre package, mais le verrou n'est pas libéré.

  • Une erreur s'est produite au cours de l'exécution du package qui n'a pas été traitée correctement et le flux de contrôle a été interrompu, mais le package n'a pas échoué complètement.

Dans chacun des cas précédents, il existe des entrées spécifiques dans le journal qui se rapportent au blocage du système. Recherchez d'éventuels messages indiquant une cause. Dans le cas d'un blocage du système, créez un vidage (dump) du processus dcexec.exe et poursuivez vos investigations.