quarta-feira, 9 de agosto de 2017

Tempo de execucao de um comando no Management Studio x JOBs

Olá,

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: