sp_lock (Transact-SQL)

Reporta informações sobre bloqueios.

Observação importanteImportante

Esse recurso será removido em uma versão futura do Microsoft 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.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • [ @spid1 = ] 'session ID1'
    É uma identificação de sessão (SPID) Mecanismo de Banco de Dados em SQL Server 2000 e anteriores de sys.dm_exec_sessions da qual o usuário deseja informações de bloqueio. session ID1 é int com um valor padrão de NULL. Execute sp_who para obter informações de processo sobre a sessão. Se a sessão ID1 não for especificada, as informações sobre todos os bloqueios serão exibidas.

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

Valores de código de retorno

0 (sucesso)

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 @spid1 nem @spid2 for especificado, o conjunto de resultados reportará os bloqueios atualmente ativos para todas as sessões na instância do Mecanismo de Banco de Dados.

Nome da coluna

Tipo de dados

Descrição

spid

smallint

A identificação da sessão Mecanismo de Banco de Dados para o processo solicitando 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

nchar(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 um índice heap ou árvore B. 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:

Tipo Valor: Recurso Valor

RID: Um identificador no formato idarquivo:númeropágina:rid, onde idarquivo identifica o arquivo que contém a página, númeropágina identifica a página que contém a linha e rid identifica a linha específica na página. idarquivo corresponde à coluna file_id na exibição do catálogo sys.database_files.

KEY: 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 pois 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 do catálogo sys.database_files.

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

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

HBT = Nenhuma informação fornecida. Use a exibição de gerenciamento dinâmico sys.dm_tran_locks em vez disso.

AU: Nenhuma informação fornecida. Use a exibição de gerenciamento dinâmico sys.dm_tran_locks em vez disso.

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 deseje alterar o esquema do recurso especificado. Assegura que nenhuma outra sessão esteja fazendo referência ao objeto indicado.

S = Compartilhado. A sessão base possui acesso compartilhado para o 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 base 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 exame de intervalo serializável.

RangeS_U = Intervalo de chave compartilhada e bloqueio de recurso de atualização. Indica exame 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 chave nova 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.

RangeIX_S = Bloqueio de conversão de intervalo de chave criado por uma sobreposição dos 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 obter a sintaxe e as 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 a sintaxe e as restrições, consulte Dicas de tabela (Transact-SQL).

Para obter mais informações sobre os tipos de bloqueios usados pelo Mecanismo de Banco de Dados, consulte Bloqueios no mecanismo de banco de dados.

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, que torna mais fácil para um usuário identificar as transações de bloqueio distribuídas. Para obter mais informações, consulte Usando transações marcadas (modelo de recuperação completa).

Permissões

Requer a permissão VIEW SERVER STAT.

Exemplos

A. 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