KB2986423 - FIX: Demora muito tempo a adicionar novas colunas a uma mesa quando o tamanho da linha excede o tamanho máximo permitido

Sintomas

Assuma que adiciona uma coluna a uma tabela no Microsoft SQL Server 2012 ou SQL Server 2014. Quando o tamanho da linha estiver próximo do tamanho máximo permitido que seja de 8.060 bytes, a operação de adição pode demorar muito tempo.

Causa

O problema ocorre porque, quando o tamanho total da linha está próximo do tamanho máximo permitido da linha, o SQL Server faz uma varredura completa da tabela para garantir que adicionar uma nova coluna não viola a integridade dos dados. As versões antes do SQL Server 2012 não fazem esta verificação, e isso faz com que o idioma de definição de dados (DDL) seja executado mais rapidamente. No entanto, este comportamento resulta na falha de operações subsequentes, tais como atualização de linha ou redução se o tamanho da linha exceder o tamanho permitido.

Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Confira as últimas atualizações cumulativas do SQL Server:

Mais Informações

  • Pode ligar a bandeira de traço 647 utilizando o parâmetro de arranque. Para obter informações, consulte opções de arranque do serviço de motores de base de dados.

  • Pode executar a seguinte consulta (Substitua <nome de mesa> com a sua nome de mesa real) para testar a tabela em particular antes da operação num sistema de produção e planeie o efeito desta emissão. Se o resultado for superior a 8.060, a sua mesa está sujeita a esta questão. Além disso, se deixou cair colunas, tem de alterar a tabela com a opção de reconstrução. A reconstrução da tabela pode fazer com que a consulta devolva os resultados corretos.

    select  1+1+2 + 2 +  (case  when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end)  +  ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 +  sum( case when max_length=-1 then 24 else max_length end)  from sys.system_internals_partition_columns   col join sys.partitions par on col.partition_id = par.partition_id  where object_id = object_id ('<table name>')  and  index_id in (0,1) and partition_number =1 
  • Pode considerar a possibilidade de adicionar colunas de comprimento variável ou colunas escassas quando a sua aplicação frequentemente adiciona novas colunas à tabela. É uma operação só de metadados, mesmo que o tamanho total de todas as colunas exceda 8.060 bytes.

Estado

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×