Bloqueio de granularidade e hierarquias
O MicrosoftMecanismo 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ção |
---|
HoBT e bloqueios de TABLE podem ser afetados pela opção de LOCK_ESCALATION de ALTER TABLE. |
Consulte também