开发者社区> francs.tan> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PostgreSQL 11 新特性解读 : 支持并行创建索引(Parallel Index Builds)

简介:
+关注继续查看

PostgreSQL 11 版本在并行方面得到增强,例如支持并行创建索引、并行Hash Join、并行 CREATE TABLE .. AS等,本文先介绍并行创建索引。

PostgreSQL 11 版本并行创建索引仅支持 B-tree 索引,其它类型索引现阶段不支持并行创建。

并行进程相关参数

介绍并行创建索引之前先来看看并行进程的相关 postgresql.conf 参数。

  • max_parallel_maintenance_workers
    max_parallel_maintenance_workers 参数设置维护命令(例如 CREATE INDEX) 命令允许的最大并行进程数,默认值为2。
  • max_parallel_workers
    设置系统支持的最大并行进程数,默认值为8。
  • max_worker_processes
    设置数据库的最大后台进程数,默认值为8。
  • max_parallel_workers_per_gather
    设置单个Gather或Gather Merge节点能够启用的最大并行进程数,默认值为2,并行查询(Parallel Query)的并行度受此参数的影响,CREATE INDEX 命令的并行度不受此参数影响。

以上参数可能并不容易理解,进一步解释如下:

  1. max_worker_processes 参数设置的是数据库允许的最大后台进程数,并行进程属于后台进程的一种;
  2. max_parallel_workers 参数设置数据库允许的最大并行进程数,这个值小于或等于 max_worker_processes。
  3. 并行进程数设置分为两类,第一类是并行查询,并行查询的并行度由 max_parallel_workers_per_gather 参数控制,第二类是维护命令(例如 CREATE INDEX),维护命令的并行度由 max_parallel_maintenance_workers 参数控制。
  4. max_parallel_workers_per_gather+max_parallel_maintenance_workers值应小于或等于 max_parallel_workers。

postgresql.conf 设置以下并行度参数如下:

max_worker_processes = 16               # (change requires restart)
max_parallel_maintenance_workers = 4    # taken from max_parallel_workers
max_parallel_workers_per_gather = 4     # taken from max_parallel_workers
max_parallel_workers = 8

测试环境准备

创建测试表big并插入3000万条数据,如下:

CREATE TABLE big(user_id int4,user_name text,ctime timestamp(6) without time zone default clock_timestamp() );
INSERT INTO big(user_id,user_name) SELECT  n ,n || '_data' FROM generate_series(1,30000000) n;;

并行创建索引

在会话级设置max_parallel_maintenance_workers值为4。

francs=> set max_parallel_maintenance_workers =4;
SET

创建索引,如下

francs=> CREATE INDEX idx_big_ctime ON big USING BTREE(ctime);
CREATE INDEX

在主机上通过 top 命令可以看到 CREATE INDEX 命令的进程号为 21164,并且开启了4个并发子进程。

创建索引并行度测试

设置 max_parallel_maintenance_workers 值不同并行度,测试并行索引创建的时间。

本测试环境为一台4核8GB内存的虚机,测试结果如下:

max_parallel_maintenance_workers 索引创建时间(毫秒)
0 14938.738
2 10469.283
4 10439.237
6 11577.147
8 17020.216

从以上看出,当 max_parallel_maintenance_workers 值为4时索引创建时间出现拐点。

关闭指定表并行创建索引

通过前面介绍大家知道可通过设置max_parallel_maintenance_workers参数为0关闭所有表的并行创建索引,如何关闭指定表的并行索引创建呢?

可通过 ALTER TABLE 方式禁止表上的并行创建索引,如下禁止表big上的所有并行创建索引。

francs=> ALTER TABLE big SET (parallel_workers=0);
ALTER TABLE

如果想恢复指定表上的parallel_workers参数设置,使用 RESET 选项即可,如下:

francs=> ALTER TABLE big RESET(parallel_workers);
ALTER TABLE

参考

新书推荐

最后推荐和张文升共同编写的《PostgreSQL实战》,本书基于PostgreSQL 10 编写,共18章,重点介绍SQL高级特性、并行查询、分区表、物理复制、逻辑复制、备份恢复、高可用、性能优化、PostGIS等,涵盖大量实战用例!

购买链接:https://item.jd.com/12405774.html

_5_PostgreSQL_

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【LeetCode133】克隆图(dfs和unordered_map)
节点数不超过 100 。 每个节点值 Node.val 都是唯一的,1 <= Node.val <= 100。
17 0
ESS使用感受
大家好!我是一名研二的学生。能够参加“飞天加速计划-高校学生在家实践”这个活动了,非常开心。之前学习Linux是在本地安装了虚拟机,顺利的完成了Linux的基础入门学习,后来买了一台服务器,这样更加方便。所以在学习docker时,我觉得拥有一台云服务器是势在必行的。机缘巧合之下,我发现了这个飞天加速计划。能够使用阿里云的服务器,我真的十分开心。
47 0
PostgreSQL 并行计算解说 之15 - parallel bitmap scan
标签 PostgreSQL , cpu 并行 , smp 并行 , 并行计算 , gpu 并行 , 并行过程支持 背景 PostgreSQL 11 优化器已经支持了非常多场合的并行。简单估计,已支持27余种场景的并行计算。 parallel seq scan
622 0
PostgreSQL 并行计算解说 之3 - parallel agg
标签 PostgreSQL , cpu 并行 , smp 并行 , 并行计算 , gpu 并行 , 并行过程支持 背景 PostgreSQL 11 优化器已经支持了非常多场合的并行。简单估计,已支持27余种场景的并行计算。 parallel seq scan parallel index scan parallel index
368 0
PostgreSQL 并行计算解说 之14 - parallel index scan
标签 PostgreSQL , cpu 并行 , smp 并行 , 并行计算 , gpu 并行 , 并行过程支持 背景 PostgreSQL 11 优化器已经支持了非常多场合的并行。简单估计,已支持27余种场景的并行计算。 parallel seq scan paral
632 0
「镁客早报」特斯拉推出租赁业务;美国FCC计划进行第三次5G频谱拍卖
NASA与SpaceX合作,尝试让小行星偏转;美团被爆裁员上千人。
138 0
POJ 2492 A Bug&#39;s Life
A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 35756   Accepted: 11730 Description Background Profe...
951 0
+关注
francs.tan
致力于 PostgreSQL 中文技术分享,博客 https://postgres.fun
23
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载