none
Performance de Query - Função no Select RRS feed

  • 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 ?
    terça-feira, 18 de junho de 2013 17:58

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

    terça-feira, 18 de junho de 2013 18:06
    Moderador
  • Olá Fabrizzio,

    O custo total é igual porem ha diferenciações em alguns intens. Uma coisa que me chamou a atenção é que no meu ambiente de produção entre os processos está entrando um "parallelism".

    terça-feira, 18 de junho de 2013 19:18
  • 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
    terça-feira, 18 de junho de 2013 19:25
    Moderador
  • 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.

    terça-feira, 18 de junho de 2013 19:46
  • Anselmo,

    não custa perguntar ne....

    A estrutura de tabelas e indices estão iguais entre os dois ambientes?

    O plano de execução entre os dois servidores estão iguais?


    Marquinhos Não esqueça de qualificar a resposta.

    quarta-feira, 19 de junho de 2013 14:43