Degradação de desempenho ao atualizar o nível de compatibilidade do banco de dados de 120 para 130

Este artigo ajuda você a resolve o problema que ocorre quando você atualiza o nível de compatibilidade do banco de dados de 120 para 130.

Versão original do produto: SQL Server 2016, SQL Server 2017 no Windows (todas as edições)
Número de KB original: 3212023

Resumo

Considere o seguinte cenário:

  • Você executa uma consulta espacial usando um filtro com uma função como STIntersects em SQL Server 2016 ou em SQL Server 2017 no Windows.
  • O nível de compatibilidade do banco de dados é 120.
  • A consulta usa um plano de execução paralelo.
  • Você atualiza o nível de compatibilidade do banco de dados para 130 e o plano de execução foi alterado de paralelo para serial.

Nesse cenário, você terá degradação de desempenho se a consulta retornar um conjunto de resultados grande.

Resolução

Para resolver esse problema, experimente um dos seguintes métodos:

  • Reverta o nível de compatibilidade do banco de dados para 120. Ao fazer isso, você não poderá se beneficiar de algumas das funcionalidades disponíveis no SQL Server 2016 ou em SQL Server 2017 no Windows no nível de compatibilidade do banco de dados 130. No entanto, você ainda poderá realizar muitas melhorias que não estão associadas ao nível de compatibilidade do banco de dados, por exemplo, um aprimoramento geral do desempenho das operações de consulta com tipos de dados espaciais.

    Para obter uma lista de aprimoramentos SQL Server 2016 que exigem o nível de compatibilidade do banco de dados 130, consulte Nível de Compatibilidade ALTER DATABASE (Transact-SQL).

  • Force o plano gerado com o nível de compatibilidade do banco de dados 120 se ele fornecer melhor desempenho. Você pode forçar esse plano durante a execução com o nível de compatibilidade do banco de dados 130 usando a USE PLAN dica de consulta. Para obter mais informações sobre como usar dicas, consulte Dicas (Transact-SQL) – Consulta.

    Como alternativa, use Repositório de Consultas para identificar e corrigir opções de plano específicas. Para obter mais informações sobre como usar Repositório de Consultas para essa finalidade, consulte Repositório de Consultas Cenários de Uso.

Mais informações

SQL Server níveis de compatibilidade do banco de dados 120 e 130 usam abordagens diferentes para estimar a cardinalidade de predicados, em que uma função escalar definida pelo usuário ou uma função T-SQL específica (como STIntersects) é comparada a uma constante.

Embora o modelo de custo usado pelo nível de compatibilidade do banco de dados 130 gere ganhos de desempenho para muitas cargas de trabalho em comparação com o nível 120, para algumas consultas (dependendo dos dados e funções usados) o desempenho dos planos de consulta pode realmente diminuir no nível 130.

Aplicável a

  • SQL Server 2017 no Windows (todas as edições)
  • SQL Server Service Pack 1 de 2016
  • SQL Server 2016 Developer
  • SQL Server 2016 Enterprise
  • SQL Server 2016 Express
  • SQL Server 2016 Standard
  • SQL Server 2016 Web