Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Em algum momento de sua carreira com o SQL Server, o sniffing de parâmetros simplesmente salta e ataca?


Não é bem uma resposta, mas vou compartilhar minha experiência.

A detecção de parâmetros levou alguns anos de SQL Server para vir e me morder, quando voltei para o Developer DBA depois de me mudar para principalmente o trabalho de DBA de produção. Eu entendi mais sobre o motor, como funciona o SQL, o que era melhor deixar para o cliente etc e eu era um melhor codificador SQL.

Por exemplo, SQL dinâmico ou CURSORs ou simplesmente código SQL ruim provavelmente nunca sofrerão sniffing de parâmetro. Mas melhor definir a programação ou como evitar SQL dinâmico ou SQL mais elegante provavelmente o fará.

Percebi isso para código de pesquisa complexo (muitas condicionais) e relatórios complexos em que os padrões de parâmetro afetavam o plano. Quando vejo como desenvolvedores menos experientes escreveriam esse código, ele não sofrerá sniffing de parâmetros.

De qualquer forma, prefiro mascarar parâmetros a WITH RECOMPILE. Atualizar estatísticas ou índices força uma recompilação de qualquer maneira. Mas por que recompilar o tempo todo? Eu respondi em outro lugar a uma de suas perguntas com um link que menciona que os parâmetros são rastreados durante a compilação, então também não tenho fé nisso.

O mascaramento de parâmetros é uma sobrecarga, sim, mas permite que o otimizador avalie a consulta caso a caso, em vez de uma recompilação geral. Especialmente com recompilação em nível de instrução do SQL Server 2005

OPTIMIZE FOR UNKNOWN no ​​SQL Server 2008 também parece fazer exatamente a mesma coisa que mascarar. Meu colega MVP do SQL Server e eu passamos algum tempo investigando e chegamos a essa conclusão.