Download AC-Toolbar Oracle Schulung und Consulting

ADOP (Automatic degree of parallelism)

Benutzerbewertung: / 697
SchwachPerfekt 
Geschrieben von: Marek Adar   

Ab Oracle 11gR2 wurde Automatic Degree of Parallelism (ADOP) eingeführt, um Oracle die Entscheidung des Parallelitätsgrad für die Ausführung von SQL-Anweisungen bestimmen zu lassen.

In vorherigen Versionen von Oracle musste der Parallelitätsgrad über das Hint PARALLEL in der SQL-Anweisung, oder über den Parallelitätsgrad der Tabelle festgelegt werden.

 SQL> select count(*) from testtab2;

COUNT(*)
----------
100000

1 Zeile wurde ausgewählt.

SQL> set autotrace traceonly
SQL> select count(*) from testtab2;

1 Zeile wurde ausgewählt.

Ausführungsplan
----------------------------------------------------------
Plan hash value: 103376238

-----------------------------------------------------------------------
| Id  | Operation          | Name     | Rows  | Cost (%CPU)| Time     |
-----------------------------------------------------------------------
|   0 | SELECT STATEMENT   |          |     1 |   206   (1)| 00:00:03 |
|   1 |  SORT AGGREGATE    |          |     1 |            |          |
|   2 |   TABLE ACCESS FULL| TESTTAB2 |   100K|   206   (1)| 00:00:03 |
-----------------------------------------------------------------------

Statistiken
----------------------------------------------------------
0    recursive calls
0    db block gets
678  consistent gets
670  physical reads
0    redo size
429  bytes sent via SQL*Net to client
416  bytes received via SQL*Net from client
2    SQL*Net roundtrips to/from client
0    sorts (memory)
0    sorts (disk)
1    rows processed

SQL> select /*+parallel 2 */ count(*) from testtab2;

1 Zeile wurde ausgewählt.

Ausführungsplan
----------------------------------------------------------
Plan hash value: 2843183767

--------------------------------------------------------------------------------------------------------
| Id  | Operation              | Name     | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |          |     1 |   114   (1)| 00:00:02 |        |      |            |
|   1 |  SORT AGGREGATE        |          |     1 |            |          |        |      |            |
|   2 |   PX COORDINATOR       |          |       |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM) | :TQ10000 |     1 |            |          |  Q1,00 | P->S | QC (RAND)  |
|   4 |     SORT AGGREGATE     |          |     1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR |          |   100K|   114   (1)| 00:00:02 |  Q1,00 | PCWC |            |
|   6 |       TABLE ACCESS FULL| TESTTAB2 |   100K|   114   (1)| 00:00:02 |  Q1,00 | PCWP |            |
--------------------------------------------------------------------------------------------------------

Note
-----
- automatic DOP: Computed Degree of Parallelism is 2

Statistiken
----------------------------------------------------------
12   recursive calls
4    db block gets
845  consistent gets
670  physical reads
0    redo size
429  bytes sent via SQL*Net to client
416  bytes received via SQL*Net from client
2    SQL*Net roundtrips to/from client
0    sorts (memory)
0    sorts (disk)
1    rows processed

SQL> set autotrace off

In Oracle 11GR2 wurden neue Parameter eingeführt, die die automatische Parallelisierung aktivieren.

 SQL> show parameter parallel

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
fast_start_parallel_rollback         string      LOW
parallel_adaptive_multi_user         boolean     TRUE
parallel_automatic_tuning            boolean     FALSE
parallel_degree_limit                string      CPU
parallel_degree_policy               string      MANUAL
parallel_execution_message_size      integer     16384
parallel_force_local                 boolean     FALSE
parallel_instance_group              string
parallel_io_cap_enabled              boolean     FALSE
parallel_max_servers                 integer     20
parallel_min_percent                 integer     0
parallel_min_servers                 integer     0
parallel_min_time_threshold          string      AUTO
parallel_server                      boolean     FALSE
parallel_server_instances            integer     1
parallel_servers_target              integer     8
parallel_threads_per_cpu             integer     2
recovery_parallelism                 integer     0

