Dica
SQL Server Cuidado com as set options


Cada conexão que fazemos no SQL Server possui um conjunto de configurações ativadas, as set options. Frequentemente a ferramenta que utilizamos para fazer a conexão, tal como o entity framework, define automaticamente um conjunto de set options para nós.

Ocorre que conexões com diferentes set options ativadas não podem compartilhar planos de execução. Então se diferentes conexões tiverem set options diferentes os planos de execução não serão compartilhados.

Considere isso em relação ao SSMS. Quando você está desenvolvendo, muitas vezes precisa capturar queries geradas pela aplicação, testa-las e até melhora-las utilizando o SSMS.

Porém, se o SSMS estiver utilizando um conjunto de set options diferentes da sua aplicação, isso pode até engana-lo, gerando diferentes planos de execução entre a aplicação e o SSMS.

As versões mais atuais do SSMS vem com uma opção chamada SET ARITHABORT ativada. Por outro lado, o entity framework não ativa essa opção, portanto uma aplicação utilizando entity framework fica com um conjunto diferente de set options do que o SSMS, dificultando a análise de algumas queries. Você pode ver uma query ruim na aplicação e ela executar bem no SSMS, por usar um plano diferente e você não notar.

Recomendação: Desative a opção SET ARITHABORT no SSMS. Vá em Query Execution->SQL Server-> Advanced e desative essa opção. Com isso EF e SSMS utilizarão as mesmas set options, facilitando a análise de queries.

Escrevi um poiuoc mais sobre isso em https://www.red-gate.com/simple-talk/blogs/a-real-parameterization-problem-with-a-plus/

Búfalo Informática
e-mail: Contato@bufaloinfo.com.br
Telefones: (21) 99240-7281 (21) 99240-5134