DBAtlas · Atlas de operações de banco de dados

Verificar chaves de partição e o uso de partition-wise join

OracleParticionamento

Comando

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

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

Abrir no DBAtlas →

Relacionados