Sintomas
Quando se preenche uma variável de tabela com muitas linhas e, em seguida, junta-se a ela com outras tabelas, o otimizador de consulta pode escolher um plano de consulta ineficiente, o que pode levar a um desempenho de consulta lenta.
Resolução
Depois de aplicar este hotfix, pode ligar a bandeira de traço 2453 para permitir que uma variável de mesa desencadeie uma recompile quando o número suficiente de linhas for alterada. Isto pode permitir ao otimizador de consultas escolher um plano mais eficiente. O problema foi corrigido pela primeira vez na seguinte atualização cumulativa ou/e pacotes de serviço para o SQL Server.
Atualização Cumulativa 3 para SQL Server 2014 /en-us/help/2984923
Cada nova atualização cumulativa do 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. Confira as últimas atualizações cumulativas do SQL Server:
Os pacotes de serviço são cumulativos. Cada novo pacote de serviços contém todas as correções que se encontram em pacotes de serviços anteriores, juntamente com quaisquer novas correções. A nossa recomendação é aplicar o mais recente pacote de serviços e a mais recente atualização cumulativa para esse pacote de serviços. Não tem de instalar um pacote de serviços anterior antes de instalar o mais recente pacote de serviços. Utilize o Quadro 1 no seguinte artigo para obter mais informações sobre o mais recente pacote de serviços e a mais recente atualização cumulativa:
Como determinar o nível de versão, edição e atualização do SQL Server e dos seus componentes
Mais Informações
Quando se utiliza uma variável de tabela num lote ou procedimento, a consulta é compilada e otimizada para o estado vazio inicial da variável da tabela. Se esta variável de tabela for povoada com muitas linhas em tempo de execução, o plano de consulta pré-compilado pode deixar de ser o ideal. Por exemplo, a consulta pode estar juntando uma variável de tabela com loop aninhado, uma vez que é geralmente 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 junção de haxixe pode ser uma escolha melhor sob tal condição. Para ter um novo plano de consulta, tem de ser recompiliado. No entanto, ao contrário de outras tabelas de utilizador ou temporários, a variação da contagem de filas numa variável de tabela não desencadeia uma recomposição de consulta. Normalmente, pode trabalhar em torno disto com opção (RECOMPILE), que tem o seu próprio custo de despesas gerais. A bandeira de traço 2453 permite o benefício de recompile de consulta sem OPÇÃO (RECOMPILE). Esta bandeira de traço difere da OPÇÃO (RECOMPILE) em dois aspetos principais. (1) Utiliza o mesmo limiar de contagem de linhas que as outras tabelas. A consulta não precisa de ser compilada para cada execução ao contrário da OPÇÃO (RECOMPILE). Só provocaria o recompile quando a contagem de linhas exceder o limiar predefinido. (2) A OPÇÃO (RECOMPILE) obriga a consulta a espreitar parâmetros e a otimizar a consulta para eles. Esta bandeira de traço não força o olhar de parâmetro.Note que esta bandeira de vestígios deve estar on at runtime. Não é possível utilizar esta bandeira de traço com o QUERYTRACEON. Esta bandeira de traços deve ser utilizada com cuidado, pois pode aumentar o número de recompiles de consulta que podem custar mais do que poupanças de uma melhor otimização de consultas.
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".