Re: Parallel not being used by Oracle

  • From: Balwanth B <balwanthdba@xxxxxxxxx>
  • To: Jonathan Lewis <jonathan@xxxxxxxxxxxxxxxxxx>, "Powell, Mark" <mark.powell2@xxxxxxx>
  • Date: Fri, 7 Jul 2017 14:16:13 -0400

HI Jonathan,

After making the change I am able to see below plan

SQL_ID  6a1dchjszsarm, child number 0
-------------------------------------
SELECT /*+ parallel(4) full(parametervalue) */
DISTINCT(PV.PARAMETER_VALUE_NAME), D.DEVICETYPE_ID FROM DEVICE D,
PARAMETERVALUE PV, TMP_HDM_CLEANUP_INSTANCE TMP WHERE
D.CACHED_DATA_RECORD_ID = PV.DATA_RECORD_ID AND D.DEVICETYPE_ID =
TMP.DEVICETYPE_ID AND PV.PARAMETER_VALUE_NAME LIKE
TMP.PARAMETER_VALUE_NAME ESCAPE :B1

Plan hash value: 3730697107

------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name                     |
Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |    TQ  |IN-OUT| PQ
Distrib |
------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                   |                          |
  |       |  3444 (100)|          |       |       |        |      |
   |
|   1 |  PX COORDINATOR                    |                          |
  |       |            |          |       |       |        |      |
   |
|   2 |   PX SEND QC (RANDOM)              | :TQ10001                 |
1 |   100 |  3444   (1)| 00:00:42 |       |       |  Q1,01 | P->S | QC
(RAND)  |
|   3 |    HASH UNIQUE                     |                          |
1 |   100 |  3444   (1)| 00:00:42 |       |       |  Q1,01 | PCWP |
   |
|   4 |     PX RECEIVE                     |                          |
1 |   100 |  3443   (1)| 00:00:42 |       |       |  Q1,01 | PCWP |
   |
|   5 |      PX SEND HASH                  | :TQ10000                 |
1 |   100 |  3443   (1)| 00:00:42 |       |       |  Q1,00 | P->P | HASH
    |
|   6 |       NESTED LOOPS                 |                          |
1 |   100 |  3443   (1)| 00:00:42 |       |       |  Q1,00 | PCWP |
   |
|   7 |        NESTED LOOPS                |                          |
1 |    57 |  3442   (1)| 00:00:42 |       |       |  Q1,00 | PCWP |
   |
|   8 |         PX BLOCK ITERATOR          |                          |
  |       |            |          |       |       |  Q1,00 | PCWC |
   |
|*  9 |          TABLE ACCESS FULL         | TMP_HDM_CLEANUP_INSTANCE |
 4125 |   185K|     3   (0)| 00:00:01 |       |       |  Q1,00 | PCWP |
       |
|  10 |         TABLE ACCESS BY INDEX ROWID| DEVICE                   |
1 |    11 |     1   (0)| 00:00:01 |       |       |  Q1,00 | PCWP |
   |
|* 11 |          INDEX RANGE SCAN          | SYS_C0016783             |
 1822K|       |     1   (0)| 00:00:01 |       |       |  Q1,00 | PCWP |
       |
|  12 |        PARTITION HASH ITERATOR     |                          |
1 |    43 |     1   (0)| 00:00:01 |   KEY |   KEY |  Q1,00 | PCWP |
   |
|* 13 |         INDEX RANGE SCAN           | UQ_PARAM_NEW             |
1 |    43 |     1   (0)| 00:00:01 |   KEY |   KEY |  Q1,00 | PCWP |
   |
------------------------------------------------------------------------------------------------------------------------------------------------------------


Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1
   9 - SEL$1 / TMP@SEL$1
  10 - SEL$1 / D@SEL$1
  11 - SEL$1 / D@SEL$1
  13 - SEL$1 / PV@SEL$1

