sp_lock (Transact-SQL)
Data aggiornamento: 14 aprile 2006
Visualizza informazioni relative ai blocchi.
Importante: |
---|
Questo argomento è incluso in Microsoft SQL Server 2005 per compatibilità con le versioni precedenti. Per informazioni sui blocchi nel Motore di database di SQL Server 2005, utilizzare la vista a gestione dinamica sys.dm_tran_locks. Per ulteriori informazioni, vedere sys.dm_tran_locks. |
Importante: |
---|
Questa funzionalità è stata modificata rispetto alle versioni precedenti di SQL Server. Per ulteriori informazioni, vedere Modifiche che possono causare problemi di funzionamento apportate alle funzionalità del Motore di database in SQL Server 2005.. |
Convenzioni 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.
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 né @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 b-tree. Queste informazioni non sono complete in SQL Server 2005. AU = Blocco su un'unità di allocazione. Queste informazioni non sono complete in SQL Server 2005. |
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. 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 di massa. Utilizzato dalle operazioni di massa. 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 table_hint (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.
Valori restituiti
0 (esito positivo)
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
Vedere anche
Riferimento
sys.dm_tran_locks
DB_NAME (Transact-SQL)
KILL (Transact-SQL)
OBJECT_NAME (Transact-SQL)
sp_who (Transact-SQL)
sys.database_files (Transact-SQL)
sys.dm_os_tasks
sys.dm_os_threads
Guida in linea e informazioni
Cronologia modifiche
Versione
Cronologia
14 aprile 2006
Nome
Definizione
Contenuto modificato:
- Spostamento dell'esempio in sys.dm_os_tasks.
- Sostituzione dei riferimenti a SPID con quelli relativi all'ID di sessione