PostgreSQL 9.6 并行计算 优化器算法浅析
之前写过几篇 PostgreSQL 并行计算的文章,文中并没有仔细描述PostgreSQL是如何决策并行计算,以及并行度的。
- 开源数据库PostgreSQL攻克并行计算难题
https://yq.aliyun.com/articles/44655 - PostgreSQL 并行计算 在 xfs, ext4 下的表现
https://yq.aliyun.com/articles/53985
PostgreSQL 并不需要用户在SQL中使用HINT来启用并行计算,因为优化器会从成本的角度做出选择,是否使用,以及使用的并行度是多大。
PostgreSQL会通过这些参数来决定是否使用并行,以及该启用几个work process。
- max_worker_processes (integer)
很显然,这个参数决定了整个数据库集群允许启动多少个work process,注意如果有standby,standby的参数必须大于等于主库的参数值。
如果设置为0,表示不允许并行。
-
max_parallel_workers_per_gather (integer)
这个参数决定了每个Gather node最多允许启用多少个work process。同时需要注意,在OLTP业务系统中,不要设置太大,因为每个worker都会消耗同等的work_mem等资源,争抢会比较厉害。
建议在OLAP中使用并行,并且做好任务调度,减轻冲突。
例子,WITH语法中,有两个QUERY用来并行计算,虽然设置的max_parallel_workers_per_gather=6,但是由于max_worker_processes=8,所以第一个Gather node用了6个worker process,而另一个Gather实际上只用了2个worker。
- parallel_setup_cost (floating point)
表示启动woker process的启动成本,因为启动worker进程需要建立共享内存等操作,属于附带的额外成本。
- parallel_tuple_cost (floating point)
woker进程处理完后的tuple要传输给上层node,即进程间的row交换成本,按node评估的输出rows来乘。
代码如下
-
min_parallel_relation_size (integer)
表的大小,也作为是否启用并行计算的条件,如果小于它,不启用并行计算。但是也请注意,还有其他条件决定是否启用并行,所以并不是小于它的表就一定不会启用并行。
代码如下
src/backend/optimizer/path/allpaths.c
- force_parallel_mode (enum)
强制开启并行,可以作为测试的目的,也可以作为hint来使用。
- parallel_workers (integer)
以上都是数据库的参数,parallel_workers是表级参数,可以在建表时设置,也可以后期设置。
代码见create_plain_partial_paths()
例子
其实前面在讲参数时都已经讲到了,这里再总结一下。
- 决定整个系统能开多少个worker进程
max_worker_processes - 计算并行计算的成本,优化器根据CBO原则选择是否开启并行
parallel_setup_cost
parallel_tuple_cost
所以简单QUERY,如果COST本来就很低(比如小于并行计算的启动成本),那么很显然数据库不会对这种QUERY启用并行计算。
- 强制开启并行的开关
force_parallel_mode
当第二步计算出来的成本大于非并行的成本时,可以通过这种方式强制让优化器开启并行查询。
- 根据表级parallel_workers参数决定每个Gather node的并行度
取min(parallel_workers, max_parallel_workers_per_gather) - 当表没有设置parallel_workers参数并且表的大小大于min_parallel_relation_size是,由算法决定每个Gather node的并行度
相关参数 min_parallel_relation_size
算法见 create_plain_partial_paths
取Min(parallel_workers, max_parallel_workers_per_gather)
注意实际上,每个Gather能开启多少个worker还和PG集群总体剩余可以开启的worker进程数相关。
因此实际开启的可能小于优化器算出来的。从前面的例子中也可以理解。
-
用户也可以使用hint来控制优化器选择是否强制并行 , 参考pg_hint_plan插件的用法。
祝大家玩得开心,欢迎随时来 阿里云促膝长谈业务需求 ,恭候光临。
阿里云的小伙伴们加油,努力 做好内核与服务,打造最贴地气的云数据库 。
热门文章排行
- 共享,正从风口到风险
- 走进涂料市场的秘密
- 在人工智能炒热机器人时,也被人把风带进了
- 生物涂料有什么好处?
- 智能音箱,正走在智能手表的老路上
- “去乐视化”之后,新易到的机会在哪儿?
- 日本十大波涛汹涌巨乳美少女第5名,凶悍!
- 涂料行业未来走势 品质与个性化不可少
- 打造时尚靓丽居室 油漆选购注意三点
- AI在内容分发上的绊脚石
最新资讯文章
- 专四优秀范文:如何看待出国留学
- 2023英语专业哪个学校最好?全国英语专
- 出国留学美术专业院校有哪些
- 出国留学五十年数据汇总:我国留学人员累计
- 【留学指南】欧洲英语系「人工智能专业硕士
- 留学个人陈述(留学PS)模版
- 艺术治疗专业院校推荐及申请条件!
- 意大利威尼斯美术学院申请条件
- 园艺专业出国留学哪个学校好?
- 2024年世界大学学科排名:心理学
- 留学推荐信(通用14篇)
- 互助交流|想看看大家在大学毕业后通过自己
- 2023留学推荐信你必须知道的六件事
- 苏州大学
- 英语专业就业方向与前景调查问卷
- 英国英语学专业研究生专业有哪些
- 指南者留学案例库
- 小学生推荐信15篇
- 海外学院(外国语学院)一站式学生社区召开
- 留学生就业现状!应届海外留学生就业前景如