Conception de vos packages SSIS pour le parallélisme (Vidéo liée à SQL Server)

S'applique à : : Microsoft SQL Server Integration Services

Auteur : Matt Carroll, Microsoft Corporation

Durée : 12 min 37 s

Taille : 29,2 Mo

Type : fichier WMV

Regarder cette vidéo

Rubriques d'aide connexes :

Création et modification de colonnes d'identification

Transfert efficace de données à l'aide du commutateur de partitionnement

Billets de blog et articles connexes (en anglais) :

Top 10 SQL Server Integration Services Best Practices

ETL World Record

Vidéos supplémentaires :

Mesure et présentation des performances de vos packages SSIS dans l'entreprise (Vidéo liée à SQL Server)

Paramétrage du flux de données de votre package SSIS dans l'entreprise (Vidéo liée à SQL Server)

Présentation des tampons de flux de données SSIS (Vidéo liée à SQL Server)

Résumé de la vidéo

Cette vidéo explique comment augmenter les performances de vos packages Integration Services en les concevant pour le parallélisme.

Remerciements pour la vidéo

Merci à Thomas Kejser pour sa contribution aux documents de la série SSIS : conception et paramétrage des performances (série de vidéos liées à SQL Server). Cette vidéo est la quatrième de la série.

Merci à Carla Sabotta et Douglas Laudenschlager pour leurs conseils et précieux commentaires.

Notes techniques sur la vidéo

Dd795221.note(fr-fr,SQL.100).gifRemarque :
Les notes techniques sont des extraits sélectionnés de la vidéo.

Les principes de la conception pour le parallélisme sont les suivants : décomposition du problème, élimination des conflits et planification efficace.

L'idée de la conception pour le parallélisme est de décomposer un problème important en plus petits éléments indépendants et de disperser le résultat. Pour Integration Services, la décomposition du problème en plus petits éléments consiste à partitionner les données à traiter. Vous allez essayer d'obtenir des partitions de taille égale pour optimiser la planification et faciliter la distribution.

Vous devez ensuite éliminer les conflits entre les plus petits éléments afin qu'ils puissent être traités en parallèle sans interférer entre eux. Vous souhaitez une conception sans état, ce qui signifie que chaque unité de travail est autonome et n'a besoin d'aucune coordination extérieure pour exécuter sa tâche. Vous voulez également réduire les conflits pour les ressources externes.

Enfin, vous devez récupérer les différents petits éléments de travail et les disperser pour qu'ils soient exécutés plus rapidement. Cela revient à planifier et à distribuer le travail pour que vos ressources les plus essentielles soient utilisées efficacement. Cela implique également d'utiliser judicieusement le temps imparti et de ne pas laisser une tâche de longue durée dominer l'exécution. Si vous imaginez le travail à effectuer sous la forme d'un diagramme de Gantt, vous souhaitez équilibrer la charge de travail afin que tout le travail soit terminé le plus tôt possible.

Décomposition du problème

Vous voulez partitionner vos données sources en segments plus petits de la même taille environ. Pour ce faire, vous pouvez vous baser sur des plages naturelles dans les données, telles que l'heure ou la géographie. Si vous disposez d'une colonne d'identité, vous pouvez également spécifier une opération modulo des valeurs qu'elle comporte pour identifier des partitions égales. Sinon, vous pouvez avoir recours à l'application d'une fonction de hachage sur les colonnes clés pour produire des partitions.

Outre le partitionnement de la table source, vous allez partitionner les tables de destination pour correspondre à celui de vos données sources. La commande SQL SWITCH offre un mécanisme très efficace pour ajouter et supprimer des partitions dans une table.

Élimination des conflits

Après la décomposition du problème, vous devez éliminer les conflits éventuels entre ces partitions. Une conception sans état est importante pour éviter des interactions complexes et d'éventuels conflits. Pour vous assurer que le package est sans état dans sa conception, vous devez lui transmettre toutes les informations nécessaires à la réalisation de son travail.

Veillez à éviter la contention de verrouillage. De nombreuses connexions procédant à des insertions dans la même table peuvent provoquer une contention. Pour éviter cela, utilisez des tables partitionnées et tirez parti de la commande SQL SWITCH.

Attention à tout conflit de matériel de contrôle. Si les E/S disque représentent un problème, déplacez-les vers plus de lecteurs ou des lecteurs plus rapides. Si les E/S réseau représentent un problème, ajoutez ou mettez à niveau des contrôleurs de réseau. Si l'UC ou l'utilisation de la mémoire représente un problème, procédez à l'exécution sur un ordinateur avec plus de processeurs ou de mémoire, ou sur plusieurs ordinateurs. Par ailleurs, gardez à l'esprit qu'Integration Services est conçu pour être exécuté dans la mémoire ; veillez donc à ce que chaque package dispose d'assez de mémoire.

Planification efficace

Après la décomposition en tâches plus petites et l'élimination de conflits entre celles-ci, vous souhaitez planifier ces tâches pour une exécution efficace. Pour créer une planification efficace, commencez par définir une file d'attente prioritaire du travail à réaliser. Une table SQL convient parfaitement à cet effet.

Lancez ensuite plusieurs copies du package que vous avez générées pour effectuer le travail. L'utilisation de la commande START de Windows pour appeler dtexec.exe est une façon simple et efficace d'effectuer cette opération. Le nombre de packages que vous lancez détermine le degré de parallélisme que vous utiliserez.

Chacun de ces packages traitera ensuite le travail à partir de la file d'attente des tâches selon la priorité jusqu'à ce qu'il n'en reste plus. Une boucle à l'intérieur du package obtient d'abord une tâche de la file d'attente prioritaire, effectue le travail défini par cette tâche, puis se répète jusqu'à ce que la file d'attente des tâches soit vide.

Démonstration

Lors de la première exécution de la démonstration, chaque tâche est traitée en séquence par une seule instance du package.

Lors de la deuxième exécution de la démonstration, deux processus fonctionnent en parallèle. Les tâches sont exécutées par lots de deux et la durée d'exécution totale de la démonstration diminue de près de la moitié, d'environ 64 secondes à 36 secondes.

Lors de la troisième exécution de la démonstration, quatre processus fonctionnent en parallèle. La durée des tâches individuelles est passée de 9 secondes à environ 14 secondes. Par ailleurs, la durée d'exécution totale est passée d'environ 36 secondes à 28 secondes.

Lors de la dernière exécution de la démonstration, huit processus fonctionnent en parallèle. Comme toutes les tâches sont exécutées simultanément, la durée de chacune est passée à environ 27 secondes et la durée d'exécution totale est presque la même qu'avec quatre processus. Nous avons ici atteint un goulot d'étranglement d'E/S disque, car les huit processus sont en conflit entre eux pour lire leurs fichiers de données à partir du disque. Pour résoudre ce problème, nous souhaitons répartir les fichiers sur des disques et contrôleurs séparés, ou les déplacer vers une technologie de disque plus rapide.

Voir aussi

Autres ressources

Équipe SQLCAT

Aide et informations

Assistance sur SQL Server 2008