KB2448971-FIX : les verrouillages d’une table ne sont pas escaladés lorsque vous insérez de nombreuses lignes dans une table dans SQL Server 2008 ou SQL Server 2008 R2

Symptômes

Prenons l’exemple du scénario suivant :

  • Vous insérez de nombreuses lignes dans une table dans Microsoft SQL Server 2008 ou dans SQL Server 2008 R2 en utilisant l’une des requêtes suivantes :

    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>

    Remarques

    • Le <target_table espace réservé>représente le nom réel de la table cible.

    • Le prédicat<> espace réservé représente le prédicat réel.

    • Le <source_table espace réservé>représente la table source réelle.

  • Le seuil d’escalade du verrou du tableau est dépassé.

Dans ce scénario, le moteur de base de données ne transfère pas les verrous de la table.

Cause

Ce problème survient parce que SQL Server ne compte pas en interne tous les nouveaux verrous générés par les opérations d’insertion. C’est pourquoi le seuil d’escalade de verrou peut ne pas être déclenché quand il est requis.

Résolution

Informations sur le Service Pack pour SQL Server 2008

Pour résoudre ce problème, procurez-vous le dernier Service Pack pour SQL Server 2008. pour plus d’informations, cliquez sur le numéro ci-dessous pour consulter l’article de la base de connaissances Microsoft :

968382 Obtention du dernier Service Pack pour SQL Server 2008

Informations sur le Service Pack pour SQL Server 2008 R2

Pour résoudre ce problème, procurez-vous le dernier Service Pack pour SQL Server 2008 R2. Pour plus d’informations, cliquez sur le numéro ci-dessous pour consulter l’article de la base de connaissances Microsoft :

2527041Obtention du dernier Service Pack pour SQL Server 2008 R2

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.Ce problème a été corrigé pour la première fois dans SQL Server 2008 Service Pack 2 pour SQL Server 2008. ce problème a été corrigé dans SQL Server 2008 R2 Service Pack 1 pour SQL Server 2008 R2.

Informations supplémentaires

Pour plus d’informations sur la réaffectation de verrou, visitez le site Web Microsoft TechNet suivant :

Informations générales sur l’escalade du verrouPour déterminer si les verrouillages d’une table sont transférés, exécutez les instructions Transact-SQL suivantes :

USE tempdbGOCREATE TABLE x (i INT NOT NULL PRIMARY KEY)GOBEGIN TRANINSERT xSELECT TOP (40000)ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rFROM master..spt_values a, master..spt_values bORDER BYrSELECTCOUNT(*)FROM sys.dm_tran_locksWHERE request_session_id = @@SPID ROLLBACKGODROP TABLE x 

Si les verrouillages de la table sont transférés, la dernière instruction SELECT renvoie une valeur de 1 ou 2. Si les verrouillages de la table ne sont pas escaladés, la dernière instruction SELECT renvoie une valeur de 40 066 ou 40 067.

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×