Re: Can't get INSERT /*+ APPEND */ to indicate direct load in execution plan.....

From: Radoulov, Dimitre <cichomitiko_at_gmail.com>
Date: Tue, 01 Nov 2011 22:45:57 +0100
Message-ID: <4EB06895.7080801_at_gmail.com>


Hi Mark,
yes, the documentation is clear.

Actually I should have said: the append hint was ignored (not *only* the append hint was ignored).

I mean that, if I'm reading this correctly, the plan output alone is not sufficient to determine if the table TEST is accessed in parallel or only the table CS_CONTENT_XML_DATA is read in parallel.

With a simple test I'm getting the following output:

insert into emp_1 select /*+ parallel */ * from scott.emp

Plan hash value: 2873591275



| Id | Operation | Name | Rows | Bytes | Cost
(%CPU)| Time | TQ |IN-OUT| PQ Distrib |

| 0 | INSERT STATEMENT | | | | 2
(100)|          |        |      |            |

| 1 | LOAD TABLE CONVENTIONAL | | | |
| | | | |
| 2 | PX COORDINATOR | | | |
| | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 14 | 532 | 2
(0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 4 | PX BLOCK ITERATOR | | 14 | 532 | 2
(0)| 00:00:01 | Q1,00 | PCWC | | |* 5 | TABLE ACCESS FULL | EMP | 14 | 532 | 2 (0)| 00:00:01 | Q1,00 | PCWP | | ------------------------------------------------------------------------------------------------------------------

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


    1 - SEL$1
    5 - SEL$1 / EMP_at_SEL$1

Outline Data


   /*+

       BEGIN_OUTLINE_DATA
       IGNORE_OPTIM_EMBEDDED_HINTS
       OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
       DB_VERSION('11.2.0.3')
       ALL_ROWS
       NO_PARALLEL
       OUTLINE_LEAF(_at_"SEL$1")
       OUTLINE_LEAF(_at_"INS$1")
       FULL(_at_"INS$1" "EMP_1"@"INS$1")
       FULL(_at_"SEL$1" "EMP"@"SEL$1")
       END_OUTLINE_DATA

   */

Predicate Information (identified by operation id):


    5 - access(:Z>=:Z AND :Z<=:Z)

[...]

Note


  • automatic DOP: skipped because of IO calibrate statistics are missing

I believe here the insert in the table emp_1 is in serial mode (note the no_parallel in the outline section).
This is the plan with a parallel hint for emp_1 (I see no difference in the plan, the outline data section is different though):

insert /*+ parallel(4) */ into emp_1 select /*+ parallel(4) */ * from scott.emp

Plan hash value: 2873591275



| Id | Operation | Name | Rows | Bytes | Cost
(%CPU)| Time | TQ |IN-OUT| PQ Distrib |

| 0 | INSERT STATEMENT | | | | 2
(100)|          |        |      |            |

| 1 | LOAD TABLE CONVENTIONAL | | | |
| | | | |
| 2 | PX COORDINATOR | | | |
| | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 14 | 532 | 2
(0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 4 | PX BLOCK ITERATOR | | 14 | 532 | 2
(0)| 00:00:01 | Q1,00 | PCWC | | |* 5 | TABLE ACCESS FULL | EMP | 14 | 532 | 2 (0)| 00:00:01 | Q1,00 | PCWP | | ------------------------------------------------------------------------------------------------------------------

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


    1 - SEL$1
    5 - SEL$1 / EMP_at_SEL$1

Outline Data


   /*+

       BEGIN_OUTLINE_DATA
       IGNORE_OPTIM_EMBEDDED_HINTS
       OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
       DB_VERSION('11.2.0.3')
       ALL_ROWS
       SHARED(4)
       OUTLINE_LEAF(_at_"SEL$1")
       OUTLINE_LEAF(_at_"INS$1")
       FULL(_at_"INS$1" "EMP_1"@"INS$1")
       FULL(_at_"SEL$1" "EMP"@"SEL$1")
       END_OUTLINE_DATA

   */

Predicate Information (identified by operation id):


    5 - access(:Z>=:Z AND :Z<=:Z)

[...]

Note


  • Degree of Parallelism is 4 because of hint

Perhaps there is some other way to determine which tables are accessed in parallel (using _px_trace etc.).

Dimitre

On 01/11/2011 21:32, Bobak, Mark wrote:

> Hi Dimitre,
>
> Now I'm confused.  Why do you think that PARALLEL will work with XMLTYPE?
>
> According to:
> http://download.oracle.com/docs/cd/E11882_01/appdev.112/e23094/appjspec.htm#ADXDB3700
>
> (which is the link you sent me):
> " No Parallel DML for XMLType - DML operations on XMLType data are always performed in serial. Parallel DML is not supported for XMLType. (Parallel query and DDL are supported for XMLType.)"
>
> That sounds pretty clear to me....
>
> -Mark
>
> -----Original Message-----
> From: Radoulov, Dimitre [mailto:cichomitiko_at_gmail.com]
> Sent: Tuesday, November 01, 2011 4:06 PM
> To: Bobak, Mark
> Cc: oracle-l_at_freelists.org
> Subject: Re: Can't get INSERT /*+ APPEND */ to indicate direct load in execution plan.....
>
> Hi Mark,
> after reading your post again, I realized I was wrong, sorry.
>
> P->S near the top of the plan output is normal (it's when the final
> result is send to the QC),
> so to recap: in that case (if I'm not missing something again) it seems  that, just as you correctly have already noticed, only the append hint was ignored.
>
> So I suppose I'll need to reread the whole document I've previously linked, I mean: it seems that a table with an XMLTYPE column actually *could be* read in parallel ...
>
>
> Best regards
> Dimitre
>
> On 01/11/2011 14:30, Bobak, Mark wrote:
>> Thanks Dimitre!
>>
>> Yes, I do have serial direct load working now, and it appears that the limitation on parallel direct load is due to the XMLTYPE column.  I suspected that was the problem, but wasn't seeing a documented restriction in that regard.  So, thanks for that!
>>
>> Guess I'll have to suffer with serial direct load.  Come to think of it, I guess I could run multiple, concurrent, serial direct loads.  I'll be looking into that next.
>>
>> -Mark
>>
>> -----Original Message-----
>> From: oracle-l-bounce_at_freelists.org [mailto:oracle-l-bounce_at_freelists.org] On Behalf Of Radoulov, Dimitre
>> Sent: Monday, October 31, 2011 7:51 PM
>> To: oracle-l_at_freelists.org
>> Subject: Re: Can't get INSERT /*+ APPEND */ to indicate direct load in execution plan.....
>>
>> Just to add that I'm trying to clarify the missing parallel execution in the insert part ( P->S ).
>> Mark could of course try with append without parallel (or with
>> noparallel) to see if direct operations take place.
>>
>>
>>
>> Dimitre
>>
>> On 01/11/2011 00:33, Radoulov, Dimitre wrote:
>>> On 31/10/2011 20:09, Bobak, Mark wrote:
>>>> Hi all,
>>>> I'm trying to get direct load insert working.  I'm running 11.2.0.2.0 RAC on Linux x86-64.
>>>>
>>>> The table is range partitioned, and has one XMLTYPE column with SECUREFILES BINARY XML storage.
>>>>
>>> [...]
>>>
>>> I found these:
>>>
>>> bit.ly/tJlCBT
>>>
>>> No Parallel DML for XMLType -- DML operations on |XMLType| data are
>>> always performed in serial. Parallel DML is not supported for
>>> |XMLType|. (Parallel query and DDL are supported for |XMLType|.)
>>>
>>>
>>> I didn't read the whole document,
>>> but it seems that one could use parallel DML with the XMLIndexes:
>>>
>>> bit.ly/sIUkH0
>>>
>>> You can use a |PARALLEL| clause (with optional degree) when creating
>>> or altering an |XMLIndex| index to ensure that index creation and
>>> maintenance are carried out in parallel. If the base table is
>>> partitioned or enabled for parallelism, then this can improve the
>>> performance for both DML operations (|INSERT|, |UPDATE|, |DELETE|) and
>>> index DDL operations (|CREATE|, |ALTER|, |REBUILD|).
>>>
>>>
>>> And this one close as "Not a bug":
>>>
>>> Bug 6453331: INSERT INTO TABLE WITH COLUMN OF XMLTYPE IS NOT USING
>>> PARALLEL
>>>
>>> Status 92 - Closed, Not a Bug
>>>
>>
>> --
>> http://www.freelists.org/webpage/oracle-l
>>
>>
>>
>>
>
>

--
http://www.freelists.org/webpage/oracle-l
Received on Tue Nov 01 2011 - 16:45:57 CDT

Original text of this message