Comment charger et filterr efficacement datatables dans SSIS

Besoin de charger un file plat avec un package SSIS exécuté dans un travail planifié dans SQL Server 2016, mais cela prend trop de time (comme 2/3 heures) juste pour charger datatables dans la source puis il faut plus de time (2/3 heures) pour sortinger et filterr puis besoin de time similaire pour charger datatables dans la cible, le file a juste comme millions de lignes et ce n'est pas less de 3 Go de file environ. Cela me rend fou, car cela affecte les performances de mon server.

Paquetage SSIS: -Mon package est juste une tâche de stream de données qui a une source de file plat et une destination OLE DB, c'est tout – Le mode d'access aux données est réglé sur FAST LOAD. -Juste avoir 1 index dans la table. Ma table de destination comporte 32 colonnes

Fichier d'input: Le file de text d'input a plus de 32 colonnes, datatables de key de substitution peuvent ne pas être uniques, les dates des colonnes référencées peuvent ne pas être uniques, besoin de les filterr.

Face à deux problèmes on est SSIS FlatFile-Source prendre énormément de time pour charger une autre date est un sorting et un filter. Que faire?

entrez la description de l'image ici

Si vous voulez qu'il fonctionne rapidement, utilisez ce model:

  1. Chargez datatables exactement telles quelles dans une table intermédiaire
  2. Ajoutez éventuellement des index à la table de transfert après
  3. Utilisez SQL pour effectuer le traitement dont vous avez besoin (c.-à-d. SELECT DISTINCT, GROUP BY dans la table finale)

Vous pouvez faire ce genre de chose dans SSIS, mais vous devez l'accorder correctement, etc. Il est simplement plus facile de le faire dans une database déjà bien optimisée pour cela.

Quelques suggestions

1. DROP et recréer les index

Ajouter 2 Execute SQL Task ; avant et après la Data Flow Task , la première supprime l'index et la seconde recréer après que la Data Flow Task est exécutée avec succès

2. Ajustez la taille de la memory tampon

Vous pouvez en savoir plus sur le dimensionnement des tampons dans l' article suivant de Technet

3. Supprimez les duplicates dans le server SQL au lieu de sortinger les composants

Essayez de supprimer les composants Trier et ajoutez une Execute SQL Task après la Data Flow Task qui exécute une requête similaire:

 ;WITH x AS ( SELECT col1, col2, col3, rn = ROW_NUMBER() OVER (PARTITION BY col1, col2, col3 ORDER BY id) FROM dbo.tbl ) DELETE x WHERE rn > 1; 

4. Utilisez un composant de script au lieu de sortinger

Vous devez implémenter une logique similaire à la réponse suivante:

  • SSIS: source de file plat en SQL sans lignes en double

Quelques liens utiles

  • Integration Services: Techniques d'optimization des performances
  • Caractéristiques de performance du stream de données
  • Puis-je supprimer les duplicates de database en fonction de plusieurs colonnes?
  • Suppression des lignes en double (en fonction des valeurs de plusieurs colonnes) à partir de la table SQL
  • Suppression des duplicates en fonction de plusieurs colonnes
  • Supprimer les duplicates basés sur deux colonnes