KB4577933 - CORREÇÃO: A eliminação em cascata em valores chave fora dos limites do histograma da tabela principal causa a análise do índice no SQL Server 2017 e 2019

Aplica-se A
SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows SQL Server 2019 on Windows

Sintomas

Suponha que tem uma tabela com uma restrição de chave externa definida para eliminação em cascata e que as estatísticas na coluna de chave externa não abrangem todo o intervalo de valores chave na tabela (por exemplo: porque as estatísticas não foram atualizadas após a distribuição de dados ser alterada na tabela). Neste cenário, quando tenta eliminar uma linha correspondente a um valor de chave não representado no histograma de estatística e o Otimizador de Consultas está a utilizar a estimativa de cardinalidade predefinida, a operação de eliminação é mais lenta do que o esperado. Também poderá reparar que é utilizada uma operação de análise de índice remissivo para localizar as linhas correspondentes na tabela de referência.

Estado

A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".

Resolução

Este problema foi corrigido nas seguintes atualizações cumulativas para SQL Server:

Observação: Esta correção só é ativada quando ativa as correções do otimizador (através da opção de configuração do âmbito da base de dados, sugestão de consulta ou sinalizador de rastreio 4199).

Acerca das atualizações cumulativas para SQL Server:

Cada nova atualização cumulativa para 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. Consulte as atualizações cumulativas mais recentes para SQL Server:

Solução

Para contornar esse problema, use um dos seguintes métodos:

  • Utilize a estimativa de cardinalidade legada. Para obter mais informações, consulte Estimativa de cardinalidade (SQL Server).
  • Remova a eliminação em cascata da definição de Chave Externa e execute a operação de eliminação utilizando JOIN entre as tabelas principal e subordinada para obter o equivalente à eliminação em cascata.
  • Atualize as estatísticas na tabela principal com o FULLSCAN antes de eliminar dados.

Referências

Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software.