Ir para conteúdo

POWERED BY:

Arquivado

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

Glauber_GCS

Performance de insert dentro de proc

Recommended Posts

Boa tarde galera,

Faço uma carga dentro de uma procedure de aprocimadamente um milhão de registros,

sendo que esta precisa de uma ordenação que passo com uma variável bind "v_ordem".

 

Meu problema é o seguinte, esta carga está levando 12 min para cada 100 mil, isso é muito tempo, mas descobri

que o que está demorando é justamente a ordenação, já tentei tunar com alguns hints e consegui diminuir para

9 min para cada 100 mil, será que alguém tem alguma dica ?

 

Desde já obrigado.

 

Segue:

 

V_SQL :='INSERT /*+ PARALLEL(CONTACT_PHONE_AUX,8)*/ INTO CONTACT_PHONE_AUX

..............SELECT PH.CONTAC, FC_RETURN_ORDEM(TEL.CPF) PHONE,

.....................PH.ACTIVE PH.P_STATUS

.....................PH.NTRIE_AUR, A.TELEFONE

................FROM TBOD5TELEFONES_BUREAU TEL

...............INNER JOIN TBOD5CLIENTEFILA A ON TEL.CPF = A.CPF

...............INNER JOIN CONTACT_PHONE PH ON A.EASYCODE = PH.CONTACT

...............ORDER BY'||V_ORDEM||'';

 

EXECUTE IMMEDIATE V_SQL;

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) CONTACT_PHONE_AUX tem alguma trigger associada ? A demora pode estar aí.

 

2) Fez o plano de execução da que (só o select) , está otimizado.

 

3) Em tese um INSERT não precisa ser feito na ordem pois isto será resolvido nos selects posteriores desta tabela, a tabela

CONTACT_PHONE_AUX tem índices ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, não tenho trigger na tabela CONTACT_PHONE_AUX,

preciso da ordenação na hora do insert porque a cliente precisa no campo PHONE que fica com uma ordenação,

ai criei uma função para devolber o valor para entrar no campo PHONE "FC_RETURN_ORDEM(TEL.CPF) PHONE" ela verifica se

mudou o CPF, se mudou ele retorna 5 para o campo PHONE, caso contrario soma 1.

 

Ex:

CPF......| TELEFONE.....| PHONE

232323..| 11-5555-4444.| 5

232323..| 11-5555-3333.| 6

232323..| 11-5555-2222.| 7

999999..| 21-0000-4444.| 5

999999..| 21-0000-3333.| 6

999999..| 21-0000-2222.| 7

 

na table CONTACT_PHONE_AUX não tenho indices para não atrapalhar a carga.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não atentei para a function FC_RETURN_ORDEM, ela pode ser o gargalo, as queries dela estão otimizadas ?

 

Talvez as funções de ranqueamento ajudem aqui, veja exemplos aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, dei uma otimizada nas querys da função, o estranho é que se eu rodar

o insert fora da proc ele só leva 3 min, e dentro da proc leva 9 min.

Vou dar uma olhada e fazer uns testes com a função RANK(),

 

Por enquanto

Valew Motta.

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.