Serial plans: Threshold / Parallel_degree_limit = 1

Posted by jean-pierre.dijcks on Oracle Blogs See other posts from Oracle Blogs or by jean-pierre.dijcks
Published on Thu, 13 Jan 2011 15:00:06 -0800 Indexed on 2011/01/13 23:56 UTC
Read the original article Hit count: 417

As a very short follow up on the previous post. So here is some more on getting a serial plan and why that happens

Another reason - compared to the auto DOP is not on as we looked at in the earlier post - and often more prevalent to get a serial plan is if the plan simply does not take long enough to consider a parallel path. The resulting plan and note looks like this (note that this is a serial plan!):

explain plan for
select count(1) from sales;

SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 672559287

--------------------------------------------------------------------------------------

| Id  | Operation            | Name  | Rows  | Cost (%CPU)| Time     | Pstart| Pstop |

--------------------------------------------------------------------------------------

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |       |     1 |     5   (0)| 00:00:01 |       |     |

|   1 |  SORT AGGREGATE      |       |     1 |            |          |       |     |

|   2 |   PARTITION RANGE ALL|       |   960 |     5   (0)| 00:00:01 |     1 |  16 |

|   3 |    TABLE ACCESS FULL | SALES |   960 |     5   (0)| 00:00:01 |     1 |  16 |

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

14 rows selected.

The parallel threshold is referring to parallel_min_time_threshold and since I did not change the default (10s) the plan is not being considered for a parallel degree computation and is therefore staying with the serial execution.

Now we go into the land of crazy:

Assume I do want this DOP=1 to happen, I could set the parameter in the init.ora, but to highlight it in this case I changed it on the session:

alter session set parallel_degree_limit = 1;

The result I get is:

ERROR:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00096: invalid value 1 for parameter parallel_degree_limit, must be from among CPU IO AUTO INTEGER>=2

Which of course makes perfect sense...

© Oracle Blogs or respective owner

Related posts about best practices

Related posts about functionality