sp_lock (Transact-SQL)

S’applique à :SQL Server

Affiche des informations sur les verrous.

Important

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Pour obtenir des informations sur les verrous dans le Moteur de base de données SQL Server, utilisez la vue de gestion dynamique sys.dm_tran_locks.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ]  
[ ; ]  

Arguments

[ @spid1 = ] 'session ID1'Numéro d’ID de session Moteur de base de données de sys.dm_exec_sessions pour lequel l’utilisateur souhaite verrouiller les informations. session ID1 est int avec une valeur par défaut de NULL. Exécutez sp_who pour obtenir des informations sur le processus sur la session. Si l’ID de session1 n’est pas spécifié, des informations sur tous les verrous sont affichées.

[ @spid2 = ] 'session ID2'Autre numéro d’ID de session Moteur de base de données de sys.dm_exec_sessions qui peut avoir un verrou en même temps que l’ID de session1 et sur lequel l’utilisateur souhaite également des informations. session ID2 est int avec une valeur par défaut de NULL.

Codet de retour

0 (succès)

Jeux de résultats

Le jeu de résultats sp_lock contient une ligne pour chaque verrou conservé par les sessions spécifiées dans les paramètres @spid1 et @spid2 . Si aucun @spid1 ni @spid2 n’est spécifié, le jeu de résultats signale les verrous pour toutes les sessions actuellement actives dans l’instance du Moteur de base de données.

Nom de la colonne Type de données Description
spid smallint Numéro d’ID de session Moteur de base de données pour le processus demandant le verrou.
dbid smallint Numéro d'identification de la base de données qui contient le verrou. Vous pouvez utiliser la fonction DB_NAME() pour identifier la base de données.
ObjId int Numéro d'identification de l'objet sur lequel le verrou est maintenu. Vous pouvez utiliser la fonction OBJECT_NAME() dans la base de données associée pour identifier l'objet. La valeur 99 indique l'existence d'un verrou sur l'une des pages système utilisées pour enregistrer l'allocation des pages dans une base de données.
IndId smallint Numéro d'identification de l'index sur lequel le verrou est maintenu.
Type nchar(4) Type du verrou :

RID = verrou sur une seule ligne d'une table, identifiée par un identificateur de ligne (RID).

KEY = verrou dans un index qui protège une plage de clés dans les transactions sérialisables.

PAG = verrou sur une page de données ou d'index.

EXT = verrou sur une extension.

TAB = verrou sur une table complète comprenant l'ensemble des index et des données.

DB = verrou sur une base de données.

FIL = verrou sur un fichier de base de données.

APP = verrou sur une ressource spécifiée par l'application.

MD = verrous sur des métadonnées ou informations de catalogue.

HBT = Verrouiller sur un tas ou un B-Tree (HoBT). Ces informations sont incomplètes dans SQL Server.

AU = verrou sur une unité d'allocation. Ces informations sont incomplètes dans SQL Server.
Ressource nchar(32) Valeur identifiant la ressource verrouillée. Le format de la valeur dépend du type de ressource identifié dans la colonne Type :

Valeur de type : valeur de ressource

RID : identificateur de la forme fileid:pagenumber:rid, où fileid désigne le fichier contenant la page, pagenumber la page comportant la ligne et rid la ligne spécifique de la page. fileid correspond à la colonne file_id dans l’affichage catalogue sys.database_files .

CLÉ : nombre hexadécimal utilisé en interne par l’Moteur de base de données.

PAG : nombre au format fileid:pagenumber, où fileid identifie le fichier contenant la page et pagenumber la page elle-même.

EXT : nombre identifiant la première page de l'étendue. Ce nombre est de la forme fileid:pagenumber.

TAB : Aucune information fournie, car la table est déjà identifiée dans la colonne ObjId .

Base de données : aucune information fournie, car la base de données est déjà identifiée dans la colonne dbid .

FIL : identificateur du fichier, qui correspond à la colonne file_id dans l’affichage catalogue sys.database_files .

APP : identificateur unique de la ressource d'application verrouillée. Au format DbPrincipalId :<first two to 16 characters of the resource string><hashed value>.

MD : varie d'un type de ressource à l'autre. Pour plus d’informations, consultez la description de la colonne resource_description dans sys.dm_tran_locks (Transact-SQL).

HBT : aucune information n'est fournie. Utilisez plutôt la vue de gestion dynamique sys.dm_tran_locks .

AU : aucune information n'est fournie. Utilisez plutôt la vue de gestion dynamique sys.dm_tran_locks .
Mode nvarchar(8) Le mode de verrou est demandé. Valeurs possibles :

NULL = aucun accès n'est accordé à la ressource. Sert d'espace réservé.

Sch-S = stabilité du schéma. Garantit que l'élément d'un schéma, tel qu'une table ou un index, n'est pas supprimé alors qu'une session contient un verrou de stabilité du schéma sur l'élément du schéma.

