Inquiridor
Performance de Query - Função no Select

Pergunta
-
Pessoal,
Tenho uma query que entre os campos de
seleção há um que é preenchido atraves de uma função. Tenho 2 ambientes
homologação e produção.
O tempo de execução entre os ambientes de
produção e homoloção está bem diferente sendo em homologação é de
aproximadamente 15 segundos para 90k registros enquanto que em produção é
superior a 2 minutos. O ambiente de homolog é cópia de produção.
O que pode estar acontecendo, há alguma configuração que possa estar fazendo essa
diferença entre os servidores para execução da mesma query ?
Todas as Respostas
-
Anselmo,
De forma rápida eu diria que seu ambiente de produção esta sendo concorrido e sofrendo pressão de outros processos enquanto o seu de homologação não. Tempo de execução não é o parâmetro mais confiável pois há N variáveis envolvidas. Qual o custo do plano de execução nos ambientes? Existe distinção entre este valor?
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
ITIL V3 Foundation
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Email: fabrizzio.antoniaci@gmail.com -
-
Anselmo,
Os dados de homologação e produção são os mesmos? Diferente quantidade de dados alteram os planos de execuções. Se esta entrando em paralelismo é por que seu servidor esta configurado para tal. Voce tem 2 opções:
- Não habilitar paralelismo na sua instancia SQL porem é muito radical, se esta habilitada muito provavelmente outros processos fazem um bom uso dela;
- Aumentar o custo de um plano a ser considerado para paralelismo, isso pode fazer com que querys que atualmente utilizem um plano em paralelo deixem de utilizar, assim voce consegue um plano identico e até um ganho de performance.
Sobre como fazer essas alterações:
--Aumentar custo dos planos a serem considerados como paralelos, aqui apenas planos com custo acima de 5 serão considerados EXEC sp_configure 'cost threshold for parallelism', 5 --Sem paralelismo, ou seja, maximo de paralelismo = 1 EXEC sp_configure 'max degree of parallelism', 1
Lembrando que, não necessariamente paralelismo é o problema. É preciso analisar, lembre-se que paralelismo foi introduzido em informatica como um banho de performance e realmente é, se utilizado corretamente.
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
ITIL V3 Foundation
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Roberson Naves sexta-feira, 21 de junho de 2013 16:51
-
Obrigado fabrizzio,
Realmente não sei se a configuração do "parallelism" seria o problema.
De fato se executar a query sem ter função, o retorno se dá próximo a homologação.
- select campo1, campo2 = dbo.funcao(parametro) from tabela
Sei que funções em selects não são recomendadas, porém utilizeii devido em homologação não ter tido problemas. Acho que a grande questão é realmente essa "sentada" que o servidor dá quado executo o select com função.
-