Sintomas
Quando você preenche uma variável de tabela com muitas linhas e a une a outras tabelas, o otimizador de consulta pode escolher um plano de consulta ineficiente, o que pode levar a um desempenho lento da consulta.
Resolução
Depois de aplicar esse hotfix, você pode ativar o sinalizador de rastreamento 2453 para permitir que uma variável de tabela dispare a recompilação quando um número suficiente de linhas for alterado. Isso pode permitir que o otimizador de consulta escolha um plano mais eficiente.
O problema foi corrigido pela primeira vez na seguinte atualização cumulativa e/ou Service Packs para o SQL Server.
Atualização cumulativa 3 para SQL Server 2014 /pt-br/help/2984923
Sobre atualizações cumulativas para o SQL Server
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 para o SQL Server:
Service pack 2 para SQL Server 2012
Sobre os service packs do SQL Server
Os service packs são cumulativos. Cada novo service pack contém todas as correções dos service packs anteriores, juntamente com as novas correções. Nossa recomendação é aplicar o service pack mais recente e a atualização cumulativa mais recente para esse service pack. Não é necessário instalar um service pack anterior antes de instalar o service pack mais recente. Use a Tabela 1 no seguinte artigo para encontrar mais informações sobre o service pack mais recente e a atualização cumulativa mais recente:
Como determinar a versão, a edição e o nível de atualização do SQL Server e seus componentes
Mais informações
Quando você usa uma variável de tabela em um lote ou procedimento, a consulta é compilada e otimizada para o estado vazio inicial da variável de tabela. Se essa variável de tabela for preenchida com muitas linhas em tempo de execução, o plano de consulta pré-compilado poderá não ser mais o ideal. Por exemplo, a consulta pode estar ingressando em uma variável de tabela com loop aninhado, pois geralmente é mais eficiente para um pequeno número de linhas. Esse plano de consulta poderá ser ineficiente se a variável de tabela tiver milhões de linhas. Uma junção de hash pode ser uma opção melhor sob essa condição. Para obter um novo plano de consulta, ele precisa ser recompilado. Ao contrário de outras tabelas temporárias ou de usuário, no entanto, a alteração da contagem de linhas em uma variável de tabela não dispara uma recompilação de consulta. Normalmente, você pode contornar isso com OPTION (RECOMPILE), que tem seu próprio custo indireto.
O sinalizador de rastreamento 2453 permite o benefício da consulta recompilar sem OPTION (RECOMPILE). Esse sinalizador de rastreamento difere de OPTION (RECOMPILE) em dois aspectos principais.
(1) Ele usa o mesmo limite de contagem de linhas que outras tabelas. A consulta não precisa ser compilada para cada execução, ao contrário de OPTION (RECOMPILE). Isso acionaria a recompilação somente quando a alteração da contagem de linhas excedesse o limite predefinido.
(2) OPTION (RECOMPILE) força a consulta a inspecionar parâmetros e otimizar a consulta para eles. Esse sinalizador de rastreamento não força a visualização de parâmetros.
Observe que esse sinalizador de rastreamento deve estar ATIVADO em tempo de execução. Você não pode usar esse sinalizador de rastreamento com QUERYTRACEON. Esse sinalizador de rastreamento deve ser usado com cuidado porque pode aumentar o número de recompilações de consulta, o que pode custar mais do que a economia de uma melhor otimização de consulta.
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".