Normalement, cet info nous dit que la transaction de lecture ne bloque qu'une clé et a l'intention de bloquer la page par "IU".
Alors, c'est la transaction d'écriture qui pose de pb. Normalement, elle verrou les clés et pose l'intention de verrouiller la page correspondant par "IX".
Selon
la matrice de compatibilité, IU n'est pas compatible avec IX.
Donc, si ta ligne de type 'A' est sur la page qui contient même une seule ligne de type 'B', cela bloquera la transaction de suppression.
Il faut donc
1) défragmenter (rebuild) ta clé cluster afin de minimiser la mixe des types 'A' et 'B' sur les mêmes pages en prenant la colonne de type comme la première de la clé composite (ce que réduit la sélectivité puisque dans la clé les colonnes plus sélectives doit avancer)
2) varier la taille de batch (100-10 etc), mais cela ne garantit pas l’absence des collisions en 100%
3) Penser à la solution de verrouillages au niveau applicatif (i.e. la table des verrous des utilisateurs ou versioning des lignes) et non pas au niveau SQL Server
Partager