Optimisation de traitement: Faire des updates en parallèle
Bonjour,
Je fais de la reprise de données (beaucoup de données).
Pour cela, je fais un curseur qui sélectionne des données en base et fais des updates suivant des critères voulus. Le problème est que le traitement dure des heures.
En effet, les updates sont faits un par un.
Mon idée, peut être que vous avez une meilleure, est de faire des updates en parralèle. Le problème est que je ne sais pas comment faire.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| DECLARE
a NUMBER(10);
CURSOR C_EMP Is
select /*+ full (op) parallel (op, 8) */ * from Table1 op
where condition1
and ocondition2;
BEGIN
For c in C_EMP Loop
SELECT count(*) into a
from Table2 ciem
where condition3
and condition4
and ....;
If a>0
Then
update /*+PARALLEL (op, 8) */ Table1 op
set op.b = c,
op.d=e,
.....
where condition5
and conditions6;
Else
update /*+PARALLEL (op, 8) */ Table1 op
set op.b = f,
op.d=e,
.....
where condition5
and conditions6;
End if ;
IF (MOD(C_EMP%rowcount,1000) = 0) THEN
BEGIN
COMMIT;
END;
END IF ;
End loop ;
END;
/
EXIT; |
En bleu le parallélisme que je rajoute. Je le trouve cependant sans intérêt vu que je continue toujours à faire les updates un par un (filtrage sur condition5 et condition6).