Condividi tramite


sp_lock (Transact-SQL)

Si applica a: SQL Server

Visualizza informazioni relative ai blocchi.

Importante

Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Per ottenere informazioni sui blocchi nel motore di database di SQL Server, usare la vista a gestione dinamica sys.dm_tran_locks.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sp_lock
    [ [ @spid1 = ] spid1 ]
    [ , [ @spid2 = ] spid2 ]
[ ; ]

Argomenti

[ @spid1 = ] spid1

Un motore di database numero id di sessione da sys.dm_exec_sessions cui l'utente desidera bloccare le informazioni. @spid1 è int, con il valore predefinito NULL. Eseguire sp_who per ottenere informazioni sul processo sulla sessione. Se @spid1 non viene specificato, vengono visualizzate informazioni su tutti i blocchi.

[ @spid2 = ] spid2

Un altro motore di database numero ID di sessione da sys.dm_exec_sessions che potrebbe avere un blocco contemporaneamente a @spid1 e su cui l'utente desidera anche informazioni. @spid2 è int, con un valore predefinito .NULL

Valori del codice restituito

0 (esito positivo).

Set di risultati

Il sp_lock set di risultati contiene una riga per ogni blocco mantenuto dalle sessioni specificate nei parametri @spid1 e @spid2 . Se non viene specificato né @spid1@spid2, il set di risultati segnala i blocchi per tutte le sessioni attualmente attive nell'istanza del motore di database.

Nome colonna Tipo di dati Descrizione
spid smallint Numero id sessione motore di database per il processo che richiede il blocco.
dbid smallint Numero di identificazione del database in cui il blocco è attivato. È possibile usare la DB_NAME() funzione per identificare il database.
ObjId int Numero di identificazione dell'oggetto per cui il blocco è attivato. È possibile usare la OBJECT_NAME() funzione nel database correlato per identificare l'oggetto. Un valore di 99 è un caso speciale che indica un blocco su una delle pagine di sistema utilizzate per registrare l'allocazione delle pagine in 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 singola riga in una tabella identificata da un identificatore di riga (RID).
KEY = Blocco all'interno di un indice che protegge un intervallo di chiavi nelle transazioni serializzabili.
PAG = Blocca su una pagina di dati o indice.
EXT = Blocca su un extent.
TAB = Blocca su un'intera tabella, inclusi tutti i dati e gli indici.
DB = Blocco su un database.
FIL = Blocco in un file di database.
APP = Blocca su una risorsa specificata dall'applicazione.
MD = Blocca i metadati o le informazioni del catalogo.
HBT = Blocco su un heap o un albero B (HoBT). Queste informazioni sono incomplete in SQL Server.
AU = Blocca su un'unità di allocazione. Queste informazioni sono incomplete in SQL Server.
Resource nchar(32) Valore che identifica la risorsa bloccata. Il formato del valore dipende dal tipo di risorsa identificata nella Type colonna:

Type Valore: Resource Valore
RID: identificatore nel formato fileid:pagenumber:rid, dove fileid identifica il file contenente la pagina, pagenumber identifica la pagina contenente la riga e rid identifica la riga specifica nella pagina. fileid corrisponde alla file_id colonna nella vista del sys.database_files catalogo.
KEY: numero esadecimale utilizzato internamente dal motore di database.
PAG: numero nel formato fileid:pagenumber, dove fileid identifica il file contenente la pagina e pagenumber identifica la pagina.
EXT: numero che identifica la prima pagina nell'extent. Il numero è nel formato fileid:pagenumber.
TAB: nessuna informazione specificata perché la tabella è già identificata nella ObjId colonna .
DB: nessuna informazione specificata perché il database è già identificato nella dbid colonna .
FIL: identificatore del file, che corrisponde alla file_id colonna nella vista del sys.database_files catalogo.
APP: identificatore univoco per la risorsa dell'applicazione bloccata. Nel formato DbPrincipalId:<first two to 16 characters of the resource string><hashed value>.
MD: varia in base al tipo di risorsa. Per altre informazioni, vedere la descrizione della resource_description colonna in sys.dm_tran_locks.
HBT: nessuna informazione specificata. Usare invece la sys.dm_tran_locks visualizzazione a gestione dinamica.
AU: nessuna informazione specificata. Usare invece la sys.dm_tran_locks visualizzazione a gestione dinamica.
Mode nvarchar(8) Modalità di blocco richiesta. I possibili valori sono i seguenti:

