Symptômes
Prenons l’exemple du scénario suivant :
-
Vous disposez d’une base de données Microsoft SQL Server 2012 pour laquelle les options de ALLOW_SNAPSHOT_ISOLATION et de READ_COMMITTED_SNAPSHOT sont activées.
-
Vous avez au moins trois requêtes simultanées qui s’exécutent au sein de la même table.
-
Les requêtes utilisent l’indicateur de requête (TABLOCK, UPDLOCK) .
-
Chaque requête est encapsulée dans une instruction BEGIN TRAN explicite, mais l’instruction Commit TRAN n’est pas exécutée.
Lorsque la première requête est validée dans ce scénario, l’une des autres requêtes se bloque. Lorsque READ_COMMITTED_SNAPSHOT est activée conjointement avec les indicateurs de requête TABLOCK et UPDLOCK , les sessions prennent des verrous IX sur la table. Le blocage se produit lorsque les deux sessions simultanées essaient de convertir en même temps les verrouillages IX en X. Si READ_COMMITTED_SNAPSHOT est désactivé, les sessions obtiennent six verrous qui ne se bloquent pas lorsqu’ils sont convertis en verrous X. Le correctif résout ce comportement en autorisant les verrous de LCK_M_SCH_S au lieu de indicateurs IX lorsque READ_COMMITTED_SNAPSHOT est utilisé avec les indications TABLOCK et UPDLOCK .RemarqueCe problème survient également dans Microsoft SQL Server 2008 R2. Un correctif pour SQL Server 2008 R2 sera bientôt disponible.
Résolution
Le problème a été résolu dans la mise à jour cumulative suivante de SQL Server.
Mise à jour cumulative 8 pour SQL Server 2012 SP1 /en-us/help/2917531
Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs et les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :
Statut
Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.