暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

并行查询管理

原创 jack 2023-12-11
172

一、注意事项:

.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   --强制开启并行


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论