Atualmente em execução no SQL Server 2008 R2
Estou tentando aumentar o desempenho de uma instrução UPDATE. Eu noto uma operação Eager Spool no showplan aparecendo. Minha compreensão das operações de spool é bastante básica - elas criam armazenamento temporário para a tabela durante a atualização.
Também sei que, embora estejam impedindo tempos de execução muito piores, os spools ansiosos geralmente são indicativos de problemas subjacentes com a estrutura da tabela e/ou instruções de consulta.
Minha pergunta é bem simples: quando você vê um Eager Spool em seu plano de consulta, quais problemas você procura resolver primeiro?
Estarei analisando cada parte do nosso sistema para aumentar o desempenho - estou apenas procurando orientação sobre por onde devo começar.
Spools ansiosos podem ser adicionados por vários motivos, inclusive para proteção de Halloween ou para otimizar a E/S ao manter índices não clusterizados .
Sem ver (mesmo uma imagem) do plano de execução, é difícil ter certeza de qual desses cenários pode se aplicar ao seu caso específico. Se a sensibilidade dos dados for uma preocupação, considere carregar uma versão anônima do plano para análise usando o SentryOne Plan Explorer .
Pode muito bem ser que o Carretel Ansioso não seja a coisa em que você deveria se concentrar de qualquer maneira; muitos fatores influenciam o desempenho real das consultas que alteram os dados. Se você está baseando seus esforços de ajuste no custo percentual estimado mostrado para o operador Eager Spool, considere que essas estimativas são geradas usando um modelo que não se destina a corresponder aos recursos de sua configuração de hardware específica.
Às vezes, o spool ansioso pode ser evitado quando outros operadores de bloqueio estão em vigor - ordenações, por exemplo. Portanto, é uma boa ideia garantir que os dados já estejam classificados quando atingirem esse estágio. (os índices ausentes talvez?)
Se estiver lá para proteção do Halloween, como os outros caras disseram, há pouco que você possa fazer.