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

      Pessoal,

      Meu problema atual é que, quando busco por 6 triplas não há table access fulls e retorna o resultado em 2 segundos.
      Quando coloco 1 tripla a mais, somando 7, o oracle então muda por algum motivo o algorítmo e demora 2 minutos para me retornar o resultado, com vários table access full.

      O selelect é:


      SELECT COUNT ( * )
      FROM tcu.vw_esc_del vw
      WHERE (vw.cod_processo, vw.cod_apreciacao, vw.seq_deliberacao) in
      (
      ( 556093 , 3141216 , 33),
      ( 556093 , 3141216 , 36),
      ( 556093 , 3141216 , 37),
      ( 556093 , 3141216 , 38),
      ( 556093 , 3141216 , 39),
      ( 556093 , 3141216 , 40)
      ,( 564848 , 3141205 , 1)
      )

      Apenas com essas informações alguém consegue me dizer qual jeito possível de forçar o oracle a continuar seguindo o primeiro algorítmo de busca?

      Grato.

      #92946
      VitorLeandro
      Participante

        Mostre o plano com esse Hint:

        SELECT /*+ INDEX(vw)*/ COUNT ( * )
        FROM tcu.vw_esc_del vw
        WHERE (vw.cod_processo, vw.cod_apreciacao, vw.seq_deliberacao) in
        (
        ( 556093 , 3141216 , 33),
        ( 556093 , 3141216 , 36),
        ( 556093 , 3141216 , 37),
        ( 556093 , 3141216 , 38),
        ( 556093 , 3141216 , 39),
        ( 556093 , 3141216 , 40)
        ,( 564848 , 3141205 , 1)
        )

        Tambem confira se as estatísticas do Index e da tabela estão atualizadas, se não tiver, colete novamente!

        #92956
        gsmdf
        Participante

          Desculpe meu parco conhecimento, mas atualizar as estatísticas de qual tabela e qual índice?Das tabelas que a view é feita?
          Tentei dar um ANALYZE index tcu.vw compute statistics; e fala que o índice não existe.
          Pelo menos sem essas estatísticas atualizadas, apenas a hint não funcionou não.

          #92957
          VitorLeandro
          Participante

            Esse Hint não funcionou? Então pegue o script da view e veja o plano de execução através do script. Se possível, poste aí. Sobre as estatisticas, a coleta é feita para as tabelas constam no script da view e indexes que constam nessas tabelas..

            #92958
            gsmdf
            Participante

              Atualizei as estatísticas das 2 tabelas e continuou não funcionando.
              Como você pode perceber no script essa view ainda essa ramifica em outra view que se ramifica em 5 views cada uma com várias tabelas, ai não atualizei cada tabela dessas.

              Script:

              DROP VIEW TCU.VW_ESC_DEL;

              /* Formatted on 2010/03/04 10:44 (Formatter Plus v4.8.8) */
              CREATE OR REPLACE FORCE VIEW tcu.vw_esc_del (cod_processo,
              cod_apreciacao,
              seq_deliberacao,
              tipo_deliberacao,
              ano_processo,
              num_processo,
              cod_tipo_decisao,
              num_decisao,
              ano_decisao,
              cod_colegiado_decisao,
              DATA,
              numdelib,
              item,
              apreciador,
              descr,
              processo,
              cod_tipo_autor
              ) AS
              SELECT a.cod_processo cod_processo, a.cod cod_apreciacao,
              d.seq seq_deliberacao, d.tipo tipo_deliberacao, p.ano ano_processo,
              p.num num_processo, a.cod_tipo_decisao cod_tipo_decisao,
              a.num_decisao num_decisao, a.ano_decisao ano_decisao,
              a.cod_colegiado_decisao cod_colegiado_decisao, a.DATA DATA,
              DECODE (a.cod_tipo_decisao,
              NULL, ' ',
              DECODE (a.cod_tipo_decisao,
              08, 'RQ',
              15, 'DC',
              16, 'AC',
              77, 'RL'
              )
              || '-'
              || REPLACE (TO_CHAR (a.num_decisao, 'FMB9,999,999'), ',', '.')
              || '-'
              || REPLACE (TO_CHAR (a.num_ata, 'FMB9,999,999'), ',', '.')
              || '/'
              || TO_CHAR (a.ano_decisao, 'FM0009')
              || '-'
              || a.sigla_colegiado_decisao
              ) numdelib,
              d.texto_identificacao item, a.descr_apreciador apreciador,
              sf_tipo_del_descr (d.tipo)
              || ': '
              || TO_CLOB (sf_del_descr (d.cod_processo, d.cod_apreciacao, d.seq,
              d.tipo)
              ) descr,
              SUBSTR ( TO_CHAR (p.num, 'B999999')
              || TO_CHAR (p.ano, 'FM0009')
              || TO_CHAR (p.num_dv, 'FM9'),
              2,
              11
              ) processo,
              a.cod_tipo cod_tipo_autor
              FROM deliberacao_processo d, vw_aprec_proc_sem_ano_num_proc a, processo p
              WHERE d.cod_processo = a.cod_processo
              AND d.cod_apreciacao = a.cod
              AND p.cod = a.cod_processo;

              DROP PUBLIC SYNONYM VW_ESC_DEL;

              CREATE PUBLIC SYNONYM VW_ESC_DEL FOR TCU.VW_ESC_DEL;

              GRANT SELECT ON TCU.VW_ESC_DEL TO R078S006;

              GRANT SELECT ON TCU.VW_ESC_DEL TO R078S008;

              GRANT SELECT ON TCU.VW_ESC_DEL TO R078S014;

              GRANT SELECT ON TCU.VW_ESC_DEL TO R_GRANTSTEMPORARIOS;

              GRANT SELECT ON TCU.VW_ESC_DEL TO WEBUSER_TEMP;

              #92964
              VitorLeandro
              Participante

                Nossa, aí fica difícil mesmo. O que pode estar acontecendo é que o numero de ocorrencias com os valores novos da ultima tupla seja muito maior que das outras ocorrencias, fazendo com que o otimizador perceba que o FULL scan seja o caminho menos custoso.

                Olha, join encima de view e view composta de views e mais views sempre não é uma boa estratégia.

                Rode essa mesma consulta somente com o filtro da ultima linha.


                SELECT COUNT ( * )
                FROM tcu.vw_esc_del vw
                WHERE (vw.cod_processo, vw.cod_apreciacao, vw.seq_deliberacao) in
                ( 564848 , 3141205 , 1)

                Isso se realmente forem estes mesmo os valores novos.

                Veja se continua fazendo o Full scan.

                #92975
                gsmdf
                Participante

                  Não, sem full scan, e demora só uns 2 segundos para retornar o resultado.
                  Mas de fato essa é uma view sabidamente problemática e antiga..
                  Valeu pela ajuda!

                  #92976
                  VitorLeandro
                  Participante

                    Fica muito difícil ajudar, principalmente num cenário como este. Você pode tentar utilizar o Tunning Advisor. Pode ser que ajude!

                    #92977
                    gsmdf
                    Participante

                      De fato, o cenário é bem complexo para uma ajuda a distãncia.
                      Mas agradeço por ter tentado ajudar!

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