J'ai 2 requêtes qui, lorsqu'elles sont exécutées en même temps, provoquent un blocage.
Requête 1 - mettez à jour une colonne qui est incluse dans un index (index1):
update table1 set column1 = value1 where id = @Id
Prend X-Lock sur table1 puis tente un X-Lock sur index1.
Requête 2:
select columnx, columny, etc from table1 where {some condition}
Prend un S-Lock sur index1 puis tente un S-Lock sur table1.
Existe-t-il un moyen d'éviter l'impasse tout en conservant les mêmes requêtes? Par exemple, puis-je en quelque sorte prendre un X-Lock sur l'index dans la transaction de mise à jour avant la mise à jour pour m'assurer que la table et l'accès à l'index sont dans le même ordre - ce qui devrait empêcher le blocage?
Le niveau d'isolement est Lecture validée. Les verrous de ligne et de page sont activés pour les index. Il est possible que le même enregistrement participe aux deux requêtes - je ne peux pas dire à partir du graphique de blocage car il n'affiche pas les paramètres.