Compatibilidade de bloqueios (Mecanismo de Banco de Dados)

A compatibilidade de bloqueios controla se várias transações adquirem bloqueios no mesmo recurso ao mesmo tempo. Se um recurso já estiver bloqueado por outra transação, um novo pedido de bloqueio apenas pode ser feito se o modo do bloqueio solicitado for compatível com o modo do bloqueio existente. Se o modo de pedido de bloqueio não for compatível com o bloqueio existente, a transação que solicita um novo bloqueio espera a liberação do bloqueio existente ou que o intervalo de tempo limite se esgote. Por exemplo, nenhum modo de bloqueio é compatível com bloqueios exclusivos. Enquanto um bloqueio exclusivo (X) for mantido, nenhuma outra transação pode adquirir um bloqueio de nenhum tipo (compartilhado, atualizado ou exclusivo) naquele recurso até que o bloqueio exclusivo (X) seja liberado. Opcionalmente, se um bloqueio compartilhado (S) tiver sido aplicado a um recurso, outras transações podem também irão adquirir um bloqueio compartilhado (U) nesse item, mesmo que a primeira transação não esteja concluída. No entanto, outras transações não podem adquirir um bloqueio exclusivo até que o bloqueio compartilhado tenha sido liberado.

A tabela a seguir mostra a compatibilidade dos modos de bloqueio mais comumente encontrados.

 

Modo concedido existente

 

 

 

 

 

Modo necessário

IS

S

U

IX

SIX

X

Tentativa compartilhada (IS)

Sim

Sim

Sim

Sim

Sim

Não

Compartilhado (S)

Sim

Sim

Sim

Não

Não

Não

Atualizar (U)

Sim

Sim

Não

Não

Não

Não

Tentativa exclusiva (IX)

Sim

Não

Não

Sim

Não

Não

Compartilhado com tentativa exclusiva (SIX)

Sim

Não

Não

Não

Não

Não

Exclusivo (X)

Não

Não

Não

Não

Não

Não

ObservaçãoObservação

Um bloqueio exclusivo da tentativa (IX) é compatível com um modo de bloqueio IX porque IX significa que a intenção é atualizar somente algumas linhas em vez de todas. Outras transações que tentarem ler ou atualizar algumas das linhas também são permitidas, exceto se não forem as mesmas linhas que estejam sendo atualizadas por outras transações. Além disso, se duas transações tentarem atualizar a mesma linha, ambas receberão um bloqueio IX no nível de tabela e página. No entanto, uma transação receberá um bloqueio X no nível de linha. A outra transação deve aguardar até que o bloqueio de nível de linha seja removido.

Matriz de compatibilidade de bloqueio completo

Use a tabela a seguir para determinar a compatibilidade de todos os modos de bloqueio disponíveis no Microsoft SQL Server.

Diagrama que mostra a matriz de compatibilidade de bloqueio