sp_lock (Transact-SQL)

Visualizza informazioni relative ai blocchi.

Nota importanteImportante

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Per informazioni sui blocchi in Motore di database di SQL Server, utilizzare la vista a gestione dinamica sys.dm_tran_locks.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • [ @spid1 = ] 'session ID1'
    Numero di ID di sessione (SPID in SQL Server 2000 e versioni precedenti) di Motore di database incluso in sys.dm_exec_sessions per il quale si desidera ottenere informazioni sui blocchi. session ID1 è di tipo int e il valore predefinito è NULL. Per ottenere informazioni sulla sessione, eseguire sp_who. Se non si specifica session ID1, verranno visualizzate informazioni relative a tutti i blocchi.

  • [ @spid2 = ] 'session ID2'
    Ulteriore numero di ID di sessione di Motore di database incluso in sys.dm_exec_sessions che potrebbe mantenere attivo un blocco contemporaneamente a session ID1 e per il quale si desidera ottenere informazioni. session ID2 è di tipo int e il valore predefinito è NULL.

Valori restituiti

0 (esito positivo)

Set di risultati

Il set di risultati sp_lock contiene una riga per ogni blocco mantenuto attivo dalle sessioni specificate nei parametri @spid1 e @spid2. Se non si specificano né @spid1@spid2, il set di risultati conterrà i blocchi per tutte le sessioni attive nell'istanza di Motore di database.

Nome colonna

Tipo di dati

Descrizione

spid

smallint

Numero di ID di sessione di Motore di database per il processo che richiede il blocco.

dbid

smallint

Numero di identificazione del database in cui il blocco è attivato. Per identificare il database, è possibile utilizzare la funzione DB_NAME().

ObjId

int

Numero di identificazione dell'oggetto per cui il blocco è attivato. Per identificare l'oggetto, è possibile utilizzare la funzione OBJECT_NAME() nel database correlato. Il valore 99 rappresenta un caso speciale e indica un blocco su una delle pagine di sistema utilizzate per registrare l'allocazione delle pagine di un database.

IndId

smallint

Numero di identificazione dell'indice per cui il blocco è mantenuto attivo.

Type

nchar(4)

Tipo di blocco:

RID = Blocco su una sola riga di una tabella identificata da un identificatore di riga (RID).

KEY = Blocco all'interno di un indice che protegge un intervallo di chiavi in transazioni serializzabili.

PAG = Blocco su una pagina di dati o di indice.

EXT = Blocco su un extent.

TAB = Blocco su un'intera tabella, inclusi tutti i dati e gli indici.

DB = Blocco su un database.

FIL = Blocco su un file di database.

APP = Blocco su una risorsa specifica di un'applicazione.

MD = Blocco su metadati o informazioni del catalogo.

HBT = Blocco su un heap o un indice albero B. Queste informazioni non sono complete in SQL Server.

AU = Blocco su un'unità di allocazione. Queste informazioni non sono complete in SQL Server.

Resource

nchar(32)

Valore che identifica la risorsa bloccata. Il formato del valore dipende dal tipo di risorsa identificato nella colonna Type:

Type Valore: Resource Valore

RID: identificatore nel formato idfile:numeropagina:rid, dove idfile identifica il file contenente la pagina, numeropagina identifica la pagina contenente la riga e rid identifica la riga specifica nella pagina. idfile corrisponde alla colonna file_id nella vista del catalogo sys.database_files.

KEY: numero esadecimale utilizzato internamente da Motore di database.

PAG: numero nel formato idfile:numeropagina, dove idfile identifica il file contenente la pagina e numeropagina identifica la pagina.

EXT: numero che identifica la prima pagina nell'extent. Il numero è nel formato idfile:numeropagina.

TAB: non vengono fornite informazioni perché la tabella è già identificata nella colonna ObjId.

DB: non vengono fornite informazioni perché il database è già identificato nella colonna dbid.

FIL: identificatore del file, che corrisponde alla colonna file_id nella vista del catalogo sys.database_files.

APP: identificatore univoco della risorsa di applicazione bloccata. Nel formato DbPrincipleId:<primi 2-16 caratteri della stringa di risorsa><valore hash>.

MD: varia in base al tipo di risorsa. Per ulteriori informazioni, vedere la descrizione della colonna resource_description in sys.dm_tran_locks (Transact-SQL).

HBT: non vengono fornite informazioni. In alternativa utilizzare la vista a gestione dinamica sys.dm_tran_locks.

AU: non vengono fornite informazioni. In alternativa utilizzare la vista a gestione dinamica sys.dm_tran_locks.

Mode

nvarchar(8)

Modalità di blocco richiesta. I possibili valori sono i seguenti:

NULL = Non è concesso l'accesso alla risorsa. Funge da segnaposto.

Sch-S = Stabilità dello schema. Garantisce che nessun elemento dello schema, ad esempio una tabella o un indice, venga eliminato mentre in una sessione viene mantenuto attivo un blocco di stabilità dello schema sull'elemento dello schema.

