一、注意事项:
.cpu饱和注意;
2.增加 work_mem;
二、工作原理机制
1.数据库会根据表的大小或者索引大小分配worker,增加或者减少工作线程的数量,每次表或者索引比最小尺寸min_parallel_table_scan_size大3倍增加一个worker;
min_parallel_table_scan_size =‘8MB’ 24MB(2个workers) 72MB (3个workers)
min_parallel_index_scan_size ='8MB' 24MB(2个workers) 72MB (3个workers)
公式:>=logmin_parallel_table_scan_size /log(3) + 1worker worker 数据不是基于成本的!
2.对单个表进行设置:
alter table test1 set (parallel_workers =4);
3.不是所有执行都会用到并行:
parallel_setup_cost: sql执行时间小于1s不走并行;
parallel_tuple_cost: leader和workers之间沟通时间
oracle 超过3s的语句走并行查询,kes 2个参数限制
4.分区join需要开启
enable_partitionwise_join =t
5. 强制开启并行
force_parallel_mode =on
三、并行参数:
max_worker_processes 允许数据库启动多少个 work 进程,等于系统的CPU核数(静态参数)
max_parallel_workers_per_gather 每次sql操作works最大数,cpu核数 >=8, max_parallel_workers_per_gather =4 cpu核数 >=2, max_parallel_workers_per_gather = cpu核数/2
max_parallel_workers 查询优化器可以从works池中可以获取的works最大数
force_parallel_mode 强制开启并行 其他不开并行数量
parallel_leader_participation leader 主动获取并行woerker返回结果

--设置并行执行
max_worker_processes = 64
max_parallel_workers_per_gather =8;
set parallel_tuple_cost =0; set parallel_setup_cost =0;
ALTER TABLE tb2 set (parallel_workers =8);
force_parallel_mode =on --强制开启并行
并行:nestloop join 查询
/**/
并行参数:
--设置并行执行
max_worker_processes = 64
max_parallel_workers_per_gather =8;
set parallel_tuple_cost =0;
set parallel_setup_cost =0;
ALTER TABLE tb2 set (parallel_workers =8);
force_parallel_mode =on --强制开启并行




