I am doing some simple tests. I made 2 copies of dba_objects that are hash partitioned with 8 partitions. called hash_test_a and hash_test_c I added a small attachment with the two plans. I want to make sure it formats properly. I ran this query: explain plan for select /*+ parallel (a,8) parallel (b,8) */ count(*) from hash_test_a a, hash_test_b b where a.object_id = b.object_id My expectation before running this query was: 1. Each slave will scan a partition 2. Then eight slaves will each do a partition wise hash join. 3. The results will queued. The query coordinator will dequeue the results. Is this a correct interpretation? I am not sure if the plan says that. This is the second plan: explain plan for select /*+ parallel (a,8) parallel (b,8) */ count(*) from hash_test_a partition(HASH_TEST_A01) a, hash_test_c partition(HASH_TEST_A01) b where a.object_id = b.object_id This is the same query accept it is restricted to just the first partition. The plan changes considerably. This is what I find interesting: PX RECEIVE PX SEND HASH PX BLOCK ITERATOR This happens before each table scan. This tells me(if I am reading it correctly) that 1 parallel slave is reading a partition and then queing it up for the query coordinator. However, how come I don't see that when I do not restrict the partition and read the whole table? I read the partition docs and it does not give examples of partition wise join explain plans.
explain plan for select count(*) from hash_test_a a, hash_test_b b where a.object_id = b.object_id -------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib | -------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 7 | 5 (20)| 00:00:01 | | | | | | | 1 | SORT AGGREGATE | | 1 | 7 | | | | | | | | | 2 | PX COORDINATOR | | | | | | | | | | | | 3 | PX SEND QC (RANDOM) | :TQ10002 | 1 | 7 | | | | | Q1,02 | P->S | QC (RAND) | | 4 | SORT AGGREGATE | | 1 | 7 | | | | | Q1,02 | PCWP | | |* 5 | HASH JOIN | | 121 | 847 | 5 (20)| 00:00:01 | | | Q1,02 | PCWP | | | 6 | PX RECEIVE | | 121 | 363 | 2 (0)| 00:00:01 | | | Q1,02 | PCWP | | | 7 | PX SEND HASH | :TQ10000 | 121 | 363 | 2 (0)| 00:00:01 | | | Q1,00 | P->P | HASH | | 8 | PX BLOCK ITERATOR | | 121 | 363 | 2 (0)| 00:00:01 | 1 | 1 | Q1,00 | PCWC | | | 9 | TABLE ACCESS FULL| HASH_TEST_A | 121 | 363 | 2 (0)| 00:00:01 | 1 | 1 | Q1,00 | PCWP | | | 10 | PX RECEIVE | | 131 | 524 | 2 (0)| 00:00:01 | | | Q1,02 | PCWP | | | 11 | PX SEND HASH | :TQ10001 | 131 | 524 | 2 (0)| 00:00:01 | | | Q1,01 | P->P | HASH | | 12 | PX BLOCK ITERATOR | | 131 | 524 | 2 (0)| 00:00:01 | 1 | 1 | Q1,01 | PCWC | | | 13 | TABLE ACCESS FULL| HASH_TEST_C | 131 | 524 | 2 (0)| 00:00:01 | 1 | 1 | Q1,01 | PCWP | | -------------------------------------------------------------------------------------------------------------------------------------- explain plan for select /*+ parallel (a,8) parallel (b,8) */ count(*) from hash_test_a partition(HASH_TEST_A01) a, hash_test_c partition(HASH_TEST_A01) b where a.object_id = b.object_id -------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib | -------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 7 | 15 (7)| 00:00:01 | | | | | | | 1 | SORT AGGREGATE | | 1 | 7 | | | | | | | | | 2 | PX COORDINATOR | | | | | | | | | | | | 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | 7 | | | | | Q1,00 | P->S | QC (RAND) | | 4 | SORT AGGREGATE | | 1 | 7 | | | | | Q1,00 | PCWP | | | 5 | PX PARTITION HASH ALL| | 999 | 6993 | 15 (7)| 00:00:01 | 1 | 8 | Q1,00 | PCWC | | |* 6 | HASH JOIN | | 999 | 6993 | 15 (7)| 00:00:01 | | | Q1,00 | PCWP | | | 7 | TABLE ACCESS FULL | HASH_TEST_A | 999 | 2997 | 7 (0)| 00:00:01 | 1 | 8 | Q1,00 | PCWP | | | 8 | TABLE ACCESS FULL | HASH_TEST_C | 999 | 3996 | 7 (0)| 00:00:01 | 1 | 8 | Q1,00 | PCWP | | --------------------------------------------------------------------------------------------------------------------------------------