Re: [firebase-br] AJUDA - SELECT CAUSANDO LENTIDÃO NO BANCO

MagnoS magnoscosta em bol.com.br
Seg Ago 28 12:41:10 -03 2006


Joga ele no PLSQL e veja o plano que ele esta usando para as tabelas 
envolvidas, veja se alguma nao esta sendo acessada "Full", caso isso 
aconteca, force uma perquisa pelo index.

Se vc nao manja.. abre um Test Window ou SQl tanto faz..acho q ai vc tem q 
pegar um test devido as variáveis..
da um F5 e analisa o resultado...
O resultado deve ser algo assim:

SELECT STATEMENT, GOAL = RULE   Cost=347 Cardinality=10000 Bytes=1050000
 VIEW Object owner=FULANO  Cost=347 Cardinality=10000 Bytes=1050000
  SORT ORDER BY   Cost=347 Cardinality=10000 Bytes=1930000
   FILTER
    SORT GROUP BY   Cost=347 Cardinality=10000 Bytes=1930000
     FILTER
      HASH JOIN   Cost=37 Cardinality=10000 Bytes=1930000
       TABLE ACCESS BY INDEX ROWID Object owner=FULANO Object name=CFGENTI 
Cost=2 Cardinality=20 Bytes=1060
        INDEX RANGE SCAN Object owner=FULANO Object 
name=IFK_NCDVEENTI_CFGENTI Cost=1 Cardinality=100
       HASH JOIN   Cost=34 Cardinality=10000 Bytes=1400000
>>>>        TABLE ACCESS FULL Object owner=FULANO Object name=CONCONT Cost=3 
>>>> Cardinality=20 Bytes=300
        MERGE JOIN CARTESIAN   Cost=30 Cardinality=10000 Bytes=1250000
         HASH JOIN OUTER   Cost=20 Cardinality=5 Bytes=560
          TABLE ACCESS BY INDEX ROWID Object owner=FULANO Object 
name=FINTITU Cost=6 Cardinality=5 Bytes=455
           INDEX RANGE SCAN Object owner=FULANO Object name=IND_DEMISTITU 
Cost=2 Cardinality=9
          VIEW Object owner=FULANO  Cost=13 Cardinality=5 Bytes=105
           SORT GROUP BY   Cost=13 Cardinality=5 Bytes=345
            FILTER
             HASH JOIN   Cost=9 Cardinality=5 Bytes=345
              TABLE ACCESS BY INDEX ROWID Object owner=FULANO Object 
name=FINMVTI Cost=6 Cardinality=5 Bytes=215
               INDEX RANGE SCAN Object owner=FULANO Object 
name=IND_DDATAMVTI Cost=2 Cardinality=1
>>>              TABLE ACCESS FULL Object owner=FULANO Object name=FINOPER 
>>> Cost=2 Cardinality=2000 Bytes=52000
         BUFFER SORT   Cost=30 Cardinality=2000 Bytes=26000
          TABLE ACCESS FULL Object owner=FULANO Object name=CFGGERA Cost=2 
Cardinality=2000 Bytes=26000
    SORT GROUP BY NOSORT   Cost=2 Cardinality=1 Bytes=34
     FILTER
      TABLE ACCESS BY INDEX ROWID Object owner=FULANO Object name=FINTITU 
Cost=2 Cardinality=1 Bytes=34
       INDEX UNIQUE SCAN Object owner=FULANO Object name=PK_FINTITU Cost=1 
Cardinality=100
    SORT GROUP BY NOSORT   Cost=2 Cardinality=1 Bytes=34
     FILTER
      TABLE ACCESS BY INDEX ROWID Object owner=FULANO Object name=FINTITU 
Cost=2 Cardinality=1 Bytes=34
       INDEX UNIQUE SCAN Object owner=FULANO Object name=PK_FINTITU Cost=1 
Cardinality=100

Veja nos dois destaques q eu dei (>>>>) q tenho 2 tabelas com acesso full, 
se elas forem pequenas nao tem problema, mas se forem tabelas extensas ai 
complica.
Para vc forçar o index é só for a Tabela.CampoIndex > 0 nos filtros de 
pesquisa.

E tb sugiro entras nessa comunidade:  oracle_br em yahoogrupos.com.br

pode ser que ajude.
Abraços Magno



----- Original Message ----- 
From: "Edilene Baldim Ribeiro" <edcamp74 em hotmail.com>
To: <lista em firebase.com.br>
Sent: Monday, August 28, 2006 10:52 AM
Subject: [firebase-br] AJUDA - SELECT CAUSANDO LENTIDÃO NO BANCO


Olá pessoal.

O DBA da empresa que trabalho nos passou esse "select" dizendo que está
causando muita lentidão no banco.
Já estudei a linha de código mas não estou conseguindo visualizar nenhuma
mudança de melhoria.
Se alguém puder me ajudar desde já agradeço muito.

select:
SELECT   espe_evt_cod esp_princ,
         DECODE (a.espe_evt_cod,
                 99999999, a.exame,
                 DECODE (NVL (b.pcdm_grup_espe_cod, -1), -1, 10014, a.exame)
                ) proced,
         a.exame
    FROM hist_exame a,
             pcdm_pcm b,
             espe_esp f
   WHERE :pr_local_id IS NULL
     AND a.mes_ref BETWEEN TO_DATE (:pr_mes_ref, 'mm/yyyy')
                       AND TO_DATE (:pr_mes_ref2, 'mm/yyyy')
     AND a.grp_emp_id = :pr_grp_emp_id
     AND a.prest_id = :pr_prest_id
     AND a.vlr_pago > 0
     AND b.pcdm_cod(+) = a.exame
     AND f.espe_cod(+) = a.exame

UNION

SELECT   espe_evt_cod esp_princ,
         DECODE (a.espe_evt_cod,
                 99999999, a.exame,
                 DECODE (NVL (b.pcdm_grup_espe_cod, -1), -1, 10014, a.exame)
                ) proced,
         a.exame
    FROM hist_exame        a,
             pcdm_pcm        b,
             pred_prt_edr     c,
             tiep_prt_edr_tip d,
             recf_fxa_cep_rgi e,
             espe_esp           f
   WHERE :pr_local_id IS NOT NULL
     AND a.mes_ref BETWEEN TO_DATE (:pr_mes_ref, 'mm/yyyy')
                       AND TO_DATE (:pr_mes_ref2, 'mm/yyyy')
     AND a.grp_emp_id = :pr_grp_emp_id
     AND a.prest_id = :pr_prest_id
     AND a.vlr_pago > 0
     AND b.pcdm_cod(+) = a.exame
     AND f.espe_cod(+) = a.exame
     AND c.pred_prtd_cod = a.prest_id
     AND d.tiep_pred_cod = c.pred_cod
     AND d.tiep_tip_edr = 3
     AND e.recf_etor_cod = :pr_etor_cod
     AND e.recf_rgio_cod = :pr_local_id
     AND e.recf_cepf_cep_ini <= c.pred_cepe_cod
     AND e.recf_cepf_cep_fim >= c.pred_cepe_cod
GROUP BY espe_evt_cod, a.exame, b.pcdm_grup_espe_cod, f.espe_cod
ORDER BY 1 ASC

_________________________________________________________________
O Windows Live Spaces é seu espaço na internet com fotos (500 por mês), blog
e agora com rede social http://spaces.live.com/


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista