sp_lock (Transact-SQL)

Aplica-se: 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 a exibição de gerenciamento dinâmico sys.dm_tran_locks .

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

@spid1 [ = ] spid1

Um número de ID de sessão do Mecanismo de Banco de Dados para o qual o usuário deseja informações de sys.dm_exec_sessions bloqueio. @spid1 é int, com um padrão de NULL. Execute sp_who para obter informações do processo sobre a sessão. Se @spid1 não for especificado, as informações sobre todos os bloqueios serão exibidas.

@spid2 [ = ] spid2

Outro número de ID de sessão do Mecanismo de Banco de sys.dm_exec_sessions Dados pode ter um bloqueio ao mesmo tempo que @spid1 e sobre o qual o usuário também deseja informações. @spid2 é int, com um padrão de NULL.

Valores do código de retorno

0 (sucesso).

Conjunto de resultados

O sp_lock conjunto de resultados 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 da 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 DB_NAME() função 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 OBJECT_NAME() função 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 usadas 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.
Type nchar(4) O tipo de bloqueio:

RID = Bloquear em uma única linha em uma tabela identificada por um identificador de linha (RID).
KEY = Bloqueie dentro de um índice que protege um intervalo de chaves em transações serializáveis.
PAG = Bloquear em uma página de dados ou índice.
EXT = Bloquear em uma extensão.
TAB = Bloqueie uma tabela inteira, incluindo todos os dados e índices.
DB = Bloquear em um banco de dados.
FIL = Bloquear em um arquivo de banco de dados.
APP = Bloquear em um recurso especificado pelo aplicativo.
MD = Bloqueios em metadados ou informações de catálogo.
HBT = Bloqueio em um heap ou B-Tree (HoBT). Essas informações estão incompletas no SQL Server.
AU = Bloquear em uma unidade de alocação. Essas informações estão incompletas no SQL Server.
Resource nchar(32) O valor que identifica o recurso bloqueado. O formato do valor depende do tipo de recurso identificado na Type coluna:

Type Valor: Resource Valor
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 na página. fileid corresponde à file_id coluna na exibição do sys.database_files catálogo.
KEY: um número hexadecimal usado internamente pelo Mecanismo de Banco de Dados.
PAG: Um número no formato fileid:pagenumber, onde fileid identifica o arquivo que contém a página e pagenumber identifica a página.
EXT: Um número que identifica a primeira página na extensão. O número está no formato fileid:pagenumber.
TAB: Nenhuma informação fornecida porque a tabela já está identificada na ObjId coluna.
DB: Nenhuma informação fornecida porque o banco de dados já está identificado na dbid coluna.
FIL: O identificador do arquivo, que corresponde à file_id coluna na exibição do sys.database_files catálogo.
APP: Um identificador exclusivo para o recurso do aplicativo que está sendo bloqueado. No formato DbPrincipalId:<first two to 16 characters of the resource string><hashed value>.
MD: varia de acordo com o tipo de recurso. Para obter mais informações, consulte a descrição da resource_description coluna em sys.dm_tran_locks.
HBT: Nenhuma informação fornecida. Em vez disso, use a sys.dm_tran_locks exibição de gerenciamento dinâmico.
AU: Nenhuma informação fornecida. Em vez disso, use a sys.dm_tran_locks exibição de gerenciamento dinâmico.
Mode 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. Garante que um elemento de esquema, como uma tabela ou índice, não seja descartado enquanto qualquer sessão mantiver um bloqueio de estabilidade de esquema no elemento de 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 eventualmente ser atualizados. Ele é usado para evitar uma forma comum de deadlock que ocorre quando várias sessões bloqueiam recursos para possível atualização posteriormente.
X = Exclusivo. A sessão mantenedora possui acesso exclusivo ao recurso.
IS = Intenção compartilhada. Indica a intenção de colocar bloqueios S em algum recurso subordinado na hierarquia de bloqueio.
IU = Atualização de intenção. Indica a intenção de colocar bloqueios U em algum recurso subordinado na hierarquia de bloqueio.
IX = Intenção exclusiva. Indica a intenção de colocar bloqueios X em algum recurso subordinado na hierarquia de bloqueio.
SIU = Atualização de intenção 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 de intenção compartilhada. Indica o acesso compartilhado a um recurso com a intenção de adquirir bloqueios exclusivos em recursos subordinados na hierarquia de bloqueio.
UIX = Exclusivo de intenção de atualização. 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 = Bloqueio de intervalo de chaves compartilhado e recurso compartilhado. Indica varredura de intervalo serializável.
RangeS_U = Bloqueio de intervalo de chaves compartilhado e recurso de atualização. Indica verificação de atualização serializável.
RangeI_N = Insira o bloqueio Key-Range e Null Resource. Usado para testar intervalos antes de inserir uma nova chave em um índice.
RangeI_S = Bloqueio de conversão de intervalo de chaves. Criado por uma sobreposição dos bloqueios RangeI_N e S.
RangeI_U = Bloqueio de conversão de intervalo de teclas criado por uma sobreposição de bloqueios RangeI_N e U.
RangeI_X = Bloqueio de conversão de intervalo de chaves criado por uma sobreposição de bloqueios RangeI_N e X.
RangeX_S = Bloqueio de conversão de intervalo de teclas criado por uma sobreposição de RangeI_N e RangeS_S. RangeS-S.
RangeX_U = Bloqueio de conversão de intervalo de chave criado por uma sobreposição de bloqueios de RangeI_N e RangeS_U.
RangeX_X = Bloqueio exclusivo de chave-intervalo e 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 é bloqueada por outro processo que mantém um bloqueio com um modo conflitante.
GRANT: A fechadura foi obtida.
WAIT: O bloqueio é 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 obter sintaxe e restrições, consulte SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • Usando dicas de tabela de bloqueio para especificar o nível de bloqueio para uma referência individual de uma tabela em uma FROM cláusula. Para obter sintaxe e restrições, consulte 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 , o que torna mais fácil para um usuário identificar transações distribuídas -2bloqueadas. Para obter mais informações, consulte Usar transações marcadas para recuperar bancos de dados relacionados de forma consistente.

Permissões

Requer a permissão VIEW SERVER STATE.

Exemplos

R. Listar 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. Listar 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