Проверить ключи секционирования и использование partition-wise join
OracleСекционированиеКоманда
-- 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Что делает
Две таблицы, одинаково секционированные по ключу соединения, можно соединять попарно по секциям (full partition-wise join), что резко снижает трафик перераспределения и потребление памяти в параллельных запросах. Форма плана показывает, используется ли PWJ.
Когда использовать
При проектировании крупных соединений fact-fact или fact-dimension в DWH, когда параллельные запросы показывают интенсивное перераспределение PX (PX Deq Credit: send blkd), и при проверке стратегии секционирования.
Внимание
Лицензия: опция Partitioning (платная, EE); параллельные запросы требуют Enterprise Edition. EXPLAIN PLAN — это оценка; для фактического плана используйте DISPLAY_CURSOR/SQL Monitor. Full PWJ требует одинакового числа секций (для hash рекомендуется степень двойки) и совпадающих типов данных ключа. PWJ может встречаться и в последовательных планах, но реальный выигрыш — при параллельном выполнении.