O que é escalação de bloqueio?

Respostas:

45

Bloqueios de banco de dados podem existir em linhas, páginas ou tabelas ou índices inteiros. Quando uma transação está em andamento, os bloqueios mantidos pela transação ocupam recursos. A escalação de bloqueios é onde o sistema consolida vários bloqueios em um nível superior (por exemplo, consolidando vários bloqueios de linha em uma página ou várias páginas em uma tabela inteira) normalmente para recuperar recursos capturados por um grande número de bloqueios refinados.

Isso será feito automaticamente, embora você possa definir sinalizadores nas tabelas (consulte ALTER TABLE nos livros on-line) para controlar a política de escalação de bloqueios nessa tabela específica. Em particular, a escalação prematura ou excessivamente ansiosa de bloqueios costumava ser um problema nas versões mais antigas do Sybase e do SQL Server quando você tinha dois processos gravando linhas separadas na mesma página simultaneamente. Se você voltar o suficiente (IIRC SQL Server 6.5), o SQL Server na verdade não tinha bloqueio de linha, mas só poderia bloquear tabelas ou páginas. Onde isso aconteceu, você pode obter contenção entre inserções de registros na mesma página; frequentemente você colocava um índice em cluster na tabela para que novas inserções fossem para páginas diferentes.

ConcernedOfTunbridgeWells
fonte
3
Também deve ser observado que não temos controle sobre quando o servidor aumenta.
Nós fazemos agora. É a chamada T1211.
Joshua
@ Josué, o sinalizador de rastreamento 1211 é usado para desativar a escalação de bloqueio. Não há como dizer ao SQL Server para escalar em um horário específico.
Apenas um aluno
10
Os bloqueios de linha não são escalados para bloqueios de página, mas diretamente para bloqueios de tabela.
Manoj Pandey
É verdade o que Manoj afirmou. Você deve corrigir essa parte de sua resposta para evitar enganosa de menos usuários SQL experiente Servidor
NikolaD
20

É um método para reduzir a sobrecarga do sistema, convertendo muitos bloqueios de granulação fina em menos bloqueios de granulação grossa. Informações mais detalhadas podem ser encontradas aqui e aqui .

Por exemplo, se você tiver muitos bloqueios (geralmente centenas ou mais) em linhas específicas de uma tabela, depois de exceder o número máximo permitido de bloqueios, eles poderão ser trocados por um bloqueio em toda a tabela.

Bill the Lizard
fonte
11

O SQL Server faz o bloqueio de escalonamento para reduzir a sobrecarga de memória , convertendo vários bloqueios de baixa granulação fina em bloqueios de alto nível de granulação grossa.

  • Os bloqueios de linha são sempre escalados para bloqueios de tabela e
  • Os bloqueios de página também são escalados para bloqueios de tabela.

É um mito que os bloqueios de linha sejam escalados para bloqueios de página , o mesmo mencionado acima por @ConcernedOfTunbridgeWells está errado.

Se uma tabela tiver muito poucas atualizações de linha, o mecanismo SQL tentará remover os bloqueios de linha nessas linhas ou o bloqueio de página nessas páginas. Digamos que levou Row-Lock. Mas se as atualizações de linha aumentarem o limite (~ 5k bloqueios), em vez de usar vários bloqueios de linha, será necessário um único bloqueio de tabela. Portanto, isso reduz a sobrecarga de memória liberando vários bloqueios de linha e obtém um único bloqueio de tabela, mas aumenta a simultaneidade. O mesmo acontece com o bloqueio de página.

O limite de escalonamento de bloqueios é de pelo menos 5000 bloqueios e, dependendo de vários fatores, uma explicação detalhada do escalonamento de bloqueios foi mencionada aqui no MSDN BoL: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx

Manoj Pandey
fonte
5

Escalada de bloqueio significa a conversão de um bloqueio para um modo mais restritivo. Isso é visto com mais frequência nos bancos de dados. Uma consulta pode ter um recurso bloqueado para "compartilhado" e escalá-lo para "exclusivo" para executar uma atualização.

Richard T
fonte