DBAtlas · Atlas für Datenbankbetrieb

Partitionsschlüssel und Nutzung von Partition-Wise Joins prüfen

OraclePartitionierung

Befehl

-- 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 sides

Was 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.

In DBAtlas öffnen →

Verwandte Einträge