Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Why does Oracle buffer the result from the select for a parallel INSERT INTO SELECT FROM?

Re: Why does Oracle buffer the result from the select for a parallel INSERT INTO SELECT FROM?

From: R. Schierbeek <byteNospam_at_gmail.com>
Date: Wed, 22 Nov 2006 14:45:17 +0100
Message-ID: <45645434$0$51790$dbd4b001@news.wanadoo.nl>


Jaap W. van Dijk <j.w.vandijk.removethis_at_hetnet.nl> schreef in bericht
> Hi,
> I'm on Oracle 9.2.0.5, Open VMS.
>
> I perform an
> INSERT INTO target
> SELECT * FROM source
>
> If I do this noparallel, the result from the select is immediately inserted into the target.
>
> If I do this in parallel, the result of the selects from a slave set
> are first buffered in TEMP. After this is done, a slave set starts to
> insert the contents from the buffers into the target.
>
> Why this timeconsuming buffering? Can anything be done?
>
> While I am writing this, I wonder: I let Oracle decide which degree of
> parallellization to use. Maybe buffering only takes places if the
> degree differs between SELECT and INSERT? (I should test myself, but
> don't have the opportunity right now).
> Regards, Jaap.

Well Jaap,
If you insert less then 100.000 rows a parallel insert might not be faster then a normal insert /*+APPEND */. Check out the APPEND hint.

If you still want to do the parallel insert without TEMP usage then drop the indexes on the target table. Oracle first inserts the table data; then does some sorting on the new index data and rebuilds them. No index > no sorts needed.

Cheers,

     Roelof Schierbeek; DBA Received on Wed Nov 22 2006 - 07:45:17 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US