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 = ] spid1 ]
    [ , [ @spid2 = ] spid2 ]
[ ; ]

Arguments

[ @spid1 = ] spid1

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

[ @spid2 = ] spid2

Une autre Moteur de base de données numéro d’ID de session à partir duquel sys.dm_exec_sessions un verrou peut avoir un verrou en même temps que @spid1 et sur lequel l’utilisateur souhaite également des informations. @spid2 est int, avec la valeur par défaut NULL.

Valeurs des codes de retour

0 (réussite).

Jeu de résultats

Le sp_lock jeu de résultats contient une ligne pour chaque verrou détenu 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 DB_NAME() fonction 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 OBJECT_NAME() fonction dans la base de données associée pour identifier l’objet. Une valeur est 99 un cas particulier qui indique un verrou sur l’une des pages système utilisées pour enregistrer l’allocation de 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 = Verrouiller 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 = Verrouiller sur une page de données ou d’index.
EXT = Verrouiller sur une étendue.
TAB = Verrou sur une table entière, y compris toutes les données et tous les index.
DB = Verrouiller sur une base de données.
FIL = Verrouiller sur un fichier de base de données.
APP = Verrouiller sur une ressource spécifiée par l’application.
MD = Verrous sur les métadonnées ou les informations de catalogue.
HBT = Verrou sur un tas ou un B-Tree (HoBT). Ces informations sont incomplètes dans SQL Server.
AU = Verrouiller sur une unité d’allocation. Ces informations sont incomplètes dans SQL Server.
Resource nchar(32) Valeur identifiant la ressource verrouillée. Le format de la valeur dépend du type de ressource identifié dans la Type colonne :

Type Valeur : Resource valeur
RID: identificateur au format fileid:pagenumber:rid, où fileid identifie le fichier contenant la page, pagenumber identifie la page contenant la ligne et rid identifie la ligne spécifique de la page. fileid correspond à la colonne dans l’affichage file_id sys.database_files catalogue.
KEY: nombre hexadécimal utilisé en interne par le Moteur de base de données.
PAG: nombre au format fileid:pagenumber, où fileid identifie le fichier contenant la page et pagenumber identifie la page.
EXT: nombre identifiant la première page dans l’étendue. Le nombre est au format fileid:pagenumber.
TAB: aucune information fournie, car la table est déjà identifiée dans la ObjId colonne.
DB: aucune information fournie, car la base de données est déjà identifiée dans la dbid colonne.
FIL: identificateur du fichier, qui correspond à la file_id colonne dans l’affichage sys.database_files catalogue.
APP: identificateur unique à la ressource d’application verrouillée. Au format DbPrincipalId:<first two to 16 characters of the resource string><hashed value>.
MD: varie selon le type de ressource. Pour plus d’informations, consultez la description de la resource_description colonne dans sys.dm_tran_locks.
HBT: aucune information fournie. Utilisez plutôt la sys.dm_tran_locks vue de gestion dynamique.
AU: aucune information fournie. Utilisez plutôt la sys.dm_tran_locks vue de gestion dynamique.
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 qu’un élément de schéma, tel qu’une table ou un index, n’est pas supprimé pendant qu’une session contient un verrou de stabilité de schéma sur l’élément de 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 = Partagé. La session détenant le verrou peut disposer d'un accès partagé à la ressource.
U = Mise à jour. Indique un verrou de mise à jour acquis sur les ressources qui peuvent éventuellement être mis à jour. Il est utilisé pour empêcher une forme courante d’interblocage qui se produit lorsque plusieurs sessions verrouillent des ressources pour une mise à jour potentielle ultérieure.
X = Exclusif. La session détenant le verrou peut disposer d'un accès exclusif à la ressource.
IS = Intention partagée. Indique l'intention de placer des verrous S sur certaines ressources subordonnées dans la hiérarchie de verrouillage.
IU = Mise à jour de l’intention. Indique l'intention de placer des verrous U sur certaines ressources subordonnées dans la hiérarchie de verrouillage.
IX = Intention exclusive. Indique l'intention de placer des verrous X sur certaines ressources subordonnées dans la hiérarchie de verrouillage.
SIU = Mise à jour de l’intention 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 = Intention partagée exclusive. 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 = Mettre à jour l’intention exclusive. 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 clé partagée et de ressource partagée. Indique une analyse de plage sérialisable.
RangeS_U = Verrouillage de la plage de clés partagée et mettre à jour la ressource. Indique une analyse de mise à jour sérialisable.
RangeI_N = Insérer une plage de clés et un verrou de ressource Null. Utilisé pour tester les étendues avant l'insertion d'une nouvelle clé dans un index.
RangeI_S = Verrou de conversion de plage de clés. Créé par une superposition des verrous RangeI_N et S.
RangeI_U = Verrou de conversion de plage de clés créé par un chevauchement de verrous RangeI_N et U.
RangeI_X = Verrou de conversion de plage de clés créé par un chevauchement de verrous RangeI_N et X.
RangeX_S = Verrou de conversion de plage de clés créé par un chevauchement de RangeI_N et de RangeS_S. RangeS_S.
RangeX_U = Verrou de conversion de plage de clés créé par un chevauchement des verrous RangeI_N et RangeS_U.
RangeX_X = Verrouillage exclusif de la plage de clés et des ressources exclusives. Verrou de conversion utilisé lors de la mise à jour d'une clé dans une étendue.
Status nvarchar(5) État de la demande de verrouillage :

CNVRT: le verrou est converti à partir d’un autre mode, mais la conversion est bloquée par un autre processus contenant un verrou avec un mode en conflit.
GRANT: Le verrou a été obtenu.
WAIT: le verrou est bloqué par un autre processus qui contient un verrou en mode conflictuel.

Notes

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

  • Utilisation 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).

  • Utilisation des indicateurs de table de verrouillage pour spécifier le niveau de verrouillage d’une référence individuelle d’une table dans une FROM clause. 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, -2ce 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 des bases de données associées de manière cohérente.

autorisations

Nécessite l'autorisation VIEW SERVER STATE.

Exemples

R. Répertorier 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. Répertorier un verrou à partir d’un processus à 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