No SQL Server, os bloqueios são normalmente escalados de linha ou página -> tabela. A partir do SQL Server 2008, um novo nível de escalonamento de bloqueio foi adicionado - nível de partição .
No entanto, isso não é ativado automaticamente para tabelas particionadas - por padrão, a tabela é definida para ignorar o bloqueio de partição e ir direto da linha ou página -> tabela. Por que isso seria o caso? Existe uma razão pela qual eu não gostaria de mudar todas as minhas tabelas de TABLE
para AUTO
que elas escalassem os bloqueios para o nível da partição em vez do nível da tabela?
Como o padrão ainda é TABLE
, acho que deve haver algo que estou perdendo sobre o lado negativo de AUTO
.
BOL tem resposta -- Não está ativado por padrão, pois pode aumentar o potencial de bloqueio.
O Mecanismo de Banco de Dados não escala bloqueios de linha ou intervalo de chave para bloqueios de página, mas os escala diretamente para bloqueios de tabela. Da mesma forma, os bloqueios de página são sempre escalados para bloqueios de tabela. No SQL Server 2008, o bloqueio de tabelas particionadas pode escalar para o nível HoBT da partição associada em vez do bloqueio de tabela. Um bloqueio de nível HoBT não necessariamente bloqueia os HoBTs alinhados para a partição.
Os bloqueios de nível HoBT geralmente aumentam a simultaneidade, mas introduzem o potencial de bloqueios quando as transações que estão bloqueando diferentes partições desejam expandir seus bloqueios exclusivos para as outras partições. Em casos raros, a granularidade de bloqueio TABLE pode ter um desempenho melhor.