sp_lock (Transact-SQL)
Reporta informações sobre bloqueios.
Importante |
---|
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. |
Convenções da sintaxe 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 do qual o usuário deseja informações de bloqueio. session ID1 é int com o 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 ID de sessão Mecanismo de Banco de Dados de sys.dm_exec_sessions que pode ter um bloqueio ao mesmo tempo que session ID1 e sobre o qual o usuário deseja informações. session ID2 é int com o valor padrão de 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 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 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 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 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 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 -2, que torna mais fácil para um usuário identificar as transações de bloqueio distribuídas. Para obter mais informações, consulte Usar transações marcadas para recuperar bancos de dados relacionados consistentemente (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
Consulte também
Referência
sys.dm_tran_locks (Transact-SQL)
sys.database_files (Transact-SQL)