Sch-M = modification du schéma. Doit être détenu par toute session destinée à modifier le schéma de la ressource spécifiée. Garantit qu'aucune autre session ne fait référence à l'objet indiqué.

S = partage. La session détenant le verrou peut disposer d'un accès partagé à la ressource.

U = mise à jour. Indique qu'un verrouillage de mise à jour a été posé sur des ressources qui peuvent finalement être mises à jour. Utilisé pour éviter les formes courantes de blocages qui se produisent lorsque plusieurs sessions verrouillent des ressources en vue d'une mise à jour éventuelle.

X = exclusif. La session détenant le verrou peut disposer d'un accès exclusif à la ressource.

IS = partage intentionnel. Indique l'intention de placer des verrous S sur certaines ressources subordonnées dans la hiérarchie de verrouillage.

IU = mise à jour intentionnelle. Indique l'intention de placer des verrous U sur certaines ressources subordonnées dans la hiérarchie de verrouillage.

IX = exclusion intentionnelle. Indique l'intention de placer des verrous X sur certaines ressources subordonnées dans la hiérarchie de verrouillage.

SIU = mise à jour intentionnelle partagée. Signale des accès partagés à une ressource dans le but de poser des verrous de mise à jour sur les ressources subordonnées dans la hiérarchie de verrouillage.

SIX = partage intentionnel exclusif. Signale des accès partagés à une ressource dans le but de poser des verrous exclusifs sur les ressources subordonnées dans la hiérarchie de verrouillage.

UIX = mise à jour exclusive intentionnelle. Signale un verrou de mise à jour sur une ressource dans le but de poser des verrous exclusifs sur les ressources subordonnées dans la hiérarchie de verrouillage.

BU = mise à jour en bloc. Utilisé par les opérations en bloc.

RangeS_S = verrou de groupes de clés partagés et de ressources partagées. Indique une analyse de plage sérialisable.

RangeS_U = verrou de groupes de clés partagés et de ressources de mise à jour. Indique une analyse de mise à jour sérialisable.

RangeI_N = insérer le verrou de groupes de clés et de ressources NULL. Utilisé pour tester les étendues avant l'insertion d'une nouvelle clé dans un index.

RangeI_S = verrou de conversion de groupes de clés. Créé par une superposition des verrous RangeI_N et S.

RangeI_U = verrou de conversion de groupes de clés créé par une superposition des verrous RangeI_N et U.

RangeI_X = verrou de conversion de groupes de clés créé par une superposition des verrous RangeI_N et X.

RangeX_S = verrou de conversion de groupes de clés créé par une superposition des verrous RangeI_N et RangeS_S.

RangeX_U = verrou de conversion de groupes de clés créé par une superposition des verrous RangeI_N et RangeS_U.

RangeX_X = verrou de groupes de clés exclusifs et de ressources exclusives. Verrou de conversion utilisé lors de la mise à jour d'une clé dans une étendue.
État nvarchar(5) État de la demande de verrouillage :

CNVRT : le verrou est converti depuis un autre mode, mais la conversion est bloquée par un autre processus qui maintient un verrou dont le mode est en conflit.

GRANT : un verrou a été obtenu.

WAIT : le verrou est bloqué par un autre processus qui maintient un verrou dont le mode est en conflit.

Notes

Les utilisateurs peuvent contrôler le verrouillage des opérations de lecture en utilisant :

  • SET TRANSACTION ISOLATION LEVEL pour spécifier le niveau de verrouillage d'une session. Pour connaître la syntaxe et les restrictions, consultez SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • des indicateurs de table de verrouillage pour spécifier le niveau de verrouillage d'une référence spécifique d'une table dans une clause FROM. Pour connaître la syntaxe et les restrictions, consultez Indicateurs de table (Transact-SQL).

Toutes les transactions distribuées qui ne sont pas associées à une session sont des transactions orphelines. Le Moteur de base de données affecte toutes les transactions distribuées orphelines à la valeur SPID de -2, ce qui facilite l’identification par un utilisateur des transactions distribuées bloquantes. Pour plus d’informations, consultez Utiliser des transactions marquées pour récupérer les bases de données associées de manière cohérente (mode de récupération complète).

Autorisations

Nécessite l’autorisation VIEW SERVER STATE.

Exemples

R. Affichage de tous les verrous

L’exemple suivant affiche des informations sur tous les verrous actuellement conservés dans une instance du Moteur de base de données.

USE master;  
GO  
EXEC sp_lock;  
GO  

B. Affichage des verrous d'un processus de serveur unique

L'exemple suivant affiche des informations, notamment à propos des verrous, sur l'ID de processus 53.

USE master;  
GO  
EXEC sp_lock 53;  
GO  

Voir aussi

sys.dm_tran_locks (Transact-SQL)
DB_NAME (Transact-SQL)
KILL (Transact-SQL)
OBJECT_NAME (Transact-SQL)
sp_who (Transact-SQL)
sys.database_files (Transact-SQL)
sys.dm_os_tasks (Transact-SQL)
sys.dm_os_threads (Transact-SQL)