KB2952444 - CORREÇÃO: Mau desempenho quando utiliza variáveis de tabela no SQL Server 2012 ou SQL Server 2014

Aplica-se A
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Web SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Sintomas

Quando você preenche uma variável de tabela com muitas linhas e, em seguida, a une com outras tabelas, o otimizador de consulta pode escolher um plano de consulta ineficiente, o que pode levar a um desempenho de consulta lento.

Resolução

Depois de aplicar esse hotfix, você pode ativar o sinalizador de rastreamento 2453 para permitir que uma variável de tabela acione a recompilação quando o número suficiente de linhas for alterado. Isto poderá permitir que o otimizador de consultas escolha um plano mais eficiente.

O problema foi corrigido primeiro na seguinte atualização cumulativa ou/ou Service Packs para SQL Server.

Atualização cumulativa 3 para SQL Server 2014 /pt-pt/help/2984923

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:

      

Service Pack 2 para SQL Server 2012

Acerca dos service packs para SQL Server

Os service packs são cumulativos. Cada novo service pack contém todas as correções que estão em service packs anteriores, juntamente com quaisquer novas correções. Recomendamos que aplique 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 artigo a seguir para encontrar mais informações sobre o service pack mais recente e a atualização cumulativa mais recente:

Como determinar a versão, edição e 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 no tempo de execução, o plano de consulta pré-compilado pode não ser mais o ideal. Por exemplo, a consulta pode estar a associar uma variável de tabela com um ciclo aninhado, uma vez que normalmente é mais eficiente para um pequeno número de linhas. Este plano de consulta pode ser ineficiente se a variável de tabela tiver milhões de linhas. Uma associação de hash pode ser uma escolha melhor sob tal condição. Para obter um novo plano de consulta, este tem de ser recompilado. No entanto, ao contrário de outras tabelas de utilizador ou temporárias, a alteração da contagem de linhas numa variável de tabela não aciona uma recompilação da consulta. Normalmente, pode resolver este problema com OPTION (RECOMPILAR), que tem o seu próprio custo geral.
O sinalizador de rastreio 2453 permite a vantagem da recompilação da consulta sem OPTION (RECOMPILE). Esse sinalizador de rastreamento difere de OPTION (RECOMPILE) em dois aspectos principais.
(1) Utiliza o mesmo limiar de contagem de linhas que as outras tabelas. A consulta não precisa ser compilada para todas as execuções, ao contrário de OPTION (RECOMPILE). Ele 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 pré-visualizar parâmetros e otimizar a consulta para eles. Este sinalizador de rastreio não força a espreitação de parâmetros.

Tenha em atenção que este sinalizador de rastreio tem de estar ATIVADO no runtime. Não pode utilizar este sinalizador de rastreio com QUERYTRACEON. Esse sinalizador de rastreamento deve ser usado com cuidado porque pode aumentar o número de recompilações de consultas, o que pode custar mais do que economizar com uma melhor otimização de consultas.

Estado

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