sp_lock (Transact-SQL)

Aplica-se a:SQL Server

Reporta informações sobre bloqueios.

Importante

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Para obter informações sobre bloqueios no Mecanismo de Banco de Dados do SQL Server, use o modo de exibição de gerenciamento dinâmico sys.dm_tran_locks .

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

[ @spid1 = ] 'session ID1' É um número de ID de sessão do Mecanismo de Banco de Dados de sys.dm_exec_sessions para o qual o usuário deseja bloquear informações. session ID1 é int com um valor padrão de NULL. Execute sp_who para obter informações do processo sobre a sessão. Se o ID da sessão1 não for especificado, as informações sobre todos os bloqueios serão exibidas.

[ @spid2 = ] 'session ID2'É outro número de ID de sessão do Mecanismo de Banco de Dados de sys.dm_exec_sessions que pode ter um bloqueio ao mesmo tempo que o ID de sessão1 e sobre o qual o usuário também deseja informações. session ID2 é int com um valor padrão de NULL.

Valores do código de retorno

0 (êxito)

Conjuntos de resultados

O conjunto de resultados sp_lock contém uma linha para cada bloqueio mantido pelas sessões especificadas nos parâmetros @spid1 e @spid2 . Se nem @spid1 nem @spid2 forem especificados, o conjunto de resultados relatará os bloqueios de todas as sessões atualmente ativas na instância do Mecanismo de Banco de Dados.

Nome da coluna Tipo de dados Descrição
spid smallint O número de ID de sessão do Mecanismo de Banco de Dados para o processo que solicita o bloqueio.
dbid smallint O número de identificação do banco de dados no qual o bloqueio é mantido. Você pode usar a função DB_NAME() para identificar o banco de dados.
ObjId int O número de identificação do objeto no qual o bloqueio é mantido. Você pode usar a função OBJECT_NAME() no banco de dados relacionado para identificar o objeto. Um valor de 99 é um caso especial que indica um bloqueio em uma das páginas do sistema usada para registrar a alocação de páginas em um banco de dados.
IndId smallint O número de identificação do índice no qual o bloqueio é mantido.
Tipo ncar(4) O tipo de bloqueio:

RID = Bloqueio em uma única linha na tabela identificada por um identificador de linha (RID).

KEY = Bloqueio dentro de um índice que protege um intervalo de chaves em transações serializáveis.

PAG = Bloqueio em uma página de dados ou de índice.

EXT = Bloqueio em uma extensão.

TAB = Bloqueio em uma tabela inteira, inclusive todos os dados e índices.

DB = Bloqueio em um banco de dados.

FIL = Bloqueio em um arquivo de banco de dados.

APP = Bloqueio em um recurso de aplicativo especificado.

MD = Bloqueio em metadados ou informações do catálogo.

HBT = Bloqueio em uma pilha ou árvore B (HoBT). Essas informações estão incompletas no SQL Server.

AU = Bloqueio em uma unidade de alocação. Essas informações estão incompletas no SQL Server.
Recurso nchar(32) O valor que identifica o recurso bloqueado. O formato do valor depende do tipo de recurso identificado na coluna Tipo :

Valor do tipo: Valor do recurso

RID: um identificador no formato fileid:pagenumber:rid, onde fileid identifica o arquivo que contém a página, pagenumber identifica a página que contém a linha e rid identifica a linha específica da página. FileId corresponde à coluna file_id na exibição de catálogo sys.database_files.

CHAVE: Um número hexadecimal usado internamente pelo Mecanismo de Banco de Dados.

PAG: Um número no formato idarquivo:númeropágina, onde idarquivo identifica o arquivo que contém a página e númeropágina identifica a página.

EXT: Um número que identifica a primeira página na extensão. O número está no formato idarquivo:númeropágina.

TAB: Nenhuma informação fornecida porque a tabela já está identificada na coluna ObjId .

DB: Nenhuma informação fornecida porque o banco de dados já está identificado na coluna dbid .

FIL: O identificador do arquivo, que corresponde à coluna file_id na exibição de catálogo sys.database_files.

APP: Um identificador exclusivo para o recurso de aplicativo a ser bloqueado. No formato DbPrincipalId:<primeiros dois a 16 caracteres do valor> hash da cadeia de caracteres><do recurso.

MD: varia por tipo de recurso. Para obter mais informações, consulte a descrição da coluna resource_description no sys.dm_tran_locks (Transact-SQL).

HBT = Nenhuma informação fornecida. Em vez disso, use o modo de exibição de gerenciamento dinâmico sys.dm_tran_locks .

AU: Nenhuma informação fornecida. Em vez disso, use o modo de exibição de gerenciamento dinâmico sys.dm_tran_locks .
Modo nvarchar(8) O modo de bloqueio solicitado. Pode ser:

NULL = Nenhum acesso concedido ao recurso. Funciona como espaço reservado.

