Extraction Transformation Load (ETL) est l'épine dorsale de tout entrepôt de données. Dans le monde de l'entrepôt de données, les données sont gérées par le processus ETL, qui se compose de trois processus :Extraction-Pull/Acquire data from sources, Transformation-change data in the required format and Load-push data to the destination general into a data warehouse or un magasin de données.
Découvrez SSIS et commencez votre essai gratuit dès aujourd'hui !
SQL Server Integration Services (SSIS) est l'outil de la famille ETL qui est utile pour développer et gérer un entrepôt de données d'entreprise. Un entrepôt de données, de par sa propre caractérisation, fonctionne sur un énorme volume de données et la performance est un grand défi lors de la gestion d'un énorme volume de données pour n'importe quel architecte ou DBA.
Considérations d'amélioration ETL
Aujourd'hui, je vais discuter de la facilité avec laquelle vous pouvez améliorer les performances ETL ou concevoir un système ETL performant à l'aide de SSIS. Pour une meilleure compréhension, je diviserai dix méthodes en deux catégories différentes; premièrement, les considérations de temps de conception du package SSIS et deuxièmement la configuration des différentes valeurs de propriété des composants disponibles dans le package SSIS.
Considérations relatives au moment de la conception du package SSIS
#1 Extraction de données en parallèle :SSIS permet d'extraire des données en parallèle à l'aide de conteneurs de séquence dans le flux de contrôle. Vous pouvez concevoir un package de telle sorte qu'il puisse extraire des données de tables ou de fichiers non dépendants en parallèle, ce qui contribuera à réduire le temps d'exécution ETL global.
#2 Extrayez les données requises :extrayez uniquement l'ensemble de données requis de n'importe quelle table ou fichier. Vous devez éviter la tendance à extraire tout ce qui est disponible sur la source pour le moment que vous utiliserez à l'avenir ; il consomme de la bande passante réseau, consomme des ressources système (E/S et CPU), nécessite un stockage supplémentaire et dégrade les performances globales du système ETL.
Si votre système ETL est de nature vraiment dynamique et que vos exigences changent fréquemment, il serait préférable d'envisager d'autres approches de conception, comme l'ETL basé sur les métadonnées, etc. plutôt que de concevoir pour tout intégrer en même temps.
#3 Évitez l'utilisation de composants de transformation asynchrones :SSIS est un outil riche avec un ensemble de composants de transformation pour réaliser des tâches complexes lors de l'exécution ETL mais en même temps cela vous coûte cher si ces composants ne sont pas utilisés correctement.
Deux catégories de composants de transformation sont disponibles dans SSIS :Synchrone et Asynchrone .
Les transformations synchrones sont les composants qui traitent chaque ligne et poussent jusqu'au composant/destination suivant, ils utilisent la mémoire tampon allouée et ne nécessitent pas de mémoire supplémentaire car il s'agit d'une relation directe entre la ligne de données d'entrée/sortie qui s'intègre complètement dans la mémoire allouée. Des composants tels que la recherche, les colonnes dérivées et la conversion de données, etc. entrent dans cette catégorie.
Les transformations asynchrones sont les composants qui stockent d'abord les données dans la mémoire tampon, puis traitent des opérations telles que le tri et l'agrégation. Une mémoire tampon supplémentaire est nécessaire pour terminer la tâche et jusqu'à ce que la mémoire tampon soit disponible, elle conserve toutes les données en mémoire et bloque la transaction, également appelée transformation bloquante. Pour terminer la tâche, le moteur SSIS (moteur de pipeline de flux de données) allouera de la mémoire tampon supplémentaire, ce qui constitue à nouveau une surcharge pour le système ETL. Des composants tels que Trier, Agréger, Fusionner, Joindre, etc. entrent dans cette catégorie.
Dans l'ensemble, vous devez éviter les transformations asynchrones, mais si vous vous trouvez dans une situation où vous n'avez pas d'autre choix, vous devez savoir comment gérer les valeurs de propriété disponibles de ces composants. J'en parlerai plus tard dans cet article.
#4 Utilisation optimale des événements dans les gestionnaires d'événements :pour suivre la progression de l'exécution du package ou prendre toute autre action appropriée sur un événement spécifique, SSIS fournit un ensemble d'événements. Les événements sont très utiles, mais une utilisation excessive d'événements entraînera des frais généraux supplémentaires lors de l'exécution de l'ETL.
Ici, vous devez valider tous les traits avant d'activer un événement dans le package SSIS.
#5 Nécessité de connaître le schéma de la table de destination lorsque vous travaillez sur un énorme volume de données. Vous devez réfléchir à deux fois lorsque vous devez extraire un énorme volume de données de la source et le transférer dans un entrepôt de données ou un magasin de données. Vous pouvez rencontrer des problèmes de performances lorsque vous essayez de pousser des données volumineuses dans la destination avec une combinaison d'opérations d'insertion, de mise à jour et de suppression (DML), car il est possible que la table de destination ait des index clusterisés ou non clusterisés, ce qui peut entraîner beaucoup de données mélangées en mémoire en raison des opérations DML.
Si ETL rencontre des problèmes de performances en raison d'un grand nombre d'opérations DML sur une table contenant un index, vous devez apporter les modifications appropriées à la conception ETL, comme supprimer les index clusterisés existants dans la phase de pré-exécution et recréer tous les index. dans la phase de post-exécution. Vous pouvez trouver d'autres meilleures alternatives pour résoudre le problème en fonction de votre situation.
Configurer les propriétés des composants
#6 Contrôlez l'exécution parallèle d'une tâche en configurant les MaxConcurrentExecutables et EngineThreads biens. Les tâches de package et de flux de données SSIS ont une propriété pour contrôler l'exécution parallèle d'une tâche :MaxConcurrentExecutables est la propriété au niveau du package et a une valeur par défaut de -1 , ce qui signifie que le nombre maximum de tâches pouvant être exécutées est égal au nombre total de processeurs sur la machine plus deux ;
Paquet
EngineThreads est une propriété au niveau de la tâche de flux de données et a une valeur par défaut de 10, qui spécifie le nombre total de threads pouvant être créés pour exécuter la tâche de flux de données.
Tâche de flux de données
Vous pouvez modifier les valeurs par défaut de ces propriétés en fonction des besoins ETL et de la disponibilité des ressources.
#7 Configurer l'option de mode d'accès aux données dans la destination OLEDB. Dans la tâche de flux de données SSIS, nous pouvons trouver la destination OLEDB, qui fournit quelques options pour pousser les données dans la table de destination, sous le mode d'accès aux données ; d'abord, l'option « Tableau ou vue », qui insère une ligne à la fois; deuxièmement, l'option "Chargement rapide de la table ou de la vue", qui utilise en interne l'instruction d'insertion en bloc pour envoyer des données dans la table de destination, ce qui offre toujours de meilleures performances par rapport aux autres options. Une fois que vous avez choisi l'option "chargement rapide", cela vous donne plus de contrôle pour gérer le comportement de la table de destination lors d'une opération de transmission de données, comme Conserver l'identité, Conserver les valeurs nulles, Verrouiller la table et Vérifier les contraintes.
Éditeur de destination OLE DB
Il est fortement recommandé d'utiliser l'option de chargement rapide pour pousser les données dans la table de destination afin d'améliorer les performances ETL.
#8, Configurez les lignes par lot et la taille maximale de validation d'insertion dans la destination OLEDB. Ces deux paramètres sont importants pour contrôler les performances de tempdb et du journal des transactions, car avec les valeurs par défaut données de ces propriétés, les données seront transférées dans la table de destination sous un lot et une transaction. Cela nécessitera une utilisation excessive de tembdb et du journal des transactions, ce qui se transformera en un problème de performances ETL en raison d'une consommation excessive de mémoire et de stockage sur disque.
Éditeur de destination OLE DB
Pour améliorer les performances ETL, vous pouvez mettre une valeur entière positive dans les deux propriétés en fonction du volume de données prévu, ce qui aidera à diviser tout un tas de données en plusieurs lots, et les données d'un lot peuvent à nouveau être validées dans la table de destination en fonction de la valeur spécifiée. Cela évitera une utilisation excessive de tempdb et du journal des transactions, ce qui contribuera à améliorer les performances ETL.
#9 Utilisation de SQL Server Destination dans une tâche de flux de données. Lorsque vous souhaitez transférer des données dans une base de données SQL Server locale, il est fortement recommandé d'utiliser la destination SQL Server, car elle offre de nombreux avantages pour surmonter les limitations d'autres options, ce qui vous aide à améliorer les performances ETL. Par exemple, il utilise la fonctionnalité d'insertion en masse intégrée à SQL Server, mais il vous donne la possibilité d'appliquer la transformation avant de charger les données dans la table de destination. En dehors de cela, il vous donne la possibilité d'activer/désactiver le déclenchement du déclencheur lors du chargement des données, ce qui contribue également à réduire la surcharge ETL.
Composant de flux de données de destination SQL Server
# 10 Évitez le transtypage implicite. Lorsque les données proviennent d'un fichier plat, le gestionnaire de connexions de fichier plat traite toutes les colonnes comme un type de données chaîne (DS_STR), y compris les colonnes numériques. Comme vous le savez, SSIS utilise la mémoire tampon pour stocker l'ensemble des données et applique la transformation requise avant de pousser les données dans la table de destination. Désormais, lorsque toutes les colonnes sont des types de données de chaîne, cela nécessitera plus d'espace dans le tampon, ce qui réduira les performances ETL.
Pour améliorer les performances ETL, vous devez convertir toutes les colonnes numériques dans le type de données approprié et éviter la conversion implicite, ce qui aidera le moteur SSIS à accueillir plus de lignes dans un seul tampon.
Résumé des améliorations des performances ETL
Dans cet article, nous avons exploré la facilité avec laquelle les performances ETL peuvent être contrôlées à tout moment. Voici 10 façons courantes d'améliorer les performances ETL. Il peut y avoir plus de méthodes basées sur différents scénarios grâce auxquels les performances peuvent être améliorées.
Dans l'ensemble, avec l'aide de la catégorisation, vous pouvez identifier comment gérer la situation. Si vous êtes dans la phase de conception d'un entrepôt de données, vous devrez peut-être vous concentrer sur les deux catégories, mais si vous prenez en charge un système hérité, travaillez d'abord étroitement sur la deuxième catégorie.