2012-05-02 10 views
6

Ich habe eine SQL wie folgt aus:über Oracle parallel Einfügeleistung

Insert into A 
Select * from B; 

Jetzt möchte ich es parallel laufen zu lassen. Meine Frage ist, die Einfügung zu parallelisieren oder zu wählen oder beides? Sehen Sie sich die folgenden sqls an, können Sie mir sagen, welche Version korrekt ist oder welche die beste Leistung hat. Ich habe keine dba-Erlaubnis, also kann ich den Ausführungsplan nicht überprüfen.

1) Insert /*+ parallel(A 6) */ into A select * from B;

2) Insert into A select/*+ parallel(B 6) */ * from B;

3) Insert /*+ parallel(A 6) */ into A select /*+ parallel(B 6) */ * from B;

Vielen Dank!

+0

Parallel wird Ihnen wahrscheinlich in dieser Situation sowieso nicht helfen. IO wird der Engpass sein, da es wenig Verarbeitung benötigt (wenn Sie nicht über vereinfacht haben). Sehen Sie sich 'INSERT/* + APPEND */....' an, wenn es sich um eine Option handelt. – Phil

+0

@Phil Parallele Ausführung kann IO erheblich verbessern. –

Antwort

12

Die Parallelisierung sowohl der INSERT als auch der SELECT ist die schnellste.

(Wenn Sie eine ausreichend große Datenmenge haben, haben Sie einen anständigen Server, alles sanely konfiguriert, etc.)

Sie werden es sich auf jeden Fall testen wollen, vor allem den optimalen Grad zu finden, Parallelität. Es gibt viele Mythen, die Oracle parallele Ausführung umgeben, und sogar das Handbuch ist manchmal horribly wrong.

Auf 11gR2, ich würde Ihnen empfehlen, Ihre Aussage wie folgt ausführen:

alter session enable parallel dml; 
insert /*+ append parallel(6) */ into A select * from B; 
  1. Sie wollen immer zuerst parallel DML ermöglichen.
  2. parallel(6) verwendet statement-level parallelism anstelle von Objekt-Ebene-Parallelität. Dies ist eine 11gR2-Funktion, mit der Sie problemlos alles parallel ausführen können, ohne sich um Objektalias oder Zugriffsmethoden kümmern zu müssen. Für 10G müssen Sie mehrere Hinweise verwenden.
  3. Normalerweise ist der append Hinweis nicht notwendig. Wenn Ihre DML parallel ausgeführt wird, werden automatisch Direct-Path-Einfügungen verwendet. Wenn Ihre Aussage jedoch auf seriell heruntergestuft wird, zum Beispiel wenn keine parallelen Server verfügbar sind, kann der Hinweis append einen großen Unterschied machen.
+2

Es lohnt sich zu beachten, dass paralleles Einfügen oder seriales Einfügen eines direkten Pfades (append) eine exklusive Sperre für die Tabelle (oder die benannten Partitionen, in die die Einfügung stattfindet) übernimmt. –

1

Sie benötigen keine DBA-Berechtigungen, um einen EXPLAIN-Plan auszuführen. Ich glaube, dass SELECT_CATALOG das richtige Privileg ist.