2015-12-17 5 views
1

Je suis nouveau SSIS et j'ai eu ce problème:lent/Mauvaises performances sur SSIS avec xml

J'ai un peu plus de 100.000 fichiers xml, chacun d'entre eux autour 16Kb grand. Ils ont environ 200 colonnes et une clé primaire. Certains d'entre eux sont seulement pour la mise à jour. Je dois remplir une base de données avec les données, mais cela prend environ 1,5 seconde pour chaque fichier à charger/mettre à jour. J'utilise VS 2015 et MS SQL. Je veux seulement créer la base de données dans les heures de travail, en ce moment, il faudrait environ 44 heures, ce qui semble ridicule. (Après cela, il y aura seulement 10 fichiers xml-par jour pour la mise à jour.)

Mon SSIS ControlFlow ressemble:

enter image description here

Mon SSIS DataFlow ressemble: enter image description here

Je Je ne sais pas comment améliorer la performance.

choses que j'essayé: Définition Ole DB = lignes par lot 5000 et utiliser la charge rapide

Même quand je n'insérez que le code XML (qui se termine par une erreur que je ne met pas à jour), il a besoin de beaucoup temps (environ 1 seconde par fichier).

Toute aide serait appréciée.

+0

Vérifiez les options de mise en cache sur votre transformation de recherche: https://msdn.microsoft.com/fr-fr/library/ms141821.aspx Souvent, il mettra en cache un énorme tabl (prenant pour toujours) et n'utilisera qu'une fraction de celui-ci , ou vice versa. – steenbergh

+0

My Lookup a fait un cache complet, l'a changé en cache, mais l'heure est toujours la même. – marS

+0

Honnêtement, faire 100 000 lectures sur de très petits fichiers vient avec un surcoût significatif. Je crains que vous ne soyez coincé dans cette situation telle qu'elle est ... Faire des fichiers d'E/S est lent. – steenbergh

Répondre

2

Je viens de faire quelque chose de similaire et je trouve le même problème avec les frais généraux. Je pensais partager mon seul travail - le traitement parallèle.

Alors commencez par déterminer le nombre de cœurs disponibles sur votre serveur. En règle générale, vous pouvez avoir un processus par cœur.

Ensuite, vous pouvez faire un dossier de boîte de réception pour chaque noyau votre machine a (en supposant que vous avez quatre cœurs):

  • boîte de réception 1
  • boîte de réception 2
  • boîte de réception 3
  • boîte de réception 4

Ensuite, allez dans votre SSIS où vous avez votre boucle foreach dans le flux de contrôle et copiez ce processus quatre fois, mais ne les reliez pas est-ce qu'ils courent individuellement).

Enfin, allez dans chaque boucle foreach et éditez-les pour qu'elle sorte d'une autre boîte de réception. De toute évidence, vous devez couper et coller vos fichiers dans chaque boîte de réception, mais il va exécuter quatre flux de données qui font la même chose en parallèle. C'est-à-dire que vous devez charger quatre fichiers en même temps que le temps nécessaire pour en charger un.