如何并行连接两个散列分区表?
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 | | | |
==========================================================================================================================================================
我有两个散列分区 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 | | | |
==========================================================================================================================================================