如何并行连接两个散列分区表?

How to join two hash partitioned tables in parallel?

我有两个散列分区 tables,比方说

CREATE TABLE t1 PARTITION BY HASH(object_id) PARTITIONS 8 PARALLEL 8 
AS SELECT * FROM all_objects;

CREATE TABLE t2 PARTITION BY HASH(object_id) PARTITIONS 8 PARALLEL 8 
AS SELECT * FROM all_objects;

我如何并行加入它们,比如 table t1 的 8 个分区中的第 1 个分区加入 table t2 中的 8 个分区中的第 1 个分区,等等?如果我 运行

我仍然有一个连续计划
ALTER SESSION ENABLE PARALLEL QUERY;
ALTER SESSION ENABLE PARALLEL DML;

SELECT /*+ PARALLEL(8) */ * 
  FROM t1 JOIN t2 USING (object_id);

一定有办法的,求助!

编辑:参数设置为

parallel_max_servers     0
parallel_degree_policy   MANUAL
parallel_servers_target  0

您的查询与分区连接并行运行良好:

Plan hash value: 372429046

---------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation               | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT        |          | 67290 |    17M|    91   (0)| 00:00:01 |       |       |        |      |            |
|   1 |  PX COORDINATOR         |          |       |       |            |          |       |       |        |      |            |
|   2 |   PX SEND QC (RANDOM)   | :TQ10000 | 67290 |    17M|    91   (0)| 00:00:01 |       |       |  Q1,00 | P->S | QC (RAND)  |
|   3 |    PX PARTITION HASH ALL|          | 67290 |    17M|    91   (0)| 00:00:01 |     1 |     8 |  Q1,00 | PCWC |            |
|*  4 |     HASH JOIN           |          | 67290 |    17M|    91   (0)| 00:00:01 |       |       |  Q1,00 | PCWP |            |
|   5 |      TABLE ACCESS FULL  | T1       | 67290 |  8805K|    46   (3)| 00:00:01 |     1 |     8 |  Q1,00 | PCWP |            |
|   6 |      TABLE ACCESS FULL  | T2       | 67299 |  8806K|    46   (3)| 00:00:01 |     1 |     8 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")

Note
-----
   - Degree of Parallelism is 8 because of hint

您应该检查您的数据库和会话参数:请运行这些查询并提供它们的结果:

select name,value 
from v$parameter 
where name in (
 'parallel_degree_policy'
,'parallel_servers_target'
,'parallel_max_servers'
);

select * 
from v$ses_optimizer_env e
where e.sid=userenv('sid')
and (
    name like '%parallel%'
 or name like '%cpu%'
 or name like '%optim%'
)
order by name

并用参数 advanced 显示你的 explain plan

更多详情:

PS。以防万一来自 Oracle 11.2.0.4 的 RTSM 报告:

SQL Monitoring Report

SQL Text
------------------------------
SELECT/*+ PARALLEL(8) */ * FROM T1 JOIN T2 USING (OBJECT_ID)

Global Information
------------------------------
 Status              :  DONE (ALL ROWS)
 Instance ID         :  1
 Session             :  XTENDER (189:885)
 SQL ID              :  6y6uascdsfxq2
 SQL Execution ID    :  16777216
 Execution Started   :  05/09/2021 07:51:11
 First Refresh Time  :  05/09/2021 07:51:11
 Last Refresh Time   :  05/09/2021 07:51:11
 Duration            :  .16602s
 Module/Action       :  SQL*Plus/-
 Service             :  orcl
 Program             :  sqlplus@XTLaptop (TNS V1-V3)
 Fetch Calls         :  842

Global Stats
===========================================================================
| Elapsed |   Cpu   |    IO    |  Other   | Fetch | Buffer | Read | Read  |
| Time(s) | Time(s) | Waits(s) | Waits(s) | Calls |  Gets  | Reqs | Bytes |
===========================================================================
|    0.36 |    0.34 |     0.01 |     0.00 |   842 |   2503 |   32 |  19MB |
===========================================================================

Parallel Execution Details (DOP=8 , Servers Allocated=8)
====================================================================================================================
|      Name      | Type  | Server# | Elapsed |   Cpu   |    IO    |  Other   | Buffer | Read | Read  | Wait Events |
|                |       |         | Time(s) | Time(s) | Waits(s) | Waits(s) |  Gets  | Reqs | Bytes | (sample #)  |
====================================================================================================================
| PX Coordinator | QC    |         |    0.17 |    0.17 |          |          |     48 |      |     . |             |
| p000           | Set 1 |       1 |    0.03 |    0.02 |     0.00 |          |    310 |    4 |   2MB |             |
| p001           | Set 1 |       2 |    0.02 |    0.02 |     0.00 |          |    310 |    4 |   2MB |             |
| p002           | Set 1 |       3 |    0.02 |    0.02 |     0.00 |          |    310 |    4 |   2MB |             |
| p003           | Set 1 |       4 |    0.02 |    0.02 |     0.00 |          |    308 |    4 |   2MB |             |
| p004           | Set 1 |       5 |    0.02 |    0.02 |     0.00 |          |    306 |    4 |   2MB |             |
| p005           | Set 1 |       6 |    0.03 |    0.02 |     0.00 |     0.00 |    304 |    4 |   2MB |             |
| p006           | Set 1 |       7 |    0.02 |    0.02 |     0.00 |          |    302 |    4 |   2MB |             |
| p007           | Set 1 |       8 |    0.02 |    0.02 |     0.00 |          |    305 |    4 |   2MB |             |
====================================================================================================================

SQL Plan Monitoring Details (Plan Hash Value=3367938992)
==========================================================================================================================================================
| Id |         Operation         |   Name   |  Rows   | Cost |   Time    | Start  | Execs |   Rows   | Read | Read  |  Mem  | Activity | Activity Detail |
|    |                           |          | (Estim) |      | Active(s) | Active |       | (Actual) | Reqs | Bytes | (Max) |   (%)    |   (# samples)   |
==========================================================================================================================================================
|  0 | SELECT STATEMENT          |          |         |      |         1 |     +0 |     9 |    84191 |      |       |       |          |                 |
|  1 |   PX COORDINATOR          |          |         |      |         1 |     +0 |     9 |    84191 |      |       |       |          |                 |
|  2 |    PX SEND QC (RANDOM)    | :TQ10000 |   73061 |  104 |         1 |     +0 |     8 |    84191 |      |       |       |          |                 |
|  3 |     PX PARTITION HASH ALL |          |   73061 |  104 |         1 |     +0 |     8 |    84191 |      |       |       |          |                 |
|  4 |      HASH JOIN            |          |   73061 |  104 |         1 |     +0 |     8 |    84191 |      |       |   22M |          |                 |
|  5 |       TABLE ACCESS FULL   | T2       |   73061 |   52 |         1 |     +0 |     8 |    84200 |   16 |  10MB |       |          |                 |
|  6 |       TABLE ACCESS FULL   | T1       |   84425 |   52 |         1 |     +0 |     8 |    84191 |   16 |  10MB |       |          |                 |
==========================================================================================================================================================