Pular para o conteúdo
  • Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 17 anos, 9 meses atrás por goncalves_e.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #81901
    farzac
    Participante

      Ola galera

      No trabalho, estou precisando melhorar a performance de um processo de gerar notas fiscais, porem este processo chama varios pacotes e o mais incrivel é que a performance é ruim apenas na primeira vez do dia para determinado cliente. Na minha opiniao acredito que seja por causa que depois que o processo foi gerado, os dados fica armazenado na memoria.

      Mas mesmo que seja uma vez no dia, este processo demora muito.

      Alguem sabe alguma tecnica que eu deva fazer para encontrar em que ponto que esta deixando meu processo lento.

      Preciso encontrar qual query ou pacote que esta ocasionando a lentidao, ja tentei medir a performance de cada query, mas como são muitas, nao tem como.

      Espero que alguem de uma solução.

      #81904
      Marcio68Almeida
      Participante

        Bom…
        Quando há perda de performance apenas na primeira vez, pode ser por que o PARSE ainda não foi resolvido, se há tantos processos como diz, isso realmetne pode demorar um certo tempo para ser resolvido, se bem que não sei quanto é MUITO para você…
        Outra coisa pode ser o armazenamento dos dados em memória, que realmente pode reduzir grandemente o tempo.
        Só não entendi por que UM CLIENTE ESPECÍFICO, nos demais clientes esse problema não ocorre ???
        Você pode usar estar ferramentas para ajuda-lo a procurar eventuais consultas FULL :
        Select s.address, s.last_load_time, s.first_load_time, s.cpu_time, s.elapsed_time, p.object_owner, p.object_name, p.cost, p.cardinality, p.bytes, p.io_cost, p.filter_predicates, w.active_time, w.estimated_optimal_size, w.last_memory_used, w.total_executions, w.active_time
        From v$sql_plan p,
        v$sql s,
        v$sql_workarea w
        Where p.address = s.address
        And p.address = w.address (+)
        And p.hash_value = w.hash_value (+)
        And p.id = w.operation_id (+)
        And p.options = 'FULL'
        And p.object_owner not like '%SYS%'
        And SUBSTR (last_load_time, 1, 10) = TO_CHAR (sysdate, 'yyyy-mm-dd')
        And p.filter_predicates is not null
        Order by cpu_time desc

        Com a consulta acima você encontrará onde há sérios problemas…
        select p.hash_value, operation, options, object_name name, trunc (bytes / 1048576) "input(MB)", trunc(last_memory_used / 1024) last_mem, trunc (estimated_optimal_size/1024) opt_mem, trunc (estimated_onepass_size/1024) onepass_mem, decode (optimal_executions, null, '-', optimal_executions || '/' || onepass_executions || '/' || multipasses_executions) "O/1/M"
        from v$sql_plan p,
        v$sql_workarea w
        where p.address = w.address (+)
        And p.hash_value = w.hash_value (+)
        And p.id = w.operation_id (+)
        And p.address = ''

        Na consulta acima você vai ver mais alguns detalhes sobre a referida consulta…
        Select sql_text from v$sqltext where address = '' order by piece;

        #81908
        goncalves_e
        Participante

          Boa tarde,

          O que você pode fazer, também, é tirar um trace desta aplicação. Nele vão constar algumas informações de como o otimizador está executando este processo.

          Depois de rodar a aplicação com o trace ativado use o tkprof para formatar, e não esqueça de colocar a seguinte expressão no comando tkprof: sort=fchela. Isto fará com que o arquivo do tkprof seja ordenado pela consulta SQL que mais está “custando” ao banco. Desta forma, você poderá ter um ponto inicial para atacar o problema.

          Qualquer dúvida contate-me.

          Abraço
          Eduardo.

          #81909
          farzac
          Participante

            Ola Eduardo.

            Como eu utilizo o tkprof, ja ouvi falar sobre, mas nao sei como utilizar.

            Desde ja, muito obrigado.

            #81912
            goncalves_e
            Participante

              Opa!

              Assim, antes da gente entrar no mérito do tkprof, preciso saber se vc tem conhecimento sobre o trace? Pois, primeiro, vamos ter que rodar um trace da aplicação pra depois usar o tkprof para formatar o resultado do trace.

              Se por acaso vc tiver contato com o DBA, ele pode fazer isso pra vc, pois ele tem o conhecimento para isso. Caso não tenha este contato, posso tentar te ajudar.

              Vamos supor que não tenhamos a ajuda de um DBA e mesmo assim, queremos executar o trace. Pois bem, me diz uma coisa, este procedimento de geração de nffs é uma procedure, função ou algo no gênero? Ou se trata de um programa escrito em tela?

              Na verdade, o que quero saber com isto, é se podemos rodar este processo via SQL*Plus, por exemplo. Se você consegue, já fica mais fácil.

              Esta aplicação é uma aplicação específica ou é Oracle Application (EBS)?

              Me passa estes dados e aí vou tentar te ajudar. Ok?

              Abraço.
              Eduardo.

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.