Pular para o conteúdo

Fóruns Banco de dados Oracle tunning mview tunning mview

#86749
vieri
Participante

    O problema é que se eu criar a tabela
    na mão com um create table as select(mesmo select da mview),a table é criada
    em 7seg, se eu ficar um truncate+insert
    roda em 8seg,

    mas quando crio a mview, ou peço um dbms_mview.refresh

    ele leva 2 horas!!

    E habilitando um trace após 30min de execução,
    ele fica paradão no parse do SQL…

    STAT #16 id=1 cnt=0 pid=0 pos=1 obj=0 op=’FOR UPDATE (cr=1 pr=0 pw=0 time=17 us)’
    STAT #16 id=2 cnt=0 pid=1 pos=1 obj=165 op=’TABLE ACCESS CLUSTER MLOG$ (cr=1 pr=0 pw=0 time=12 us)’

    STAT #16 id=3 cnt=0 pid=2 pos=1 obj=164 op=’INDEX UNIQUE SCAN I_MLOG# (cr=1 pr=0 pw=0 time=7 us)’

    PARSING IN CURSOR #17 len=312 dep=1 uid=0 oct=6 lid=0 tim=1213200456455966 hv=2958118544 ad=’7d8b6650′
    update /*+ BYPASS_UJVC */ ( select s.status status from snap$ s, snap_reftime$ r where s.sowner = r.sowner and s.vname = r.vname and r.mowner = :1 and r.master = :2 and s.mlink IS NULL and bitand(s.status,16) = 0 and r.instsite =0 and s.instsite =0) v set status = status + 16
    END OF STMT
    PARSE #17:c=0,e=179,p=0,cr=0,cu=2,mis=1,r=0,dep=1,og=4,tim=1213200456455964
    EXEC #17:c=2000,e=1578,p=0,cr=5,cu=0,mis=1,r=0,dep=1,og=4,tim=1213200456457580
    STAT #17 id=1 cnt=0 pid=0 pos=1 obj=0 op=’UPDATE SNAP$ (cr=5 pr=0 pw=0 time=232 us)’
    STAT #17 id=2 cnt=0 pid=1 pos=1 obj=220 op=’TABLE ACCESS BY INDEX ROWID SNAP_REFTIME$ (cr=5 pr=0 pw=0 time=223 us)’
    STAT #17 id=3 cnt=15 pid=2 pos=1 obj=0 op=’NESTED LOOPS (cr=4 pr=0 pw=0 time=1017 us)’
    STAT #17 id=4 cnt=7 pid=3 pos=1 obj=212 op=’TABLE ACCESS BY INDEX ROWID SNAP$ (cr=2 pr=0 pw=0 time=158 us)’
    STAT #17 id=5 cnt=7 pid=4 pos=1 obj=218 op=’INDEX SKIP SCAN I_SNAP2 (cr=1 pr=0 pw=0 time=125 us)’
    STAT #17 id=6 cnt=7 pid=3 pos=2 obj=221 op=’INDEX RANGE SCAN I_SNAP_REFTIME1 (cr=2 pr=0 pw=0 time=47 us)’
    STAT #21 id=1 cnt=0 pid=0 pos=1 obj=0 op=’DELETE MV_PRECO_ITEM_PRODUTO_TESTE (cr=3 pr=0 pw=0 time=26 us)’

    STAT #21 id=2 cnt=0 pid=1 pos=1 obj=158435 op=’MAT_VIEW ACCESS FULL MV_PRECO_ITEM_PRODUTO_TESTE (cr=3 pr=0 pw=0 time=21 us)’

    PARSING IN CURSOR #21 len=1009 dep=1 uid=67 oct=2 lid=67 tim=1213200456467854 hv=336269635 ad=’165e8210′
    INSERT /*+ BYPASS_RECURSIVE_CHECK */ INTO “CEV”.”MV_PRECO_ITEM_PRODUTO_TESTE” SELECT distinct
    p.COD_PRODUTO_INTERNO,
    t.COD_FILIAL,
    t.DAT_HORA_TABELA,
    t.COD_SKU_INTERNO,
    t.VAL_PRECO_TABELA,
    t.COD_TIPO_ANUNCIO,
    t.VAL_PRECO_DE,
    t.IND_PRECO_DE_LOJA,
    t.PCT_JUROS_SECUNDARIO,
    t.VAL_PRECO_LOJA,
    t.VAL_DESCONTO_A_VISTA,
    t.PCT_DESCONTO_A_VISTA,
    t.COD_SKU_BRINDE,
    t.QTD_SKU_BRINDE,
    t.QTD_PARCELA_EXIBICAO,
    t.PCT_JUROS_EXIBICAO,
    t.VAL_PARCELA_EXIBICAO,
    t.VAL_DESCONTO_PARCELAMENTO,
    t.PCT_DESCONTO_PARCELAMENTO,
    t.VAL_PRECO_A_VISTA,
    t.VAL_DESCONTO_BOLETO,
    t.PCT_DESCONTO_BOLETO
    FROM
    cev.TB_PRECO_ITEM t , cev.TB_SKU sku, cev.TB_PRODUTO p
    where sku.COD_SKU_INTERNO = t.COD_SKU_INTERNO
    and p.COD_PRODUTO_INTERNO = sku.COD_PRODUTO_INTERNO
    and sku.COD_CLASSE IN (‘A’, ‘B’, ‘I’, ‘L’)
    AND (t.COD_SKU_INTERNO, t.DAT_HORA_TABELA) IN (SELECT COD_SKU_INTERNO, MAX(DAT_HORA_TABELA)
    FROM cev.TB_PRECO_ITEM
    GROUP BY COD_SKU_INTERNO)
    END OF STMT
    PARSE #21:c=9998,e=10061,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,tim=1213200456467849

    repare o time no parse…
    o refresh fica paradão ai..

    isso ta me cheirando a BUG de mview, ou limitação não tratada
    com exceção, ficando em loop…

    oque acham?