Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Morpheus#2005

Update Demoradooooo

Recommended Posts

Bom dia....meu povo..

 

da uma luz ae....eu fiz esse cursor mas estou cruzando ele com uma tabela de 40 mil registros...enfim...

 

esta demorando muito o update....alguem pode me dar uma luz vê se eu fiz algo errado?

 

 

abraços

CREATE OR REPLACE procedure CONTESTACAO_PF.proc_atu_id_subs_cons_pf_ods is

reg   number:=0; 
total number:=0;

cursor c1 
is

select rowid
  from consolidado_contest_pf
where obs         is null
   and cod_servico in (select cod_servico 
                         from dp_serv_contest 
                        where id_servico not in (4,251,122))
   and id_subs is null;

Begin

  dbms_output.put_line(to_char(sysdate,'dd/mm/yyyy hh24:mi:ss'));

  For r1 in c1 
  Loop

     update consolidado_contest_pf
        set id_subs = FUNC_SUBS_ODS(linha,to_char(data_do_servico,'yyyymm'))
      where rowid = r1.rowid;
     
     reg := reg+1;
     
     If reg = 100
        then 
          total := total+reg;
          Commit;
          Reg := 0;
          dbms_output.put_line (total ||' Registros processados');
          
     end if;

  End Loop;

  dbms_output.put_line(to_char(sysdate,'dd/mm/yyyy hh24:mi:ss'));

end;
/

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) O "update" vai por rowid mais rápido impossível.

 

2) A lentidão deve estar no select

 

3) Fez a explain plain deste select ?

 

4) As estatísticas estão atualizadas

 

5) O que faz a function FUNC_SUBS_ODS ? linha é coluna de consolidado_contest_pf ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
CREATE OR REPLACE function CONTESTACAO_PF.FUNC_SUBS_ODS(linha in number, dt_serv in number) return varchar2 IS



subscricao varchar2(20);

begin

dbms_output.put_line(linha||','||dt_serv);

select ods.cd_lnha
  into subscricao
  from integracao.odsdw_atvc_brta@dbl_callipr ods
   where dt_serv = ods.ano_mes_rfrn
   and ods.nr_tlfn = linha
   and rownum = 1
order by cd_lnha               desc;

return subscricao;

end;

Ta aii mottaaaaaaaa

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) Faça a explain plain dos selects

 

2) Veja que a function lê uma tabela de outro bd/schema (faz um dblink) isto pode tornar as coisas lentas , tente por um hint nesta query

 

/*+first_rows index_asc(subscricao ??????)*/

 

?????? nome do índice

 

3) Verifique se as estatísticas estão atualizadas, senão rode as mesmas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.