Parallele Option, die im Cluster schlechter abschneidet

7

Ich probiere die parallele Option Orakel in einem Cluster aus und überraschenderweise erhalte ich mit der parallelen Option schlechtere Ergebnisse. Ich hatte eine Verbesserung mit der parallelen Option erwartet, aber sicherlich keine schlechteren Ergebnisse. Ich frage mich, warum dies der Fall ist und ob etwas mit der Art und Weise, wie ich die parallele Option in meinem Cluster verwende, nicht stimmt.

Ich bin mit einem Grad von 4 , wenn die Anzahl der CPUs Ich habe 8 ist habe ich versucht, direkt parallel zum Cluster hinzugefügt ALTER CLUSTER cluster PARALLEL 4sowohl der Index als auch in der Aussage /*+ PARALLEL_INDEX(clust_index, 4) */und Tabellen /*+ PARALLEL(4) */,

Hier ist meine Spur von der Parallele:

Geben Sie hier die Bildbeschreibung ein

Ohne Parallele:

Geben Sie hier die Bildbeschreibung ein

Joe
quelle
Mein erster Gedanke dazu, dass der Aufwand für die Verwendung von Parallelität größer ist als für die Durchführung eines normalen Hash-Joins ohne Parallelität. Für die Parallelität ist zusätzliche CPU erforderlich, und der Overhead kann größer sein als der Vorteil, wenn Sie mit kleinen Objekten arbeiten. Ich würde versuchen, keine Hinweise zu geben oder sogar die Parallelität für den Cluster zu aktivieren. Versuchen Sie, die automatische Parallelität auf der Datenbankebene auf automatisch einzustellen und die Parallelität für die Objekte zu aktivieren.
Daten Flux
Ja, Overhead würde Sinn machen. Würde dies erklären, warum die CPU-Zeit höher ist als die verstrichene Zeit? Dies ist aber auch ohne die parallele Option der Fall.
Joe
Wenn Sie sich die DB-Zeit ansehen, trägt normalerweise die CPU-Zeit zur verstrichenen Gesamtzeit bei. Ihre insgesamt verstrichene Zeit ist ohne die Parallelität gemäß Ihren Zahlen größer. Ich stoße die ganze Zeit mit Parallelität auf dieses Problem. Das Parsen und Ausführen nimmt überhaupt keine Zeit in Anspruch, aber die Verarbeitung zum Ausführen beider Abfragen ist für PX länger. Sie haben eine sehr einfache Verknüpfung. Wenn Sie nicht mit partitionierten Objekten arbeiten, die in einer Clusterumgebung sehr, sehr groß sind, kann Parallelität eine Gefahr darstellen. Ich sage das nicht in jedem Fall, sondern aus meiner Erfahrung.
Daten Flux
Wenn Sie in einem Cluster ausgeführt werden, fügen Sie auch eine Haftung hinzu, wenn Ihre Verbindung nicht groß genug ist. Standardmäßig verteilt sich die Parallelität auf die Knoten. Vielleicht möchten Sie den unteren Rand dieses Dokuments lesen: docs.oracle.com/cd/E11882_01/server.112/e25523/parallel002.htm
Nicolas de Fontenay

Antworten:

1

Wenn Sie parallel laufen möchten, müssen Sie dafür entwerfen. Zu berücksichtigen ist die Verwendung von Partitionen, damit diese parallel gescannt werden können. Vergessen Sie nicht, dass Parallelität im Allgemeinen versucht, vollständige Scans für Segmente zu verwenden. Das Beschneiden von Partitionen kann dazu beitragen, die Größe Ihrer Scans zu verringern.

Wenn Sie pq wirklich für diese Art von kleinen Abfragen verwenden, stellen Sie sicher, dass Sie genügend PQ-Slaves zur Verfügung haben. Andernfalls wird das Starten neuer Slaves als Overhead zu Ihrer Abfrage hinzugefügt. Nicht so schlecht für Abfragen vom Typ dss, die stundenlang ausgeführt werden, aber tödlich für Abfragen mit kurzer Laufzeit.

Denken Sie auch daran, Ihre PQ-Abfragen in die Warteschlange zu stellen, um sicherzustellen, dass beim Start einer Abfrage alle erforderlichen Slaves vorhanden sind. Dies kann in Oracle Resource Manager erfolgen.

ik_zelf
quelle
0

Ausgehend von der in Ihren Screenshots gezeigten SQL-Anweisung verbinden Sie zwei Tabellen (Kunde und Verkauf) mit customer_id, während Sie die customer_id auf weniger als 2000 beschränken. Angenommen, es handelt sich um Vanille-Primärschlüssel, die größer als Null sind, und dies ist nichts Besonderes ergibt bei maximal 2000 Zeilen.

Wie Sie sehen, führt die parallele Anweisung außerdem vollständige Scans durch, während die Single-Thread-Abfrage einen Indexbereichsscan durchführen kann.

In diesem Fall treten mit Sicherheit alle Overheads der Parallelität auf und die Anweisung wird in jedem Cluster-Setup langsamer ausgeführt. Versuchen Sie es erneut mit angemessenen Zahlen in Ihren Tabellen und angemessenen analytischen Anwendungsfällen (Tabellen mit einer Größenordnung von 10 Millionen bitte und identifizieren Sie beispielsweise die Top-10-Kunden anhand der Anzahl der Verkaufszeilen).

Grimaldi
quelle