创建索引时,PARALLEL
提示的行为似乎不像19c和12c预期的那样运行。
在所有19c的情况下,提示是Unused
,但在其中两种情况下,说明实际上使用了automatic DOP
,而在这些情况下,它实际上是并行处理的。
Hint DOP NOTE
------------------------- --- ---------------------------------------------------------------------------
/*+ PARALLEL (16) */ 1
/*+ PARALLEL (4) */ 1
/*+ PARALLEL */ 16 automatic DOP: Computed Degree of Parallelism is 16 because of degree limit
/*+ PARALLEL (AUTO) */ 16 automatic DOP: Computed Degree of Parallelism is 16 because of degree limit
/*+ PARALLEL (DEFAULT) */ 1
/*+ PARALLEL (MANUAL) */ 1
来自Oracle 19c VLDB和分区指南-控制自动并行度:
“手动此设置禁用Auto,...With用于PARALLEL_DEGREE_POLICY的默认手动设置,系统仅在在对象上显式设置DOP或在SQL语句中指定并行提示时才使用并行执行。所使用的DOP正是所指定的。”
在创建此索引的表上没有显式设置DOP。
使用具有下列初始化参数的Oracle 19c。
set serveroutput on;
show parameters parallel;
---------------------------------------------------
awr_pdb_max_parallel_slaves integer 10
containers_parallel_degree integer 65535
fast_start_parallel_rollback string LOW
max_datapump_parallel_per_job string 50
optimizer_ignore_parallel_hints boolean FALSE
parallel_adaptive_multi_user boolean FALSE
parallel_degree_limit string CPU
parallel_degree_policy string MANUAL
parallel_execution_message_size integer 16384
parallel_force_local boolean FALSE
parallel_instance_group string
parallel_max_servers integer 320
parallel_min_degree string 1
parallel_min_percent integer 0
parallel_min_servers integer 32
parallel_min_time_threshold string AUTO
parallel_servers_target integer 128
parallel_threads_per_cpu integer 2
recovery_parallelism integer 0
...
show parameters cpu_count;
show parameters parallel_threads_per_cpu;
---------------------------------------------------
cpu_count integer 8
parallel_threads_per_cpu integer 2
索引的形式如下:
CREATE /*+ [PARALLEL HINT] */ INDEX OWN.IX ON
OWN.T (some_char, some_number, some_date1, some_date2)
LOCAL NOLOGGING TABLESPACE INDX COMPRESS
我的会话是唯一的活动会话,结果是可重复的,这表明系统负载不是一个因素。如果需要的话,我已经解释了计划,但是这个帖子已经足够长了。
我尝试在Oracle 12c中执行类似的任务(但索引不是本地的,底层表也没有分区),结果和初始化参数如下。
Hint DOP Note
------------------------- ----- --------------------------------------------------------------------------------
/*+ PARALLEL (16) */ 16/32 Degree of Parallelism is 16 because of hint
/*+ PARALLEL (4) */ 4/8 Degree of Parallelism is 4 because of hint
/*+ PARALLEL */ 2/4 automatic DOP: Computed Degree of Parallelism is 2
/*+ PARALLEL (AUTO) */ 1 automatic DOP: Computed Degree of Parallelism is 1 because of parallel threshold
/*+ PARALLEL (DEFAULT) */ 1
/*+ PARALLEL (MANUAL) */ 1
使用具有下列初始化参数的Oracle 12c。
show parameters parallel;
------------------------------------------------------
fast_start_parallel_rollback string LOW
parallel_adaptive_multi_user boolean TRUE
parallel_automatic_tuning boolean FALSE
parallel_degree_level integer 100
parallel_degree_limit string CPU
parallel_degree_policy string MANUAL
parallel_execution_message_size integer 16384
parallel_force_local boolean FALSE
parallel_instance_group string
parallel_io_cap_enabled boolean FALSE
parallel_max_servers integer 320
parallel_min_percent integer 0
parallel_min_servers integer 32
parallel_min_time_threshold string AUTO
parallel_server boolean FALSE
parallel_server_instances integer 1
parallel_servers_target integer 128
parallel_threads_per_cpu integer 2
recovery_parallelism integer 0
...
show parameters cpu_count;
show parameters parallel_threads_per_cpu;
------------------------------------------------------
cpu_count integer 8
parallel_threads_per_cpu integer 2
In 19c:
/*+ PARALLEL (16) */
、/*+ PARALLEL (4) */
和/*+ PARALLEL (DEFAULT) */
案例并行提示的DOP 1?预期16、4和16 (=8*2),respectively.Unused
?In 12c
/*+ PARALLEL (DEFAULT) */
并行提示?预期16 (=8*2).19c诉12c
发布于 2021-03-15 12:53:14
在Oracle12c中,引入了并行dml、ENABLE_PARALLEL_DML、
它可以直接在dml sql语句中使用。
/*+并行(16) enable_parallel_dml */
https://stackoverflow.com/questions/65366242
复制相似问题