Temos um processo que cria uma nova sequência usando sql dinâmico. Em seguida, usamos sql dinâmico para obter o próximo valor da sequência. Nós temos muitas dessas sequências dinâmicas, mas não chamamos muito nenhuma delas, mas chamamos muitas delas.
No cache do plano é algo assim:
(@new int OUTPUT)SELECT @new = Next Value for dbo.[UniqueSequenceName1]
(@new int OUTPUT)SELECT @new = Next Value for dbo.[UniqueSequenceName2]
--etc
Eles estão consumindo muito do nosso cache de planos e tendem a ser chamados apenas uma vez antes de serem expulsos. Eu tenho o Optimize for Ad Hoc Workload ativado, mas isso não mudou o comportamento. Ativar a parametrização forçada ajudaria a reduzir a carga no cache do plano? Existe outra configuração que possa ajudar?
Isso pode ser facilmente verificado. Aqui está o código que deve imitar seu cenário:
Agora, se você verificar o cache do plano:
Você pode ver claramente que existem dois planos distintos para duas sequências:
Isto é o que eu esperava. Funciona apenas para parâmetros e não para nomes de objetos.