Hierbei sind die Parameter prallel_degree_policy und parallel_min_time_treshold von besonderer Bedeutung. Der Parameter parallel_degree_policy aktiviert ADOP, wenn er auf AUTO gesetzt wird. Der Parameter parallel_min_time_threshold bestimmt den zeitlichen Schwellwert, den ein serieller Plan in seiner Abarbeitung überschreiten muss, ehe der Optimizer versucht einen adäquaten parallelen Plan zu erstellen. Der Standard dieses Parameters liegt bei 30 Sekunden. Dieses bedeutet, überschreitet die geschätzte Laufzeit des seriellen Plans diesen Schwellwert, entwickelt der Optimizer einen alternativen parallelen Plan und vergleicht die Laufzeit dieses Plans mit dem seriellen. Ist der parallele Plan schneller in seiner Abarbeitung, als der serielle, so wird der parallele Plan verwendet, ansonsten der serielle.

SQL> alter session set parallel_degree_policy='AUTO';

Session wurde geändert.

SQL> select count(*) from testtab2;

COUNT(*)
----------
100000

1 Zeile wurde ausgewählt.

SQL> set autotrace traceonly
SQL> select count(*) from testtab2;

1 Zeile wurde ausgewählt.

Ausführungsplan
----------------------------------------------------------
Plan hash value: 103376238

-----------------------------------------------------------------------
| Id  | Operation          | Name     | Rows  | Cost (%CPU)| Time     |
-----------------------------------------------------------------------
|   0 | SELECT STATEMENT   |          |     1 |   206   (1)| 00:00:03 |
|   1 |  SORT AGGREGATE    |          |     1 |            |          |
|   2 |   TABLE ACCESS FULL| TESTTAB2 |   100K|   206   (1)| 00:00:03 |
-----------------------------------------------------------------------

Note
-----
- automatic DOP: Computed Degree of Parallelism is 1 because of parallel threshold

Statistiken
----------------------------------------------------------
0    recursive calls
0    db block gets
678  consistent gets
0    physical reads
0    redo size
429  bytes sent via SQL*Net to client
416  bytes received via SQL*Net from client
2    SQL*Net roundtrips to/from client
0    sorts (memory)
0    sorts (disk)
1    rows processed

In der vorhergehenden Anweisung entschied sich der Optimizer zur Verwendung eines seriellen Ausführungsplans, da der zeitliche Schwellwert nicht überschritten wurde.

Im nächsten Beispiel wird der Parameter  parallel_min_time_threshold drastisch zu Demonstrartionszwecken verkleinert, wodurch die Entscheidung auf einen parallen Plan fällt. 

 SQL> alter session set parallel_min_time_threshold=1;

Session wurde geändert.

SQL> select count(*) from testtab2;

1 Zeile wurde ausgewählt.

Ausführungsplan
----------------------------------------------------------
Plan hash value: 2843183767

--------------------------------------------------------------------------------------------------------
| Id  | Operation              | Name     | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |          |     1 |   114   (1)| 00:00:02 |        |      |            |
|   1 |  SORT AGGREGATE        |          |     1 |            |          |        |      |            |
|   2 |   PX COORDINATOR       |          |       |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM) | :TQ10000 |     1 |            |          |  Q1,00 | P->S | QC (RAND)  |
|   4 |     SORT AGGREGATE     |          |     1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR |          |   100K|   114   (1)| 00:00:02 |  Q1,00 | PCWC |            |
|   6 |       TABLE ACCESS FULL| TESTTAB2 |   100K|   114   (1)| 00:00:02 |  Q1,00 | PCWP |            |
--------------------------------------------------------------------------------------------------------

Note
-----
- automatic DOP: Computed Degree of Parallelism is 2

Statistiken
----------------------------------------------------------
53   recursive calls
8    db block gets
905  consistent gets
0    physical reads
0    redo size
429  bytes sent via SQL*Net to client
416  bytes received via SQL*Net from client
2    SQL*Net roundtrips to/from client
0    sorts (memory)
0    sorts (disk)
1    rows processed

SQL>

 

 

 

 

 

©Adar-Consult, Ihr Partner für Oracle Schulungen, Seminare, Workshops und Consulting

Oracle Training und Schulungen
Tag Cloud
schulungsangebot google404, recovery export pl/sql-entwicklung application cluster packages hochverfügbarkeits-bootcamp sql-tuning oracle sql-pl/sql-bootcamp excel pl/sql google sql-commander sql-grundlagen oracle-architekturposter poster import plan, oracle-check, kleine rac-praxisworkshop oracle-datenbankadministration
AC-Blog