Sch-S = Estabilidade do esquema. Assegura que um elemento de esquema, como uma tabela ou índice, não seja cancelado enquanto qualquer sessão mantém o bloqueio de estabilidade do esquema no elemento do esquema.

Sch-M = Modificação do esquema. Deve ser mantido por qualquer sessão que desejar alterar o esquema do recurso especificado. Assegura que nenhuma outra sessão esteja fazendo referência ao objeto indicado.

S = Compartilhado. A sessão mantenedora possui acesso compartilhado ao recurso.

U = Atualizar. Indica um bloqueio de atualização adquirido em recursos que podem ser atualizados eventualmente. É usado para evitar uma forma comum de deadlock que ocorre quando várias sessões bloqueiam recursos para uma atualização potencial em um momento posterior.

X = Exclusivo. A sessão mantenedora possui acesso exclusivo ao recurso.

IS = Tentativa compartilhada. Indica a intenção de colocar bloqueios S em algum recurso subordinado na hierarquia de bloqueio.

IU = Atualização da tentativa. Indica a intenção de colocar bloqueios U em algum recurso subordinado na hierarquia de bloqueio.

IX = Exclusivo da tentativa. Indica a intenção de colocar bloqueios X em algum recurso subordinado na hierarquia de bloqueio.

SIU = Atualização da tentativa compartilhada. Indica o acesso compartilhado a um recurso com a intenção de adquirir bloqueios de atualização em recursos subordinados na hierarquia de bloqueio.

SIX = Exclusivo da tentativa compartilhada. Indica o acesso compartilhado a um recurso com a intenção de adquirir bloqueios exclusivos em recursos subordinados na hierarquia de bloqueio.

UIX = Atualizar exclusivo da tentativa. Indica a manutenção de um bloqueio de atualização de um recurso com a intenção de adquirir bloqueios exclusivos em recursos subordinados na hierarquia de bloqueio.

BU = Atualização em massa. Usado por operações em massa.

RangeS_S = Intervalo de chave compartilhada e bloqueio de recurso compartilhado. Indica varredura de intervalo serializável.

RangeS_U = Intervalo de chave compartilhada e bloqueio de recurso de atualização. Indica verificação de atualização serializável.

RangeI_N = Intervalo de chave de inserção e bloqueio de recurso nulo. Usado para testar intervalos antes de inserir uma nova chave em um índice.

RangeI_S = Bloqueio de conversão do intervalo de chave. Criado por uma sobreposição dos bloqueios RangeI_N e S.

RangeI_U = Bloqueio de conversão de intervalo de chave criado por uma sobreposição dos bloqueios RangeI_N e U.

RangeI_X = Bloqueio de conversão de intervalo de chave criado por uma sobreposição dos bloqueios RangeI_N e X.

RangeX_S = Bloqueio de conversão de intervalo de chaves criado por uma sobreposição de bloqueios RangeI_N e RangeS-S.

RangeIX_U = Bloqueio de conversão de intervalo de chave criado por uma sobreposição dos bloqueios RangeI_N e RangeS-U.

RangeX_X = Bloqueio de intervalo de chave exclusivo e de recurso exclusivo. Este é um bloqueio de conversão usado na atualização de uma chave em um intervalo.
Status Nvarchar(5) O estado de solicitação do bloqueio:

CNVRT: O bloqueio está sendo convertido de outro modo, mas a conversão está bloqueada por outro processo que mantém um bloqueio com um modo conflitante.

GRANT: O bloqueio foi obtido.

WAIT: O bloqueio está bloqueado por outro processo que mantém um bloqueio com um modo conflitante.

Comentários

Os usuários podem controlar o bloqueio de operações de leitura:

  • Usando SET TRANSACTION ISOLATION LEVEL para especificar o nível de bloqueio de uma sessão. Para sintaxe e restrições, consulte SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • Usando dicas de tabela de bloqueio para especificar o nível de bloqueio de uma referência individual de uma tabela em uma cláusula FROM. Para obter sintaxe e restrições, confira Dicas de tabela (Transact-SQL).

Todas as transações distribuídas não associadas a uma sessão são transações órfãs. O Mecanismo de Banco de Dados atribui a todas as transações distribuídas órfãs o valor SPID de -2, o que torna mais fácil para um usuário identificar transações distribuídas em bloqueio. Para obter mais informações, veja Usar transações marcadas para recuperar bancos de dados relacionados de forma consistente (Modelo de recuperação completa).

Permissões

Requer a permissão VIEW SERVER STATE.

Exemplos

R. Listando todos os bloqueios

O exemplo a seguir exibe informações sobre todos os bloqueios mantidos atualmente em uma instância do Mecanismo de Banco de Dados.

USE master;  
GO  
EXEC sp_lock;  
GO  

B. Listando um bloqueio de um processo de servidor único

O exemplo a seguir exibe informações, inclusive bloqueios, sobre a identificação do processo 53.

USE master;  
GO  
EXEC sp_lock 53;  
GO  

Confira também

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)