READ e WRITE il parallelismo non sono sempre legati insieme.
alter session disable parallel dml;
disattiva solo il parallelismo per la parte WRITE dell'istruzione. La parte READ può ancora funzionare in parallelo. Trattandosi di un'operazione MERGE
, l'hint parallelo richiede sia il parallelismo in lettura che in scrittura. Inoltre, un suggerimento parallelo ha la precedenza su alter session disable parallel query;
, anche se non sovrascrive lo alter session disable parallel dml;
.
Il numero di server paralleli sarà il doppio del Grado di parallelismo richiesto per supportare producer and consumer operations, al fine di utilizzare pienamente il parallelismo tra le operazioni. Le query che raggruppano o ordinano i risultati utilizzeranno il doppio di thread. In alcuni casi ciò può accadere anche se non esiste un esplicito GROUP BY
o ORDER BY
perché alcune operazioni potrebbero richiedere implicitamente un ordinamento.
tabelle di esempio
create table bigtable_1(key number, value1 number);
create table bigtable_2(key number, value1 number);
lettura parallela e scrittura
Annotare il PX COORDINATOR
per il funzionamento # 1. Quando quel passo è sopra il MERGE
significa che la scrittura è fatta in parallelo.
rollback;
alter session enable parallel dml;
alter session enable parallel query;
explain plan for merge /*+ parallel(a,8) */ into bigtable_1 a using bigtable_2 b
on (a.key = b.key) when matched then update set a.value1 = b.value1;
select * from table(dbms_xplan.display(format => 'basic'));
Plan hash value: 827272579
------------------------------------------------------
| Id | Operation | Name |
------------------------------------------------------
| 0 | MERGE STATEMENT | |
| 1 | PX COORDINATOR | | <-- PARALLEL WRITE
| 2 | PX SEND QC (RANDOM) | :TQ10003 |
| 3 | MERGE | BIGTABLE_1 |
| 4 | PX RECEIVE | | <-- PARALLEL READ
| 5 | PX SEND HYBRID (ROWID PKEY)| :TQ10002 |
| 6 | VIEW | |
| 7 | HASH JOIN BUFFERED | |
| 8 | BUFFER SORT | |
| 9 | PX RECEIVE | |
| 10 | PX SEND HASH | :TQ10000 |
| 11 | TABLE ACCESS FULL | BIGTABLE_2 |
| 12 | PX RECEIVE | |
| 13 | PX SEND HASH | :TQ10001 |
| 14 | PX BLOCK ITERATOR | |
| 15 | TABLE ACCESS FULL | BIGTABLE_1 |
------------------------------------------------------
scrittura seriale, parallela leggere
Ora l'operazione MERGE
è soprattutto PX ...
operazioni. La scrittura viene eseguita in serie, ma la lettura viene ancora eseguita in parallelo.
rollback;
alter session disable parallel dml;
alter session disable parallel query;
explain plan for merge /*+ parallel(a,8) */ into bigtable_1 a using bigtable_2 b
on (a.key = b.key) when matched then update set a.value1 = b.value1;
select * from table(dbms_xplan.display(format => 'basic'));
Plan hash value: 1648019208
------------------------------------------------
| Id | Operation | Name |
------------------------------------------------
| 0 | MERGE STATEMENT | |
| 1 | MERGE | BIGTABLE_1 | <-- SERIAL WRITE
| 2 | PX COORDINATOR | | <-- PARALLEL READ
| 3 | PX SEND QC (RANDOM) | :TQ10002 |
| 4 | VIEW | |
| 5 | HASH JOIN BUFFERED | |
| 6 | BUFFER SORT | |
| 7 | PX RECEIVE | |
| 8 | PX SEND HASH | :TQ10000 |
| 9 | TABLE ACCESS FULL| BIGTABLE_2 |
| 10 | PX RECEIVE | |
| 11 | PX SEND HASH | :TQ10001 |
| 12 | PX BLOCK ITERATOR | |
| 13 | TABLE ACCESS FULL| BIGTABLE_1 |
------------------------------------------------
fonte
2014-11-15 00:01:31
Grazie per l'ottima risposta @jon Heller. – touchchandra
Inoltre, voglio solo essere chiaro in un'altra cosa. Quale configurazione suggerisci, case-1) disabilita DML e usa Parallel (a, 8) o case-2) abilita DML e usa Parallel (a, 4). Solo per garantire che la sessione totale rimanga 8. – touchchandra
Io raccomando di usare '/ * + parallel (8) * /'. Questo utilizza il parallelismo a livello di istruzione invece di livello oggetto. In questo modo non devi preoccuparti di specificare singoli alias. E vorrei puntare a un DOP di 8, non a un numero di server paralleli di 8. Il numero finale potrebbe finire con 16, ma metà di quei thread saranno solo lì per ricevere dati e non tutti veramente "attivi" sul contemporaneamente. –