|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 294 ![]() |
Bonjour
Dans le cadre d'un ETL avec SSIS, je fais un miroir d'une base Oracle (sur une sélection de table) que je copie dans une base SQL. Lors du traitement j'ai des problèmes de dead lock sur les index. Pour chaque table, j'ai créé un package SSIS qui exécute les opérations suivantes :
Pour les opérations sur les index, je passe par une procédure stockée, et c'est dans ces procédures qu'il y a des dead lock. Je ne comprend pas trop pourquoi il y a des problèmes de dead lock car les packages sont indépendants puisque chacun traite un table différente. Les non clustered ne sont pas supprimés car écrire une procédure pour les régénérer est complexe, et cela permet de les modifier sans impacter les packages SSIS Est ce ce que quelqu'un a une idée ? Merci PS : Je n'ai pas encore regardé avec sql profiler car je n'ai pas les droits suffisants pour l'utiliser. PPS : je peux poster le code des procédures stockées pour les index clustered si cela est utile Procédure pour la gestion des index non clustered : Code :
|
||
|
|
00
|
|
|
#2 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Bonjour,
Citation:
Est-ce que la base de données cible de l'exécution de ces packages est utilisée, où êtes vous seul à exécuter les packages ? Si vous ne parvenez pas à savoir comment se produit le deadlock, le plus simple reste effectivement de les capturer à l'aide de SQL Profiler et de l’événement Deadlock Graph @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Oui : péter les CLUSTRED => tous les index impactés par toute nouvelles lignes. C'est EXACTEMENT le contraire que vous devez faire !
Si vous êtes en 2005 ou 2008, désactivez les index avec : ALTER INDEX ??? DISABLE. Pour réactiver : ALTER INDEX ??? REBUILD. Rien de plus simple. Sous 2000, utilisez la procédure que j'ai écrite à ce sujet : http://sqlpro.developpez.com/cours/s...ivation-index/ A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#4 | ||
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 294 ![]() |
Citation:
Le problème est que les dead locks n'arrivent pas à chaque traitement, et en plus la dernière fois, j'ai eu des Deadloack Chain, des deadlock mais pas de deadlock graph bien qu'il soit dans les events tracés Citation:
|
||
|
|
00
|
|
|
#5 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Citation:
Citation:
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#6 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Citation:
1) désactiver les index les supprime en laissant leur définition dans les tables système afin que vous puissiez les recréer à l'identique. 2) ne supprimez ni les index CLUSTERED ni les index sémantiques (contraintes UNIQUE, FK et PRIMARY)? 3) si vous avez des erreurs, montrez les nous ! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#7 | ||||
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 294 ![]() |
Voila quelques précisions, je peux en donner d'autres au besoin.
Pour supprimer les index clustered, je passe par une procédure stockée (cf. code plus bas), en gros, elle fait un DROP INDEX index ON table WITH ( ONLINE = OFF ) ou ALTER TABLE table DROP CONSTRAINT index selon le type d'index clustered Pour activer / désactiver les index non clustered je fais un ENABLE / DISABLE (cf. code dans le premier post) Les erreurs dans les packges SSIS se situent lors des l’exécution des procédures stockées d'activation / dé activation des index non clustered : Code :
Code :
|
||||
|
|
00
|
|
|
#8 |
|
Membre régulier
![]() Christian BrossaultAdministrateur de base de données Inscription : avril 2006 Messages : 52 ![]() |
bonjour,
avez-vous bien défini des liaisons dans votre package ? n'y a t-il pas des étapes qui se chevauchent ? Ajoutez des attentes entre les étapes. Christian |
|
00
|
|
|
#9 |
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 294 ![]() |
Les packages peuvent être exécutés en parallèle, mais comme il s'agit de tables indépendantes, cela ne devrait pas poser de problème.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com