Nous avons un problème d'interblocage que nous essayons de détecter. J'ai un graphe de blocage (xdl) généré à partir de Profiler. Il montre l'instruction SQL perdue comme une instruction Select simple, pas une instruction Update, Delete ou Insert. Le graphique montre l'instruction Select perdue comme demandant un verrou partagé sur une ressource **but also owning an Update lock on a resource**
. C'est ce qui me déconcerte. Pourquoi une instruction Select qui ne fait pas partie d'une insertion, d'une mise à jour ou d'une suppression contient-elle un verrou de mise à jour sur une ressource?Problème d'interblocage dû à un verrou de mise à jour
Je dois ajouter que le verrou de mise à jour qu'il possède est sur la table qui est sélectionnée par l'instruction Select perdante.
EDIT: Veuillez ne pas suggérer d'utiliser NoLock. Oui cela résoudrait le problème mais en introduit un nouveau - un problème de lecture sale. Cette requête frappe un serveur de production. Ce que je veux vraiment savoir, c'est pourquoi une instruction Select émet un verrou de mise à jour. Une instruction select crée un verrou partagé.
Je serais ravi de le partager. Comment dois-je faire? –
Si vous ne pouvez pas le partager en ligne, envoyez-le moi. Mon email est sur la page de contact sur mon site http://rusanu.com/contact-us –
Je l'ai juste à l'adresse e-mail sur votre page de contact. –