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