DBAtlas · Atlas d'exploitation des bases de données

Vérifier les clés de partitionnement et l'utilisation des partition-wise joins

OraclePartitionnement

Commande

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

Ce que fait la commande

Deux tables équi-partitionnées sur la clé de jointure peuvent être jointes paire de partitions par paire de partitions (full partition-wise join), ce qui réduit fortement le trafic de redistribution et la mémoire dans les requêtes parallèles. La forme du plan indique si le PWJ est utilisé.

Quand l'utiliser

Lors de la conception de grandes jointures fact-to-fact ou fact-to-dimension dans un DWH, lorsque les requêtes parallèles montrent une forte redistribution PX (PX Deq Credit: send blkd), et lors de la validation de la stratégie de partitionnement.

Attention

Licence : option Partitioning (EE payante) ; les requêtes parallèles exigent Enterprise Edition. EXPLAIN PLAN est une estimation ; utilisez DISPLAY_CURSOR/SQL Monitor pour le plan réel. Un PWJ complet nécessite le même nombre de partitions (une puissance de deux est recommandée pour le hash) et des types de données de clé identiques. Le PWJ peut aussi apparaître dans des plans séquentiels, mais le vrai gain est en exécution parallèle.

Ouvrir dans DBAtlas →

Voir aussi