BI experience

Package SSIS bloqué

| 0 Commentaires

Si vous êtes dans un contexte similaire :

  • grosse volumétrie
  • SQL server 2008 (ou les connexions ADO.NET ne sont pas supportées correctement)
  • On utilise des connexions OLEDB (si on était en SQL server 2008R2 avec ADO.NET, nous n’aurions pas rencontré ce problème de package bloqué)
  • La source de données utilise la table cible. Exemple concret : Ma stratégie de chargement est la suivante : je charge une table temporaire (Temp_ma_table) avec 5 jours d’historique par exemple (car c’est une table volumineuse). Et pour charger les nouvelles lignes dans la table cible (ma_table), je fais en source une requête du type :

SELECT a.*
FROM
Temp_ma_table a
LEFT OUTER JOIN ma_table b
ON a.champ1= b.champ1 and a.champ2= b.champ2
WHERE b.champ1 is null

Et donc lors du chargement, le lot utilise la même table en lecture et en écriture. Visiblement SSIS ne monte pas toutes les lignes en mémoire mais fait du coup par coup. Donc si vous ne faites pas certains réglages, le package reste bloqué et si vous allez  sur « management studio » voir le monitoring, vous pourrez y voir dans la colonne « Blocked By » un lock de la table:

Pour éviter ces problèmes de locks et donc de package SSIS bloqué, il faut jouer sur les paramètres suivants :

  • Dans les propriétés du composant « data Flow Task » dans le control Flow, vous pouvez jouer sur les paramètres suivants :
    • DefaultBufferMaxRows : 100 000 par exemple
    • DefaultBufferSize : 104 857 600 par exemple (on a ajouté un 0)
  • Dans le Data Flow dans le composant cible il y a l’option : « Table Lock », on peut le décocher:

Alors le fait de décocher cette option n’est pas forcement conseillé mais si elle peut vous débloquer le chargement, ça vaut le coup!

Si vous avez d’autres solutions pour ces problèmes de tables locked et de packages SSIS bloqués,n’hésitez pas à nous en faire part…

 

Laisser un commentaire

Champs Requis *.

*