NULL = Non viene concesso alcun accesso alla risorsa. Funge da segnaposto.
Sch-S = Stabilità dello schema. Assicura che un elemento dello schema, ad esempio una tabella o un indice, non venga eliminato mentre qualsiasi sessione contiene 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 sulle risorse che potrebbero essere eventualmente aggiornate. Viene usato per evitare una forma comune di deadlock che si verifica quando più sessioni bloccano le risorse per un potenziale aggiornamento in un secondo momento.
X = Esclusivo. La sessione attiva dispone dell'accesso esclusivo alla risorsa.
IS = Finalità condivisa. Indica l'intenzione di impostare blocchi condivisi (S) su alcune risorse subordinate nella gerarchia dei blocchi.
IU = Aggiornamento finalità. Indica l'intenzione di impostare blocchi di aggiornamento (U) su alcune risorse subordinate nella gerarchia dei blocchi.
IX = Finalità esclusiva. Indica l'intenzione di impostare blocchi esclusivi (X) su alcune risorse subordinate nella gerarchia dei blocchi.
SIU = Aggiornamento delle finalità condivise. Indica l'accesso condiviso a una risorsa con l'intenzione di acquisire blocchi di aggiornamento su risorse subordinate nella gerarchia dei blocchi.
SIX = Finalità condivisa esclusiva. Indica l'accesso condiviso a una risorsa con l'intenzione di acquisire blocchi esclusivi su risorse subordinate nella gerarchia dei blocchi.
UIX = Aggiorna finalità esclusiva. 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 = Intervallo di chiavi condiviso e blocco risorsa condivisa. Indica un'analisi di intervallo serializzabile.
RangeS_U = Intervallo di chiavi condiviso e Blocco della risorsa di aggiornamento. Indica un'analisi di aggiornamento serializzabile.
RangeI_N = Inserisci intervallo di chiavi e blocco risorsa Null. Utilizzato per verificare gli intervalli prima di inserire una nuova chiave in un indice.
RangeI_S = Blocco di conversione dell'intervallo di chiavi. Creato da una sovrapposizione dei blocchi RangeI_N e S.
RangeI_U = Blocco di conversione dell'intervallo di chiavi creato da una sovrapposizione di blocchi RangeI_N e U.
RangeI_X = Blocco di conversione dell'intervallo di chiavi creato da una sovrapposizione di blocchi RangeI_N e X.
RangeX_S = Blocco di conversione dell'intervallo di chiavi creato da una sovrapposizione di RangeI_N e RangeS_S. RangeS_S.
RangeX_U = Blocco di conversione dell'intervallo di chiavi creato da una sovrapposizione di blocchi RangeI_N e RangeS_U.
RangeX_X = Intervallo di chiavi esclusivo e blocco esclusivo delle risorse. Si tratta di un blocco di conversione utilizzato quando viene aggiornata una chiave in un intervallo.
Status nvarchar(5) Stato della richiesta di blocco:

CNVRT: il blocco viene convertito da un'altra modalità, ma la conversione viene bloccata da un altro processo che contiene un blocco con una modalità in conflitto.
GRANT: il blocco è stato ottenuto.
WAIT: il blocco viene bloccato da un altro processo che contiene un blocco con una modalità in conflitto.

Osservazioni:

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

  • Utilizzo SET TRANSACTION ISOLATION LEVEL di per specificare il livello di blocco per una sessione. Per la sintassi e le restrizioni, vedere SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • Uso degli hint di tabella di blocco per specificare il livello di blocco per un singolo riferimento di una tabella in una FROM clausola . Per la sintassi e le restrizioni, vedere Hint di tabella (Transact-SQL).

Tutte le transazioni distribuite non associate a una sessione sono transazioni orfane. Il motore di database assegna a tutte le transazioni distribuite orfane il valore SPID di -2, che semplifica l'identificazione delle transazioni distribuite bloccate da parte di un utente. Per altre informazioni, vedere Usare transazioni contrassegnate per ripristinare in modo coerente i database correlati.

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE.

Esempi

R. Elencare tutti i blocchi

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

USE master;
GO
EXEC sp_lock;
GO

B. Elencare un blocco da 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