Verificar chaves de partição e o uso de partition-wise join
OracleParticionamentoComando
-- 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 sidesO que faz
Duas tabelas equiparticionadas pela chave de join podem ser unidas par de partição a par de partição (full partition-wise join), o que reduz bastante o tráfego de redistribuição e a memória em consultas paralelas. O formato do plano mostra se o PWJ é usado.
Quando usar
Ao projetar grandes joins fato-fato ou fato-dimensão em um DWH, quando consultas paralelas mostram redistribuição PX pesada (PX Deq Credit: send blkd) e ao validar a estratégia de particionamento.
Atenção
Licença: opção Partitioning (EE com custo extra); consulta paralela exige Enterprise Edition. EXPLAIN PLAN é uma estimativa; use DISPLAY_CURSOR/SQL Monitor para o plano real. O full PWJ precisa do mesmo número de partições (uma potência de dois é recomendada para hash) e de tipos de dados de chave correspondentes. O PWJ pode aparecer também em planos seriais, mas o ganho real está na execução paralela.