Sch-M = Modifica dello schema. Deve essere impostato in tutte le sessioni in cui si desidera modificare lo schema della risorsa specificata. Assicura che nessun'altra sessione faccia riferimento all'oggetto specificato.

S = Condiviso. La sessione attiva dispone dell'accesso condiviso alla risorsa.

U = Aggiornamento. Indica un blocco di aggiornamento acquisito su risorse che potrebbero essere aggiornate. Viene utilizzato per evitare una forma comune di deadlock che si verifica quando in più sessioni vengono bloccate risorse che potrebbero essere aggiornate in un momento successivo.

X = Esclusivo. La sessione dispone dell'accesso esclusivo alla risorsa.

IS = Preventivo condiviso. Indica l'intenzione di impostare blocchi condivisi (S) su alcune risorse subordinate nella gerarchia dei blocchi.

IU = Preventivo aggiornamento. Indica l'intenzione di impostare blocchi di aggiornamento (U) su alcune risorse subordinate nella gerarchia dei blocchi.

IX = Preventivo esclusivo. Indica l'intenzione di impostare blocchi esclusivi (X) su alcune risorse subordinate nella gerarchia dei blocchi.

SIU = Condiviso preventivo aggiornamento. Indica l'accesso condiviso a una risorsa con l'intenzione di acquisire blocchi di aggiornamento su risorse subordinate nella gerarchia dei blocchi.

SIX = Condiviso preventivo esclusivo. Indica l'accesso condiviso a una risorsa con l'intenzione di acquisire blocchi esclusivi su risorse subordinate nella gerarchia dei blocchi.

UIX = Aggiornamento preventivo esclusivo. Indica un blocco di aggiornamento attivato su una risorsa con l'intenzione di acquisire blocchi esclusivi su risorse subordinate nella gerarchia dei blocchi.

BU = Aggiornamento bulk. Utilizzato dalle operazioni bulk.

RangeS_S = Blocco condiviso intervalli di chiavi e risorsa. Indica una scansione di intervallo serializzabile.

RangeS_U = Blocco condiviso intervalli di chiavi e aggiornamento risorsa. Indica una scansione di aggiornamento serializzabile.

RangeI_N = Blocco inserimento intervalli di chiavi e risorsa Null. Utilizzato per verificare gli intervalli prima di inserire una nuova chiave in un indice.

RangeI_S = Blocco conversione intervalli di chiavi. Creato da una sovrapposizione dei blocchi RangeI_N e S.

RangeI_U = Blocco conversione intervallo di chiavi creato da una sovrapposizione di blocchi RangeI_N e U.

RangeI_X = Blocco conversione intervallo di chiavi creato da una sovrapposizione di blocchi RangeI_N e X.

RangeX_S = Blocco conversione intervallo di chiavi creato da una sovrapposizione di blocchi RangeI_N e RangeS_S.

RangeX_U = Blocco conversione intervallo di chiavi creato da una sovrapposizione di blocchi RangeI_N e RangeS_U.

RangeX_X = Blocco esclusivo intervalli di chiavi e risorsa. Si tratta di un blocco di conversione utilizzato quando viene aggiornata una chiave in un intervallo.

Stato

nvarchar(5)

Stato della richiesta di blocco:

CNVRT: è in corso la conversione del blocco da un'altra modalità, ma la conversione è bloccata da un altro processo che mantiene attivo un blocco con una modalità in conflitto.

GRANT: il blocco è stato ottenuto.

WAIT: il blocco è bloccato da un altro processo che mantiene attivo un blocco con una modalità in conflitto.

Osservazioni

Gli utenti possono controllare il blocco delle operazioni di lettura mediante:

  • L'utilizzo di SET TRANSACTION ISOLATION LEVEL per specificare il livello di blocco per una sessione. Per informazioni sulla sintassi e sulle restrizioni, vedere SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • L'utilizzo di hint di tabella di blocco per specificare il livello di blocco per un singolo riferimento di una tabella in una clausola FROM. Per informazioni sulla sintassi e sulle restrizioni, vedere Hint di tabella (Transact-SQL).

Per ulteriori informazioni sui tipi di blocco utilizzati da Motore di database, vedere Utilizzo dei blocchi in Motore di database.

Tutte le transazioni distribuite non associate a una sessione sono transazioni orfane. In Motore di database a tutte le transazioni distribuite orfane viene assegnato il valore SPID -2, in modo da semplificare l'identificazione delle transazioni distribuite che causano un blocco. Per ulteriori informazioni, vedere Utilizzo delle transazioni contrassegnate (modello di recupero con registrazione completa).

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE.

Esempi

A. Elenco di tutti i blocchi

Nell'esempio seguente vengono visualizzate informazioni su tutti i blocchi attualmente mantenuti attivi in un'istanza di Motore di database.

USE master;
GO
EXEC sp_lock;
GO

B. Visualizzazione di un blocco di un processo a server singolo

Nell'esempio seguente vengono visualizzate informazioni sull'ID di processo 53, inclusi i blocchi.

USE master;
GO
EXEC sp_lock 53;
GO