Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que são bloqueios de linha, página e tabela? E quando são adquiridos?


Bloqueio de linha

Um bloqueio de linha é o nível mais baixo de granularidade de bloqueio possível no SQL Server. Isso significa que uma ou mais linhas específicas serão bloqueadas e as linhas adjacentes ainda estarão disponíveis para bloqueio por consultas simultâneas.

Bloqueio de página

Um bloqueio de página no SQL Server bloqueará 8K de dados, mesmo quando sua consulta precisar de apenas 10 bytes da página. Portanto, sua consulta bloqueará dados adicionais que você não solicita em sua consulta.

Bloqueio de Hobt

Quando uma tabela é particionada com "particionamento de tabela do SQL Server", é possível que uma partição única seja bloqueada (Hobt significa Heap ou B-Tree)

Observação: A escalação de bloqueios para bloqueios HOBT é desabilitada por padrão. execute ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO) para habilitar o escalonamento de bloqueio de HOBT.

Bloqueio de mesa

Um bloqueio de tabela bloqueará a tabela completa.

O que são páginas de dados

O Microsoft SQL Server organiza todos os seus dados em "Páginas de Dados", que podem conter 8K de dados. Isso significa que, para qualquer acesso a dados no SQL Server 8K, as informações serão lidas.

As páginas de dados só podem conter informações de uma tabela e o layout de uma página está bem documentado no MSDN

O fato de o SQL Server sempre ler uma página de dados completa também lhe dá uma ideia de por que ele prefere usar bloqueios de nível de página. A implicação dos bloqueios no nível da página é que você pode bloquear muito mais dados do que pensa.

Por exemplo, suponha que temos uma tabela com um tamanho total de registro de 1024 bytes com um índice clusterizado no campo ID . Quando executamos a seguinte consulta:SELECT * from MyTable (xlock) where ID = 123 não apenas esse registro será bloqueado, mas (dependendo do preenchimento da página) no máximo 3 registros adicionais também serão bloqueados.

Quando esses bloqueios são adquiridos

Uma consulta será analisada pelo controlador de consulta e os bloqueios necessários serão determinados e solicitados pelo gerenciador de bloqueios. O SQL Server tentará fazer um equilíbrio entre desempenho e contenção para determinar a estratégia de bloqueio.

O SQL Server também segue um sistema de "escalonamento de bloqueios" que reduzirá a granularidade do bloqueio quando mais de 5.000 bloqueios de um determinado tipo estiverem sendo adquiridos. Consulte este artigo sobre escalonamento de bloqueio para obter mais informações.

Esse comportamento pode ser ajustado usando dicas de bloqueio com ênfase em dicas , em uma consulta você pode especificar por tabela que tipo de bloqueio você prefere. O SQL Server tentará honrar sua solicitação, mas ainda aplicará o escalonamento de bloqueio.