Estou lidando com um problema que não consigo resolver. Recebi esse procedimento armazenado que apresenta problemas de velocidade. Demora cerca de 35 segundos. Quando executado adhoc , ele é concluído instantaneamente.
Isso me fez pensar que tinha algo a ver com detecção de parâmetros. Eu tentei reescrever isso para usar variáveis locais, otimizar para desconhecido\variável\etc, com recompilação.
A tabela em que a verificação está acontecendo é enorme, mas mesmo com as estatísticas atualizadas com fullscan
, as estimativas ainda estão MUITO erradas. Talvez a consulta pudesse ser reescrita, mas eu gostaria de descobrir isso.
todos os dados do ambiente de teste com nomes alterados de arquivos de texto .sql para consulta sp e ad hoc - deixe-me saber se isso não funcionar
plano ad hoc - https://www.brentozar.com/pastetheplan/?id=Hkvg5Ge40
Parâmetros para ad hoc -
Plano SP - https://www.brentozar.com/pastetheplan/?id=S1w49GxER
Parâmetros para SP -
Os parâmetros vêm como:
(sp name)
@ TransactionDescriptionId VARCHAR(32),
@ CategoryCode VARCHAR(4000)
AS
DECLARE
@ CategoryHash VARBINARY(16) = HashBytes('MD5', @CategoryCode);
Os mesmos valores são passados tanto na versão SP quanto na versão ad hoc . Achei que poderia ser devido a algo com o hash sendo criado como uma variável local a partir do parâmetro passado, mas na versão ad hoc está fazendo o mesmo (para mim).