A tempos, iniciei um projeto de ETL que encontra-se em fase de conclusão.
Ultimo processo de carga full, envolve o JOIN de 5 tabelas gigantes. Decidi então fazer joins por fases.
Ultima fase, envolve um join de duas tabelas que não entendo por que esta demorando absurdamente, outras fases envolveram tabelas com maior massa de dados e não demoraram mais de 4 horas.
Este processo esta a quese 24 horas em execução e não terminou.
Segue dados:
DBM_3CARTAO - Mais de 200 milhões de linhas
CUSTOMER_CARD - Em torno de 90 milhoes de linhas
INSERT INTO DBM.TMP_DBM_4CLIENTE
(
ID_TRANSACAO,
ID_DETALHE_TRANSACAO,
NR_TICKET,
DT_TRANSACAO,
ID_LOJA,
ID_CLIENTE,
NR_CARTAO,
NR_AGRUPAMENTO,
FL_TROCA,
ID_SKU,
VL_preço,
VL_DESCONTO,
VL_DESC_ASSOCIADO,
VL_REMARCACAO,
QT_PRODUTO
)
select
ST.ID_TRANSACAO,
ST.ID_DETALHE_TRANSACAO,
ST.NR_TICKET,
ST.DT_TRANSACAO,
ST.ID_LOJA,
NVL(CA.CUSTOMERPROSPECTID,-2),
NVL(ST.NR_CARTAO,-2),
NVL(CA.ACCOUNTGROUPNBR,-2),
ST.FL_TROCA,
ST.ID_SKU,
ST.VL_preço,
ST.VL_DESCONTO,
ST.VL_DESC_ASSOCIADO,
ST.VL_REMARCACAO,
ST.QT_PRODUTO
from DBM.DBM_3CARTAO st,
CUSTOMER_CARD CA
where ST.NR_CARTAO = CA.CARDNBR (+) ;
-- Join é feito por campo vachar2 que possui 19 caracteres (isso pode ocasionar lentidao no join)
-- Indice esta criado na tabela CUSTOMER_CARD no campo CARDNBR,porem executando "plano de execuçao", ainda sim parece estar executando full scan (não sei informar se estatisticas estao atualizadas, não administro o banco aqui)
-- Verificado e não existem locks
-- Verificado gerenciador da maquina e esta dentro do esperado, não realizando swaap e processamento nos conformes.
-- Estou utilizando "paralelismo 2", utilizei desta mesma forma nos outros processamentos e surtiu efeito.
Duvidas
Voces julgam esta demora aceitavel? Caso negativo, o que pode ser feito para melhoria?
NVL aplicado pode impactar nesta demora?
Pode ser algo relacionado ao paralelismo?
Repito, processos anteriores tiveram maiores massas de dados, porem não demorou isso tudo.