› Fóruns › SQL e PL/SQL › bulk collect update limit › bulk collect update limit
Senhores Segue resolução.
*Mostra também os intervalos entre os commits.
*Nesse exemplo o commit é efetuado a cada 500 mil linhas atualizadas(limit 500000;).
*Como a tabela é grande fiz teste apenas para 10 milhões de linhas (rownum < 10000000;)
set timing on
set autotrace on
set serveroutput on
declare
cursor C1 is select rowid as IDLINHA from .
exemplo da saida:
Execution Plan
———————————————————-
0 UPDATE STATEMENT Optimizer Mode=CHOOSE
1 0 UPDATE TESTE.TABELA_BK
2 1 TABLE ACCESS FULL TESTE.TABELA_BK
Statistics
———————————————————-
392 recursive calls
1102779 db block gets
2797 consistent gets
2072 physical reads
241807224 redo size
0 Parallel operations downgraded 50 to 75 pct
0 Parallel operations downgraded 25 to 50 pct
0 Parallel operations downgraded 1 to 25 pct
0 PX remote messages recv’d
0 buffer is pinned count
999999 rows processed
Inicio : 18/03/10 18:07:19
500K : 18/03/10 18:08:19
500K : 18/03/10 18:09:09
500K : 18/03/10 18:09:40
500K : 18/03/10 18:10:45
500K : 18/03/10 18:11:34
500K : 18/03/10 18:12:15
500K : 18/03/10 18:13:04
500K : 18/03/10 18:13:35
500K : 18/03/10 18:14:07
500K : 18/03/10 18:14:49
500K : 18/03/10 18:15:20
500K : 18/03/10 18:16:01
500K : 18/03/10 18:16:39
500K : 18/03/10 18:17:32
500K : 18/03/10 18:18:07
500K : 18/03/10 18:18:39
500K : 18/03/10 18:19:14
500K : 18/03/10 18:19:45
500K : 18/03/10 18:20:18
500K : 18/03/10 18:20:45
Fim : 18/03/10 18:20:45
PL/SQL procedure successfully completed.
Elapsed: 00:13:30.80 Para 10 Milhoes de rows
Assim é muito mais rápido. Testem e vejam o quanto eficiente é usar BULK Collect.
Com isso evita-se alto uso de UNDO, pode-se, nesse caso, fazer aos poucos – como no exemplo, fiz para 10 milhões de linhas – para gerenciar a quantidade de archives gerados.
Agradeço a todos que participaram e que direto ou indiretamente ajudaram.