Predicate Information (identified by operation id):
---------------------------------------------------

   9 - access(:Z>=:Z AND :Z<=:Z)
  11 - access("D"."DEVICETYPE_ID"="TMP"."DEVICETYPE_ID")
  13 - access("D"."CACHED_DATA_RECORD_ID"="PV"."DATA_RECORD_ID" AND
"PV"."PARAMETER_VALUE_NAME" LIKE "TMP"."PARAMETER_VALUE_NAME" ESCAPE :B1)
       filter("PV"."PARAMETER_VALUE_NAME" LIKE "TMP"."PARAMETER_VALUE_NAME"
ESCAPE :B1)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "PV"."PARAMETER_VALUE_NAME"[VARCHAR2,255],
"D"."DEVICETYPE_ID"[NUMBER,22]
   2 - (#keys=0) "PV"."PARAMETER_VALUE_NAME"[VARCHAR2,255],
"D"."DEVICETYPE_ID"[NUMBER,22]
   3 - "PV"."PARAMETER_VALUE_NAME"[VARCHAR2,255],
"D"."DEVICETYPE_ID"[NUMBER,22]
   4 - "PV"."PARAMETER_VALUE_NAME"[VARCHAR2,255],
"D"."DEVICETYPE_ID"[NUMBER,22]
   5 - (#keys=2) "PV"."PARAMETER_VALUE_NAME"[VARCHAR2,255],
"D"."DEVICETYPE_ID"[NUMBER,22]
   6 - "D"."DEVICETYPE_ID"[NUMBER,22],
"PV"."PARAMETER_VALUE_NAME"[VARCHAR2,255]
   7 - "TMP"."PARAMETER_VALUE_NAME"[VARCHAR2,255],
"D"."DEVICETYPE_ID"[NUMBER,22], "D"."CACHED_DATA_RECORD_ID"[NUMBER,22]
   8 - "TMP"."PARAMETER_VALUE_NAME"[VARCHAR2,255],
"TMP"."DEVICETYPE_ID"[NUMBER,22]
   9 - "TMP"."PARAMETER_VALUE_NAME"[VARCHAR2,255],
"TMP"."DEVICETYPE_ID"[NUMBER,22]
  10 - "D"."DEVICETYPE_ID"[NUMBER,22],
"D"."CACHED_DATA_RECORD_ID"[NUMBER,22]
  11 - "D".ROWID[ROWID,10], "D"."DEVICETYPE_ID"[NUMBER,22]
  12 - "PV"."PARAMETER_VALUE_NAME"[VARCHAR2,255]
  13 - "PV"."PARAMETER_VALUE_NAME"[VARCHAR2,255]

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

On Fri, Jul 7, 2017 at 1:44 PM, Balwanth B <balwanthdba@xxxxxxxxx> wrote:

previos email sql monitor report was from staging environment... As
jonathan said, I tried forcing parallel its still taking serial access..
Following his suggestions, will let you know how this goes.

On Fri, Jul 7, 2017 at 11:29 AM, Jonathan Lewis <
jonathan@xxxxxxxxxxxxxxxxxx> wrote:


The parallel() hints do not tell the optimizer to produce a plan that
runs parallel, they tell the optimizer to consider the cost of using
parallelism. The optimizer will still take a serial plan if there is a
valid serial plan with a lower cost than the valid parallel plans.
https://jonathanlewis.wordpress.com/2017/05/25/parallelism/

Your plan shows that Oracle has a problem with the statistics on the
DEVICE table (or the function-based(?) sys_C0016783; possibly this has an
effect on the choice of plan; certainly the optimizer thinks that it only
needs to find one row from parametervalue to satisfy the query (one row
produced by operation 3 - to drive an indexed access into a parametervalue).

If you really want to get a parallel scan of parametervalue you need to
hint with both parallel() and full().

Regards
Jonathan Lewis


________________________________________
From: oracle-l-bounce@xxxxxxxxxxxxx <oracle-l-bounce@xxxxxxxxxxxxx> on
behalf of Balwanth B <balwanthdba@xxxxxxxxx>
Sent: 07 July 2017 15:44:56
To: ORACLE-L
Subject: Parallel not being used by Oracle

This particular query which is  part of PL/SQL  is running for long time
and doesn't use parallel even when parallel hint is given? Can someone
please throw some light here.


SELECT /*+ parallel(pv,4) */ DISTINCT(PV.PARAMETER_VALUE_NAME),
D.DEVICETYPE_ID FROM DEVICE D, PARAMETERVALUE PV,
TMP_HDM_CLEANUP_INSTANCE TMP WHERE D.CACHED_DATA_RECORD_ID =
PV.DATA_RECORD_ID AND D.DEVICETYPE_ID = TMP.DEVICETYPE_ID AND
PV.PARAMETER_VALUE_NAME LIKE TMP.PARAMETER_VALUE_NAME ESCAPE :B1


------------------------------------------------------------
---------------------------------------------------------------
| Id  | Operation                      | Name                     | Rows
| Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
------------------------------------------------------------
---------------------------------------------------------------
|   0 | SELECT STATEMENT               |                          |
 |       | 12395 (100)|          |       |       |
|   1 |  HASH UNIQUE                   |                          |     1
|   100 | 12395   (1)| 00:02:29 |       |       |
|   2 |   NESTED LOOPS                 |                          |     1
|   100 | 12393   (1)| 00:02:29 |       |       |
|   3 |    NESTED LOOPS                |                          |     1
|    57 | 12390   (1)| 00:02:29 |       |       |
|   4 |     TABLE ACCESS FULL          | TMP_HDM_CLEANUP_INSTANCE |  4125
|   185K|    11   (0)| 00:00:01 |       |       |
|   5 |     TABLE ACCESS BY INDEX ROWID| DEVICE                   |     1
|    11 |     3   (0)| 00:00:01 |       |       |
|*  6 |      INDEX RANGE SCAN          | SYS_C0016783             |
1822K|       |     3   (0)| 00:00:01 |       |       |
|   7 |    PARTITION HASH ITERATOR     |                          |     1
|    43 |     3   (0)| 00:00:01 |   KEY |   KEY |
|*  8 |     INDEX RANGE SCAN           | UQ_PARAM_NEW             |     1
|    43 |     3   (0)| 00:00:01 |   KEY |   KEY |
------------------------------------------------------------
---------------------------------------------------------------



Other related posts: