2013-05-29 5 views
1

J'ai quelques instructions MERGE que j'exécute dans une transaction à partir du code ADO.NET.Instructions de fusion SQL sur des tables avec des clés étrangères et résolution d'interblocages

L'identifiant de la première table sera attribué automatiquement lors de l'insertion dans la table. La deuxième table a une contrainte de clé étrangère, c'est pourquoi j'ai cette sélection dans mon instruction d'insertion.

La correspondance est en fait basée sur une clé naturelle car les clés de substitution ne sont pas exposées en dehors de l'application.

Les instructions MERGE ressemblent à ceci. Lors de l'exécution de ces instructions dans plusieurs transactions parallèles, des interblocages se produisent sur les tables. J'ai été en mesure de réduire certains blocages sur insertion en ajoutant les conseils rowlock, mais les instructions de mise à jour causent toujours des problèmes.

Je ne suis pas un expert en optimisation de base de données et j'ai de la difficulté à trouver ce qui se passe et comment l'améliorer. Est-ce que quelqu'un a un avis professionnel sur ces questions? Modifiez votre indice de verrouillage à WITH (HOLDLOCK).

Répondre

0

Cela entraînera l'instruction MERGE pour conserver le verrou sur les lignes affectées à travers l'instruction entière et devrait éliminer les blocages.

Questions connexes