Bloqueio de granularidade e hierarquias

O Microsoft Mecanismo de banco de dados do SQL Server tem bloqueio multigranular que permite a uma transação bloquear diferentes tipos de recursos. Para minimizar o custo de bloqueio, o Mecanismo de Banco de Dados bloqueia recursos automaticamente, em um nível apropriado para a tarefa. Bloquear em uma granularidade menor como, por exemplo linhas, aumenta a simultaneidade mas tem uma sobrecarga maior, devido à exigência de mais bloqueios mantidos, se muitas linhas forem bloqueadas. Bloqueando em uma granularidade maior, como tabelas, é dispendioso em termos de simultaneidade, porque bloquear a tabela inteira restringe o acesso a qualquer parte da tabela por outras transações. No entanto, tem uma sobrecarga menor, porque menos bloqueios estão sendo mantidos.

O Mecanismo de Banco de Dados precisa, freqüentemente, adquirir bloqueios em vários níveis de granularidade para proteger totalmente um recurso. Esse grupo de bloqueios em vários níveis de granularidade é chamado de uma hierarquia de bloqueio. Por exemplo, para proteger inteiramente a leitura de um índice, uma instância do Mecanismo de Banco de Dados pode ter que adquirir bloqueios compartilhados em linhas e bloqueios tentativa compartilhadas nas páginas e na tabela.

A tabela seguinte mostra os recursos que o Mecanismo de Banco de Dados pode bloquear.

Recurso

Descrição

RID

Um identificador de linha usado para bloquear uma única linha dentro de um heap.

KEY

Um bloqueio de linha dentro de um índice usado para proteger um intervalo de chaves em transações serializáveis.

PAGE

Uma página de 8 quilobytes (KB) em um banco de dados, como dados ou páginas de índice.

EXTENT

Um grupo contíguo de oito páginas, como dados ou páginas de índice.

HoBT

Um heap ou árvore B. Um bloqueio protegendo uma árvore B (índice) ou o heap de páginas de dados que não tem um índice clusterizado.

TABLE

A tabela inteira, inclusive todos os dados e índices.

FILE

Um arquivo de banco de dados.

APPLICATION

Um recurso de aplicativo especificado.

METADATA

Bloqueios de metadados.

ALLOCATION_UNIT

Uma unidade de alocação.

DATABASE

O banco de dados inteiro.

ObservaçãoObservação

HoBT e bloqueios de TABLE podem ser afetados pela opção de LOCK_ESCALATION de ALTER TABLE.