Depois de pesquisar um pouco, decidi postar essa pergunta por falta de resposta e pedir desculpas se houver uma pergunta / resposta semelhante por aí.
Ao executar a consulta abaixo em dois servidores SQL configurados da mesma forma, encontramos diferentes planos de execução que afetam o desempenho e precisamos de ajuda para descobrir a causa.
A pergunta:
SELECT process_id
INTO #temp
FROM revrep_revenue_fact
WHERE process_id = 284
DROP TABLE #temp
Plano de execução do servidor A
Plano de execução do servidor B Servidor B http://s2.postimg.org/z9fjrfv4n/server_B.png
Você notará que o servidor B tem a operação física TOP no plano de execução real e estamos tentando descobrir o porquê. Ambas as consultas usam o mesmo índice na busca de índice.
Aqui estão alguns detalhes do servidor A e do servidor B
Servidor A e B são ambos
Service Pack 1 do Windows Server 2008 R2 Standard
24GB RAM
Sistema operacional de 64 bits
Versões do SQL Server 2012 obtidas usando ( SELECT SERVERPROPERTY ('ProductVersion') )
Servidor A versão SQL 11.0.3000.0
Server B SQL versão 11.0.5058.0
O que tentamos
Por que o servidor B tem o TOP no plano de execução? Neste exemplo de consulta simples, não há problemas reais, mas em uma consulta maior o custo aumenta para o TOP e vemos um impacto no desempenho. Qualquer ajuda para depurar isso seria muito apreciada e podemos obter informações adicionais que você possa precisar para ajudar.
GO
após a linha do número de linhas. Você também pode postar as propriedades do operador Top?
TOP
operador sugere que um diferente de zeroSET ROWCOUNT
foi executado anteriormente nessa conexão. Tente novamente com após a execuçãoSET ROWCOUNT 0;
. Além disso, as versões do SQL que você postou não são o SQL 2008 R2. ExecuteSELECT SERVERPROPERTY('ProductVersion');
nos 2 servidores para obter a versão real do SQL Server.