Pular para o conteúdo
  • Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 17 anos atrás por Anônimo.
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #85876
    mpvargas
    Participante

      Caros Amigos,
      Usamos na empresa um ERP comprado e não é possível alterar determinados procedimentos. Quando executam a contabilização off-line, o servidor fica com excesso de I/O. Executei o ADDM e verifiquei que é por causa da query, conforme abaixo:

      FINDING 1: 54% impact (6701 seconds)
      ————————————
      Individual database segments responsible for significant user I/O wait were found.

      RECOMMENDATION 1: Segment Tuning, 37% benefit (4506 seconds)
      ACTION: Investigate application logic involving I/O on TABLE
      “MSIGA.CT2010” with object id 56041.

      Tem alguma coisa que eu posso fazer no banco para pelo menos tentar aliviar esse problema.
      Obrigado pela ajuda.

      #85877
      Anônimo

        vc pode começar com (se vc tiver a licença dos Advisors), rodando o segment Advisor :

        declare
        id number;
        begin
        declare
        name varchar2(100);
        descr varchar2(500);
        obj_id number;
        begin
        name:=’minha_tarefa’;
        descr:=’Segment Advisor ‘;

        dbms_advisor.create_task (
        advisor_name => ‘Segment Advisor’,
        task_id => id,
        task_name => name,
        task_desc => descr);

        dbms_advisor.create_object (
        task_name => name,
        object_type => ‘TABLE’,
        attr1 => ‘MSIGA’,
        attr2 => ‘CT2010’,
        attr3 => NULL,
        attr4 => NULL,
        attr5 => NULL,
        object_id => obj_id);

        dbms_advisor.set_task_parameter(
        task_name => name,
        parameter => ‘recommend_all’,
        value => ‘TRUE’);

        dbms_advisor.execute_task(name);
        end;
        end;

        — depois é só vc fazer :

        select * from dba_advisor_actions where task_name = ‘minha_tarefa’ ;

        Veja as colunas attr1, attr2, attr3, caso o Oracle tenha alguma recomendação, estará nessas colunas.

        []´s

        #85881
        David Siqueira
        Participante

          Amigo pelo que você apresentou seu problema é tipico de performance de aplicação mesmo, o melhor seria você separar essa query que esta impactando e tirar as estatisticas e planos de execuções que envolvem esse objeto ( tabela) em questão, e verificar coisas básicas primeiramente, como :
          – temos indices pelas colunas que estão sendo executadas?
          – esses indices estão sendo eficientes?
          – precisamos particionar essa tabela ?
          – as estatisticas estão atualizadas? ( isso vai depender da sua aplicação e de como sua base de dados esta parametrizada)

          Acredito que isso seria um caminho inicial, feito isso e com todas essas informações na mão daria pra você ter uma idéia melhor do que poderia ser feito no sentido de melhorar sua query e consequentemente sua performance.

          Abcs.

          David

          #85882
          Rodrigo Almeida
          Participante

            O seu problema chama MICROSIGA!!! hehehehehehe… brincadeira.

            Marcelo,

            Existem alguns passos que pode realizar a nível de banco de dados para retirar o excesso de I/O, físico ou lógico, tem que saber isso primeiro!

            Você pode colocar as tabelas desse SELECT em DB_KEEP_CACHE_SIZE, e alterar a estrutura da tabela para Buffer_pool keep!!!

            Tu pode verificar se é possível trabalhar com uma bloco de dados maior em uma determinada tablespace e passar as tabelas para lá!

            Verificar se está com as estatísticas atualizadas!

            Verificar se os índices estão bem da vida!

            E outras coisas mais…

            Abraços,
            Rodrigo Almeida

            #85885
            mpvargas
            Participante

              Caros Amigos,
              Obrigado pela ajuda de todos.

              Só para efeito de informação, segue abaixo o ultimo plano de execução:

              Operação SELECT STATEMENT
              Ordem 3
              Custo 2477543

              Operação TABLE ACCESS BY INDEX ROWID
              Objeto CT2010
              Tipo de Objeto TABLE
              Ordem 2
              Linhas 5032
              Tamanho (KB) 280.102
              Custo 2477543
              Tempo (seg) 29731
              Custo da CPU 30555189430
              Custo de Entrada/Saída 2473977

              Operação INDEX RANGE SCAN DESCENDING
              Objeto CT20101
              Tipo de Objeto INDEX
              Ordem 1
              Linhas 7085270
              Tamanho (KB)
              Custo 66273
              Tempo (seg) 796
              Custo da CPU 3757005981
              Custo de Entrada/Saída 65834

              #85887
              mpvargas
              Participante

                vdrago
                Posso executar esse advisor com a máquina em produção?

                Rodrigo,
                realmente essa microsiga é uma tristeza hehehehe
                a tablespace e indíces dessa tabela estão separados
                e executo estatística do banco todo 3 vezes por semana

                David
                Como posso testar a eficiência do indice?

                Obrigado pela ajuda de todos.

                #85888
                David Siqueira
                Participante

                  A eficiencia dos indices tu pode testar via MOnitoring, assim verifica se eles realmente estão sendo utilizados pelas querys cotidianas ou se estão apenas ocupando espaço, em muitos casos tu pode testar a eficiencia pegando querys que tem problemas e vendo se em todos os passos elas acessam indices pra orimizar sua performance, mais o jeito mais prático mesmo é via MONITORING.

                  Abcs.

                  David

                  #85890
                  David Siqueira
                  Participante

                    Mp meu velho falei, falei e falei e esqueci de dar o caminho das pedras, segue ai a receitinha de bolo pra usar o Monitoring brother , abração!!!

                    http://www.oracle-base.com/articles/10g/IndexMonitoring.php

                    David

                    #85891
                    Anônimo

                      cara, vc pode sim executar o advisor na máquina de produção. Dependendo do segmento a análise demora um pouco mais (laro!!).

                      Até agora, nunca tive problema em executar o advisor e causar problema de performance. Como sempre, vale a recomendação de executar em horários de menos atividade.

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