Pular para o conteúdo
  • Este tópico contém 22 respostas, 6 vozes e foi atualizado pela última vez 16 anos, 9 meses atrás por eversonpiza.
Visualizando 8 posts - 16 até 23 (de 23 do total)
  • Autor
    Posts
  • #87207
    Marcio68Almeida
    Participante

      Lá vamos nós de novo… risos…
      Coloquei o hint, porém nada mudou…
      Aliás, o meu DBA testou com diversos hints diferentes e nada mudou…
      O plano de execução é feito pelo comando :
      set autot trace explain stat
      Não há tabelas temporárias… 🙁
      Plano de Execução
      ----------------------------------------------------------
      0 SELECT STATEMENT Optimizer=HINT: RULE (Cost=10 Card=1 Bytes=139)
      1 0 FILTER
      2 1 MERGE JOIN (CARTESIAN) (Cost=7 Card=1 Bytes=139)
      3 2 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'TB_EMPRESAS_NFS' (Cost=1 Card=1 Bytes=109)
      4 3 NESTED LOOPS (Cost=2 Card=1 Bytes=126)
      5 4 TABLE ACCESS (BY INDEX ROWID) OF 'TB_OBRAS' (Cost=1 Card=1 Bytes=17)
      6 5 INDEX (RANGE SCAN) OF 'IDX_OBRAS_02' (NON-UNIQUE) (Cost=1 Card=1)
      7 4 INDEX (RANGE SCAN) OF 'PK_EMPRESAS_NFS' (UNIQUE) (Cost=1 Card=1)
      8 2 BUFFER (SORT) (Cost=6 Card=1 Bytes=13)
      9 8 VIEW (Cost=5 Card=1 Bytes=13)
      10 9 SORT (AGGREGATE)
      11 10 FILTER
      12 11 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'TB_EMPRESAS_NFS' (Cost=1 Card=1 Bytes=39)
      13 12 NESTED LOOPS (Cost=2 Card=1 Bytes=54)
      14 13 TABLE ACCESS (BY INDEX ROWID) OF 'TB_OBRAS' (Cost=1 Card=1 Bytes=15)
      15 14 INDEX (RANGE SCAN) OF 'IDX_OBRAS_02' (NON-UNIQUE) (Cost=1 Card=1)
      16 13 INDEX (RANGE SCAN) OF 'PK_EMPRESAS_NFS' (UNIQUE) (Cost=1 Card=1)
      17 11 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'TB_EMPRESAS_NFS' (Cost=1 Card=1 Bytes=24)
      18 17 INDEX (RANGE SCAN) OF 'IDX_TB_EMPRESAS_NFS_03' (NON-UNIQUE) (Cost=1 Card=1)
      19 11 TABLE ACCESS (BY INDEX ROWID) OF 'TB_ENCERRAMENTOS' (Cost=2 Card=1 Bytes=22)
      20 19 INDEX (RANGE SCAN) OF 'ENC_PK' (UNIQUE) (Cost=3 Card=1)
      21 1 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'TB_EMPRESAS_NFS' (Cost=1 Card=1 Bytes=24)
      22 21 INDEX (RANGE SCAN) OF 'IDX_TB_EMPRESAS_NFS_03' (NON-UNIQUE) (Cost=1 Card=1)
      23 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_ENCERRAMENTOS' (Cost=2 Card=1 Bytes=22)
      24 23 INDEX (RANGE SCAN) OF 'ENC_PK' (UNIQUE) (Cost=3 Card=1)


      Estatística
      ----------------------------------------------------------
      6624351 recursive calls
      0 db block gets
      9406402 consistent gets
      278 physical reads
      0 redo size
      42983 bytes sent via SQL*Net to client
      15470 bytes received via SQL*Net from client
      29 SQL*Net roundtrips to/from client
      159613 sorts (memory)
      0 sorts (disk)
      406 rows processed

      Ishii,
      Que a aplicação é um lixo, não tenho dúvida alguma.
      O problema é que, a mesma aplicação em um grupo (RAC) de bancos de dados com mais informações roda relativamente rápido, e neste outro demora e tem estes números absurdos.

      Cleiton,
      Não temos nenhum processo de auditoria sendo executado neste banco.
      O que você quer dizer com “forçando um FTS” ???

      #87208
      Ishii
      Participante

        Márcio,

        Será que o DEGREE das tabelas está com um valor para o RAC? Se não me engano para uma instância ele deve estar com 1…

        []s Ishii

        #87209
        Marcio68Almeida
        Participante

          Realmente as tabelas estão todas com degree 1, poucos são os índices que criei com parallel, a grande maioria é antigo e está básico…

          #87214
          eversonpiza
          Participante

            Marcio,
            Se me permitir participar do assunto.

            O tamanho das tabelas envolvidas na consulta é o mesmo?
            Se sim, teste exportar as estatísticas do servidor que esta rápido, e importá-las no outro.

            Embora os dois servidores sejam idênticos, dificilmente as estatísticas tb serão, normalmente o que eu faço em ambiente de testes/homologação, é usar as estatísticas da produção.

            Atn,
            Everson

            #87215
            Marcio68Almeida
            Participante

              [quote=”eversonpiza”:2jynfb9t]Marcio,
              Se me permitir participar do assunto.

              O tamanho das tabelas envolvidas na consulta é o mesmo?
              Se sim, teste exportar as estatísticas do servidor que esta rápido, e importá-las no outro.

              Embora os dois servidores sejam idênticos, dificilmente as estatísticas tb serão, normalmente o que eu faço em ambiente de testes/homologação, é usar as estatísticas da produção.

              Atn,
              Everson[/quote]
              Toda ajuda é bem vinda… 😀
              No servidor que demora menos, as tabelas são maiores.
              Não posso usar estatísticas de outro servidor, pois, mesmo sendo a mesma aplicação, os clientes são distintos.

              #87216
              beneti
              Participante

                Marcio,

                tente o seguinte:

                set autotrace traceonly; (ao inves de set autot trace explain stat)

                E rode a consulta (com o hint ou setando a sessao para rule). O custo está aparecendo pois você pede a stat. Pode ser que o plano mude.

                Com regra não é pra aparecer nada de cost ou card, isso que está estranho.

                #87217
                Marcio68Almeida
                Participante

                  [quote=”beneti”:1ty2ke7j]Marcio,

                  tente o seguinte:

                  set autotrace traceonly; (ao inves de set autot trace explain stat)

                  E rode a consulta (com o hint ou setando a sessao para rule). O custo está aparecendo pois você pede a stat. Pode ser que o plano mude.

                  Com regra não é pra aparecer nada de cost ou card, isso que está estranho.[/quote]
                  O banco está configurado para choose, nenhuma configuração irá alterar isso…

                  #87223
                  eversonpiza
                  Participante

                    Tente forçar ele a usar hash join no lugar no merge join, ele costuma ser bem mais eficiente, para isso use o hint use_hash (tabela a tabela b).
                    Tb de uma olhada no parâmetro pga_aggregate_target, pois para fazer hash ele vai precisar de memória.

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