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_

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
存储 监控 关系型数据库
B-tree不是万能药:PostgreSQL索引失效的7种高频场景与破解方案
在PostgreSQL优化实践中,B-tree索引虽承担了80%以上的查询加速任务,但因多种原因可能导致索引失效,引发性能骤降。本文深入剖析7种高频失效场景,包括隐式类型转换、函数包裹列、前导通配符等,并通过实战案例揭示问题本质,提供生产验证的解决方案。同时,总结索引使用决策矩阵与关键原则,助你让索引真正发挥作用。
925 0
|
监控 关系型数据库 数据库
PostgreSQL的索引优化策略?
【8月更文挑战第26天】PostgreSQL的索引优化策略?
764 1
|
JSON 关系型数据库 PostgreSQL
PostgreSQL 9种索引的原理和应用场景
PostgreSQL 支持九种主要索引类型,包括 B-Tree、Hash、GiST、SP-GiST、GIN、BRIN、Bitmap、Partial 和 Unique 索引。每种索引适用于不同场景,如 B-Tree 适合范围查询和排序,Hash 仅用于等值查询,GiST 支持全文搜索和几何数据查询,GIN 适用于多值列和 JSON 数据,BRIN 适合非常大的表,Bitmap 适用于低基数列,Partial 只对部分数据创建索引,Unique 确保列值唯一。
1702 15
|
SQL 关系型数据库 OLAP
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
764 2
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
2597 1
|
关系型数据库 数据库 PostgreSQL
PostgreSQL索引维护看完这篇就够了
PostgreSQL索引维护看完这篇就够了
1715 0
|
SQL 关系型数据库 数据库
RDS PostgreSQL索引推荐原理及最佳实践
前言很多开发人员都知道索引对于数据库的查询性能至关重要,一个好的索引能使数据库的性能提升成千上万倍。但给数据库加索引是一项相对专业的工作,需要对数据库的运行原理有一定了解。同时,加了索引有没有性能提升、性能提升了多少,这些都是加索引前就想知道的。这项繁杂的工作有没有更好的方案呢?有!就是今天重磅推出...
831 1
RDS PostgreSQL索引推荐原理及最佳实践
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
2243 1
|
数据可视化 关系型数据库 MySQL
将 PostgreSQL 迁移到 MySQL 数据库
将 PostgreSQL 迁移到 MySQL 数据库
3124 2
|
SQL 存储 自然语言处理
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
在当今社交媒体的时代,人们通过各种平台分享自己的生活、观点和情感。然而,对于平台管理员和品牌经营者来说,了解用户的情感和意见变得至关重要。为了帮助他们更好地了解用户的情感倾向,我们可以使用PostgreSQL中的pg_jieba插件对这些发帖进行分词和情感分析,来构建一个社交媒体情感分析系统,系统将根据用户的发帖内容,自动判断其情感倾向是积极、消极还是中性,并将结果存储在数据库中。
1546 1
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词

热门文章

最新文章

推荐镜像

更多