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 di sintassi Transact-SQL

Sintassi

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

Argomenti

[ @spid1 = ] 'session ID1'Numero di ID di sessione motore di database da sys.dm_exec_sessions per cui l'utente desidera bloccare le informazioni. session ID1 è int con un valore predefinito NULL. Eseguire sp_who per ottenere informazioni sul processo sulla sessione. Se l'ID sessione1 non viene specificato, vengono visualizzate informazioni su tutti i blocchi.

[ @spid2 = ] 'session ID2'È un altro motore di database numero di ID sessione da sys.dm_exec_sessions che potrebbe avere un blocco contemporaneamente all'ID sessione1 e su cui l'utente desidera anche informazioni. session ID2 è int con un valore predefinito NULL.

Valori del codice restituito

0 (esito positivo)

Set di risultati

Il set di risultati sp_lock 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. 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 albero B (HoBT). Queste informazioni sono incomplete in SQL Server.

AU = Blocco su un'unità di allocazione. Queste informazioni sono incomplete in SQL Server.
Conto risorse nchar(32) Valore che identifica la risorsa bloccata. Il formato del valore dipende dal tipo di risorsa identificata nella colonna Tipo :

Valore del tipo: Valore risorsa

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. fileid corrisponde alla colonna file_id nella vista del catalogo sys.database_files .

KEY: numero esadecimale usato internamente dal 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: nessuna informazione specificata perché la tabella è già identificata nella colonna ObjId .

DB: nessuna informazione specificata 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 DbPrincipalId:first two to 16 characters of the resource string hashed value .In the format 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 colonna resource_description in sys.dm_tran_locks (Transact-SQL).

HBT: non vengono fornite informazioni. Usare invece sys.dm_tran_locks visualizzazione a gestione dinamica.

AU: non vengono fornite informazioni. Usare invece sys.dm_tran_locks visualizzazione a gestione dinamica.
Modalità 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. Impedisce che un 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 su tale elemento.

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 attiva 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 un'analisi di intervallo serializzabile.

RangeS_U = Blocco condiviso intervalli di chiavi e aggiornamento risorsa. Indica un'analisi 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:

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 pari a -2, che semplifica l'identificazione delle transazioni distribuite bloccate da parte di un utente. Per altre informazioni, vedere Usare transazioni contrassegnate per recuperare coerentemente i database correlati (modello di recupero con registrazione completa).

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE.

Esempi

R. Elenco di 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. 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  

Vedi anche

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)