Applies ToSQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

Sintomas

Suponha que você adicione uma coluna a uma tabela no Microsoft SQL Server 2012 ou no SQL Server 2014. Quando o tamanho da linha está perto do tamanho máximo permitido que é 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 verificação completa da tabela para garantir que a adição de uma nova coluna não viole a integridade dos dados. As versões anteriores ao SQL Server 2012 não fazem essa verificação, e isso faz com que a DDL (linguagem de definição de dados) seja executada mais rapidamente. No entanto, esse comportamento resulta na falha de operações subsequentes, 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 incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes do SQL Server:

Informações adicionais

  • Você pode ativar o sinalizador de rastreamento 647 usando o parâmetro de inicialização. Para obter informações, consulte Opções de inicialização do serviço de mecanismo de banco de dados.

  • Você pode executar a seguinte consulta (substitua <nome da tabela> pelo nome da tabela real) para testar a tabela específica antes da operação em um sistema de produção e planejar o efeito desse problema. Se o resultado for maior que 8.060, a tabela estará sujeita a esse problema. Além disso, se você tiver solto colunas, precisará alterar a tabela com a opção reconstruir. A recriação da tabela pode fazer com que a consulta retorne 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 
  • Você pode considerar a adição de colunas de comprimento variável ou colunas esparsas quando o aplicativo adiciona muitas colunas à tabela com frequência. É uma operação somente de metadados, mesmo que o tamanho total de todas as colunas exceda 8.060 bytes.

Status

A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.

As comunidades ajudam você a fazer e responder perguntas, fazer comentários e ouvir especialistas com conhecimento avançado.