PG-并行查询

摘要:
并行查询并行查询引入新节点Gather:并行执行子计划的结果向上层节点输出,不保证有序GatherMerge:并行执行子计划的结果向上层节点有序输出并行相关参数参数描述max_work_processer设置系统支持的最大后台进程,默认值为8,此参数调整后需要重启数据库才生效。设置成0则禁用并行查询。每个worker执行Gather节点以下计划的一个副本,leader节点主要负责处理Gather及其以上节点的操作,根据worker数不同,leader也可能会执行Gather以下计划的副本。
并行查询
并行查询引入新节点
  • Gather:并行执行子计划的结果向上层节点输出,不保证有序

  • GatherMerge:并行执行子计划的结果向上层节点有序输出

并行相关参数
参数描述
max_work_processer(integer)设置系统支持的最大后台进程,默认值为8,此参数调整后需要重启数据库才生效。备库需要大于主库
max_parallel_workers(integer)系统并行查询进程,默认值为8。其值不超过max_work_processer
max_parallel_workers_per_gather(integer)运行启用并行进程的进程数,默认值2。设置成0则禁用并行查询。
parallel_setup_cost(floating point)优化器启动并行进程的成本,默认为1000
parallel_tuple_cost(floating point)设置优化器通过并行进程处理一行数据的成本,默认是0.1
min_parallel_table_scan_size(integer)设置开启并行的条件之一,表占用空间小于此值将不会开启并行,并行顺序扫描场景下扫描的数据大小通常等于表大小,默认值8MB
min_parallel_index_scan_size(integer)设置开启并行的条件之一,实际上并行扫描不会扫描索引所有数据块,只是扫描索引相关数据块,默认值512kb
force_parallel_model(num)强制开启并行,OLTP生产环境开启需要慎重,不建议开启
select name,setting,unit,enumvals,vartype
  from pg_settings ps
 where 1=1
   and ps.name in (
         'force_parallel_mode',
         'max_worker_processes',
         'max_parallel_workers',
         'max_parallel_maintenance_workers',
         'max_parallel_workers_per_gather',
         --'min_parallel_relation_size',-- add 9.6,remove from 10
         'min_parallel_index_scan_size',
         'min_parallel_table_scan_size',
         'parallel_tuple_cost',
         'parallel_setup_cost',
         'parallel_leader_participation'
)
;
  • max_parallel_workers_per_gather :每个 Gather/GatherMerge 最大的并行 worker 数(不包含 leader),默认值为2

image-20211014151830765

  • min_parallel_table_scan_size : 使用并行扫描的最小表大小,默认 8MB
  • min_parallel_index_scan_size : 使用并行扫描的最小索引大小,默认 512KB

image-20211014153959330

并行计划示意图

image-20211014152127772

并行查询计划中,处理用户请求的 backend 进程称之为主进程(leader),将执行时动态生成的进程称之为工作进程(worker)。每个 worker 执行 Gather 节点以下计划的一个副本,leader 节点主要负责处理 Gather 及其以上节点的操作,根据 worker 数不同,leader 也可能会执行 Gather 以下计划的副本。

并行查询中引入了两个新的代价值
  • parallel_tuple_cost : 每个 Tuple 从 worker 传递给 master 的代价,即 worker 将一个 tuple 放入共享内存队列,然后 master 从中读取的代价,默认值为 0.1
  • parallel_setup_cost : 启动并行查询 worker 进程的代价,默认值为 1000
示例
-- 创建表
CREATE TABLE t_big(
	id int4,
	name character varying(32),
	create_time timestamp without time zone DEFAULT clock_timestamp()
);
-- 插入数据
INSERT INTO t_big(id,name)
SELECT n, n||'_tv' FROM generate_series(1,5000000) n;
-- 一个并行顺序扫描的执行计划
EXPLAIN ANALYSE SELECT * FROM t_big WHERE name = '1_tv';

-- 创建索引
create index id_t_big_name on t_big using btree (name); 

image-20211014160410044

  • Workers Planned :执行计划预估的并行进程数
  • Workers Launched: 查询实际获得的并行进程数。
  • Parallel Seq Scan on t_big :并行顺序(全表)扫描
  • Planning time :生成执行计划的时间
  • Execution time :SQL实际执行时间

免责声明:文章转载自《PG-并行查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇基于EasyNVR实现RTSP/Onvif监控摄像头Web无插件化直播监控Android 进程保活招式大全(转载)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java 8 (10) CompletableFuture:组合式异步编程

https://www.cnblogs.com/baidawei/p/9447737.html   随着多核处理器的出现,提升应用程序的处理速度最有效的方式就是可以编写出发挥多核能力的软件,我们已经可以通过切分大型的任务,让每个子任务并行运行,使用线程的方式,分支/合并框架(java 7) 和并行流(java 8)来实现。 现在很多大型的互联网公司都对外...

Parallel.ForEach 之 MaxDegreeOfParallelism

参考:Max Degree of Parallelism最大并行度配置结论: 与设置的线程数有关 有设置的并行度有关 测试如下: @@@code System.Threading.ThreadPool.SetMinThreads(20, 20); System.Threading.ThreadPool.SetMinThreads(50,...

java8使用parallelStream并行流造成数据丢失或下标越界异常解决方案

描述 我们先看一段使用了并行流的代码 @Test public void testStream() { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 10000; i++) { li...

db2性能优化

性能优化概述 DB2 的性能优化可以从三个方面分析:内存,CPU 和 I/O 。DB2 性能优化是一件较为复杂的综合性的工作 , 需要对问题的根源作全方位的探索和思考。同时也需要较深厚的数据库管理经验与优化知识。这对于初学者来说可能有些勉为其难。但是在很多情况下,随着 DB2 数据库中的数据量的不断增长或者用户数的激增,数据库系统的性能会显著下降,而此时快...

Openstack并行性能加速

版权声明:欢迎大家转载,转载请注明出处blog.csdn.net/tantexian。 目录(?)[-] 摘要 引言 Techniques that Dont Reuire Patches Running N nova-api workers Use quantum for Security Groups not nova-compute Sto...

深入浅出计算机组成原理学习笔记:第三十一讲

一、引子 上一讲,我带你一起看了三维图形在计算机里的渲染过程。这个渲染过程,分成了顶点处理、图元处理、栅格化、片段处理,以及最后的像素操作。这一连串的过程, 也被称之为图形流水线或者渲染管线。 因为要实时计算渲染的像素特别地多,图形加速卡登上了历史的舞台。通过3dFx的Voodoo或者NVidia的TNT这样的图形加速卡,CPU就不需要再去处理一个个像素点...