Partager via


Stockage des données d'activité

Cette rubrique décrit le stockage des données d'activité, les problèmes de performances engendrés par l'augmentation progressive de la taille des tables de l'activité et la manière dont le composant BAM permet de résoudre ces difficultés en séparant les tables des activités en cours de celles des activités terminées. Cette rubrique traite également des fenêtres en ligne permettant d'interroger les données et de l'utilisation du partitionnement dans les analyses BAM pour augmenter les performances.

Le principe fondamental du stockage des données d'activité consiste à disposer d'une table par type d'activité, où chaque enregistrement représente une instance d'activité différente (par exemple, une instance en cours ou terminée).

Dans l'exemple développé ci-après, l'activité considérée est le traitement d'un bon de commande. La table se présente alors de la manière suivante :

Bon de cmde n° Heure réception City Quantité Heure expédition Heure livraison
123 8h00 Seattle 150 8h24 12h45
124 8h30 Seattle 234 8h45 13h20
125 8h35 Redmond 87 9h05 14h30
126 8h45 Seattle 450 9h20 15h10
127 8h55 Redmond 200 9h30 <NULL>
128 8h57 Seattle 340 9h20 15h05
129 9h12 Seattle 120 9h45 <NULL>
130 9h30 Redmond 25 10h15 <NULL>
131 9:45 Seattle 250 10h35 <NULL>
132 10h00 Redmond 100 <NULL> <NULL>
133 10h15 Seattle 230 <NULL> <NULL>
134 10h25 Redmond 45 <NULL> <NULL>

Dans cette table, lorsque le composant BAM reçoit un nouveau bon de commande, une nouvelle ligne est insérée et des valeurs autres que « null » sont attribuées à certaines colonnes (heure de réception, ville, quantité, etc.). Ensuite, une fois que vous avez validé l'expédition du bon de commande, l'analyse BAM définit une valeur non « null » dans la colonne correspondant à l'heure d'expédition. Enfin, lorsque la commande a été livrée, l'analyse BAM attribue une valeur autre que « null » pour l'heure de livraison.

Les performances de cette implémentation simplifiée se détériorent rapidement au fil du temps. Au départ, le nombre de transactions pouvant être effectuées par le serveur SQL étant limité (restriction principalement due au processeur), l'impact sur les performances est réduit. En revanche, au bout d'un certain temps, les performances diminuent considérablement. Dans le même temps, la longueur moyenne de la file d'attente pour les E/S du disque augmente jusqu'à dépasser les capacités :

Capture d’écran montrant comment la longueur moyenne de la file d’attente pour les E/S de disque augmente au-delà des limites acceptables.
Rapport performances de l'analyse BAM en écriture / longueur de la file d'attente du disque

Cette évolution est due à l'augmentation de la taille de la table au fur et à mesure que de nouvelles instances du processus d'entreprise prennent fin. Par exemple, un premier appel à la procédure stockée (instruction UPDATE) entraîne une recherche sur les numéros de bon de commande dans l'index mis en cluster ainsi qu'une lecture de certaines pages en mémoire. Les instances du processus de bon de commande étant indépendantes les unes des autres (certaines sont longues, d'autres très brèves), l'appel à la procédure stockée suivant peut concerner une autre instance de bon de commande et donc nécessiter la lecture de pages de données en mémoire différentes. Tant que le nombre total d'enregistrements de bon de commande est réduit, le serveur SQL met en mémoire cache toutes les pages de données. Lorsque le nombre de ces enregistrements devient trop important, la fréquence d'accès au cache diminue et chaque opération requiert une lecture sur le disque physique. Il semble que dans une telle situation, aucune activité d'interrogation de la table ne soit possible.

Tables BAM

Pour contourner ce problème, l'analyse BAM utilise deux tables distinctes : dans le schéma ci-après, une table est consacrée aux activités en cours et une autre aux activités terminées.

Image montrant comment BAM utilise deux tables distinctes.
BAM Tables

Dans ce schéma, l'objectif est d'obtenir, d'une part, une table dont la taille reste raisonnable et où ont lieu les mises à jour et, d'autre part, une table dont la taille peut augmenter et qui est accessible de façon incrémentielle (instructions INSERT uniquement). Dans l'exemple présenté ici, seules les commandes en cours de traitement sont placées dans la table active tandis que celles qui ont déjà été livrées sont placées dans la table des activités terminées.

Au départ, cette structure à tables multiples est plus lente qu'une table unique fonctionnant à l'aide d'instructions INSERT/UPDATE en raison du système de déclenchement utilisé, mais à long terme, ses performances en écriture restent stables.

Fenêtre en ligne et données d'activité

Dans un premier temps, le stockage d'activité gère les requêtes relatives aux activités en cours ou venant de se terminer. L'analyse BAM se charge ensuite d'archiver et de supprimer de la base de données d'importation principale BAM les activités terminées depuis un certain temps. Les données d'activité transitent par le composant BAM et sont disponibles pour d'éventuelles requêtes pendant une période définie par la fenêtre en ligne.

Partitionnement BAM

Pour obtenir des performances élevées et éviter les temps d'arrêt, le stockage d'activité utilise un partitionnement en fonction de la date et de l'heure de fin de l'activité. Le composant BAM réalise cette opération en remplaçant régulièrement la table des activités terminées par une table vide de format identique. Les nouvelles activités terminées sont ensuite placées dans la table vide tandis que l'analyse BAM conserve l'ancienne table pour d'éventuelles requêtes, comme indiqué dans le schéma ci-dessous :

Image montrant comment les autres activités terminées sont intégrées à la nouvelle table, tandis que BAM conserve l’ancienne uniquement pour les requêtes.
Remplacement de partition BAM

Une fois qu'une partition se trouve en dehors de la fenêtre en ligne spécifiée, le composant BAM l'archive puis la supprime. Afin de rendre cette opération moins complexe pour l'utilisateur, l'analyse BAM gère également une vue partitionnée du formulaire :

SELECT * FROM Active   
UNION ALL   
SELECT * FROM Completed   
UNION ALL  
  

Cette vue est automatiquement régénérée à chaque création ou suppression d'une partition.

Notez les remarques suivantes concernant le partitionnement de l'analyse BAM :

  • Le nom de la vue partitionnée est bam_<ActivityName>_AllInstances. Cette vue n'est pas destinée à des interrogations directes mais peut être utile lors du dépannage des outils BAM. Pour effectuer des requêtes sur les données provenant des vues que vous avez créées pour chaque catégorie d'utilisateurs d'activités, utilisez une nouvelle vue. Pour plus d’informations, consultez Interrogation des données d’instance.

  • Vous définissez la fenêtre en ligne en modifiant les valeurs de OnlineWindowTimeUnit et OnlineWindowLength dans l’enregistrement de l’activité actuelle dans la table bam_Metadata_Activities dans la base de données d’importation principale.

  • Le package DTS , BAM_DM_<ActivityName>, effectue le partitionnement et l’archivage/vidage. À chaque exécution, ce lot tronque une nouvelle partition et archive et supprime toutes les partitions se trouvant en dehors de la fenêtre en ligne spécifiée.

  • Si vous n'avez pas configuré de base de données pour archiver les partitions, le composant BAM supprime les anciennes données d'activité sans les archiver au préalable.

Voir aussi

Infrastructure dynamique de l’analyse BAM