Partitionsschlüssel und Nutzung von Partition-Wise Joins prüfen
OraclePartitionierungBefehl
-- 1) Do both tables have the same partitioning type, key and count?
SELECT p.owner, p.table_name, p.partitioning_type, k.column_name,
p.partition_count, p.subpartitioning_type
FROM dba_part_tables p
JOIN dba_part_key_columns k
ON k.owner = p.owner AND k.name = p.table_name AND k.object_type = 'TABLE'
WHERE p.owner = 'CUSTOMER_APP'
AND p.table_name IN ('CUSTOMER_H', 'ORDERS_H');
-- 2) Explain the join and inspect the plan shape:
EXPLAIN PLAN FOR
SELECT /*+ PARALLEL(4) */ m.city, SUM(s.amount)
FROM customer_app.customer_h m
JOIN customer_app.orders_h s ON s.customer_id = m.id
GROUP BY m.city;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(format => 'BASIC +PARALLEL +PARTITION'));
-- Full PWJ: HASH JOIN sits BELOW the PARTITION HASH ALL line (PX PARTITION HASH ALL in parallel)
-- Partial PWJ: PX SEND PARTITION (KEY) on one side only
-- No PWJ: PX SEND HASH / BROADCAST on both sidesWas es tut
Zwei Tabellen, die auf dem Join-Schlüssel gleich partitioniert sind, lassen sich Partitionspaar für Partitionspaar verknüpfen (Full Partition-Wise Join), was Umverteilungsverkehr und Speicher bei parallelen Abfragen deutlich reduziert. Die Planform zeigt, ob PWJ genutzt wird.
Wann einsetzen
Beim Entwurf großer Fact-zu-Fact- oder Fact-zu-Dimension-Joins im DWH, wenn parallele Abfragen starke PX-Umverteilung zeigen (PX Deq Credit: send blkd), und bei der Validierung der Partitionierungsstrategie.
Vorsicht
Lizenz: Partitioning-Option (kostenpflichtig, EE); Parallel Query erfordert die Enterprise Edition. EXPLAIN PLAN ist eine Schätzung; nutze DISPLAY_CURSOR/SQL Monitor für den tatsächlichen Plan. Full PWJ braucht gleiche Partitionsanzahlen (bei Hash wird eine Zweierpotenz empfohlen) und übereinstimmende Datentypen der Schlüssel. PWJ kann auch in seriellen Plänen auftreten, der echte Gewinn liegt aber in der parallelen Ausführung.