uma situação não muito comum, mas que pode arruinar com o plano de execução das suas Queries, principalmente Stored Procedures, é sobre a utilização das opções de usuário no início do bloco de execução na aplicação-cliente.
Cenário:
- no Management Studio, executa-se uma Procedure, ou um SELECT em uma VIEW, e o código executa rapidamente;
- na aplicação-cliente (web ou desktop), ou até mesmo via JOB, a query leva horas pra terminar.
A lista de opções da sessão do usuário (USER OPTIONS) abaixo pode causar este comportamento:
ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS
ARITHABORT
CONCAT_NULL_YIELDS_NULL
NUMERIC_ROUNDABORT
QUOTED_IDENTIFIER
Não cabe aqui explicar sobre o que cada opção significa, isto você encontra aqui:
https://technet.microsoft.com/pt-br/library/ms176031(v=sql.105).aspx
A questão levantada é a diferença no tempo de execução entre as várias aplicações-cliente que irão utilizar o código ou rotina criada.
Tais opções afetam os resultados e principalmente, o plano de execução criado para sua query originalmente.
Desta forma, sugere-se utilizar o mesmo conjunto de opções utilizadas na criação do objeto (procedure por exemplo) na chamada da sua aplicação-cliente.
Exemplo:
SET ANSI_NULLS ON
SET ANSI_PADDING ON
EXEC sp_minha_procedure
Como na maioria dos casos a falta dessas opções SET não causa nenhum problema, acabamos esquecendo da boa prática. Mas em algumas situações, pode fazer toda a diferença.
Todos os detalhes aqui:
https://technet.microsoft.com/pt-br/library/ms175088(v=sql.105).aspx
Boa sorte!
Nenhum comentário:
Postar um comentário