2. postgresql并行扫描(1)——pg强制走并行扫描建表及参数配置

这篇具有很好参考价值的文章主要介绍了2. postgresql并行扫描(1)——pg强制走并行扫描建表及参数配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

转载自:https://developer.aliyun.com/article/700370

1. 参数设置

1.1 postgresql.conf中修改

# 1、总的可开启的WORKER足够大  
max_worker_processes =128

# 2、所有会话同时执行并行计算的并行度足够大  
max_parallel_workers=64

# 3、单个QUERY中并行计算NODE开启的WORKER=24  
max_parallel_workers_per_gather =24
max_parallel_maintenance_workers=64
# 4、所有表和索引扫描允许并行  
min_parallel_table_scan_size =0
min_parallel_index_scan_size =0
  
# 5、并行计算优化器成本设置为0  
parallel_tuple_cost =0
parallel_setup_cost =0

1.2 执行前修改

# 1、总的可开启的WORKER足够大  
postgres=# show max_worker_processes ;  
 max_worker_processes   
----------------------  
 128  
(1 row)  
  
# 2、所有会话同时执行并行计算的并行度足够大  
postgres=# set max_parallel_workers=64;  
SET  
  
# 3、单个QUERY中并行计算NODE开启的WORKER=16  
postgres=# set max_parallel_workers_per_gather =16;  
SET  
  
# 4、所有表和索引扫描允许并行  
postgres=# set min_parallel_table_scan_size =0;  
SET  
postgres=# set min_parallel_index_scan_size =0;  
SET  
  
# 5、并行计算优化器成本设置为0  
postgres=# set parallel_tuple_cost =0;  
SET  
postgres=# set parallel_setup_cost =0;  
SET  

# 6、设置表级并行度为2  
postgres=# alter table test set (parallel_workers =2);  
ALTER TABLE  

# 7、执行结果
test=# explain (analyze) select count(*) from test;
                                                           QUERY PLAN                                                       
    
----------------------------------------------------------------------------------------------------------------------------
----
 Finalize Aggregate  (cost=107.10..107.11 rows=1 width=8) (actual time=13.974..15.860 rows=1 loops=1)
   ->  Gather  (cost=107.08..107.09 rows=2 width=8) (actual time=9.101..15.841 rows=3 loops=1)
         Workers Planned: 2
         Workers Launched: 2
         ->  Partial Aggregate  (cost=107.08..107.09 rows=1 width=8) (actual time=2.609..2.610 rows=1 loops=3)
               ->  Parallel Seq Scan on test  (cost=0.00..96.67 rows=4167 width=0) (actual time=0.026..1.645 rows=3333 loops
=3)
 Planning Time: 1.899 ms
 Execution Time: 16.046 ms
(8 rows)

max_parallel_workers_per_gather 参数控制执行节点的最大并行进程数,通过以上并行计划可知,开启并行后,会启动两个 worker 进程(即 Workers Launched: 2)并行执行

2. 建表

drop table test;
create table test(a int, b int, c int);
create index ii on test(b);
insert into test values(generate_series(1, 10000), generate_series(1, 10000), generate_series(1, 10000));
analyze test;
vacuum full test;

3. pg并行概述参考连接

https://developer.aliyun.com/article/684431

并行扫描的理念很朴素,即启动多个 worker 并行扫描表中的数据。以前一个进程做所有的事情,无人争抢,也无需配合,如今多个 worker 并行扫描,首先需要解决如何分工的问题。

PostgreSQL 中的并行扫描分配策略也很直观,即 block-by-block。多个进程间(leader 和 worker)维护一个全局指针 next,指向下一个需要扫描的 block,一旦某个进程需要获取一个 block,则访问该指针,获取 block 并将指针向前移动。

目前支持并行的常用扫描算子有:SeqScan,IndexScan,BitmapHeapScan 以及 IndexOnlyScan。

下图分别是并行 SeqScan(左)和 并行 IndexScan(右)的原理示意图,可见两者均维护一个 next 指针,不同的是 SeqScan 指向下一个需要扫描的 block,而 IndexScan 指向下一个索引叶子节点。

注意,目前并行 IndexScan 仅支持 B-tree 索引。
2. postgresql并行扫描(1)——pg强制走并行扫描建表及参数配置,PostgreSQL,postgresql,数据库
并行 IndexOnlyScan 的原理类似,只是无需根据索引页去查询数据页,从索引页中即可获取到需要的数据;并行 BitmapHeapScan 同样维护一个 next 指针,从下层 BitmapIndexScan 节点构成的位图中依次分配需要扫描的 block。

个人理解:这里实现并行的核心主要是多个线程如何处理这个全局的next指针。

后续计划对这部分的源码进行单步调试进行原理的学习。文章来源地址https://www.toymoban.com/news/detail-704102.html

到了这里,关于2. postgresql并行扫描(1)——pg强制走并行扫描建表及参数配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【PG】PostgreSQL 模式(Schema)

    目录 1 Schema的概念 database schema table之间的关系  引入schema的原因 创建Schema 查看Schema 删除Schema 2 Public Schema 3 Schema的索索路径 4 Schema 与 权限 5 系统Catalog Schema 6 使用方式(最佳实践) 7 可移植性 一个PostgreSQL数据库集群中包含一个或更多的数据库。 角色和一些其他对象类型

    2024年02月05日
    浏览(66)
  • 【PG】PostgreSQL字符集

    目录 设置字符集 1 设置集群默认的字符集编码 2 设置数据库的字符集编码 查看字符集 1 查看数据字符集编码  2 查看服务端字符集 3 查看客户端字符集 4 查看默认的排序规则和字符分类  被支持的字符集 PostgreSQL里面的字符集支持你能够以各种字符集存储文本,包括 单字节字

    2024年02月08日
    浏览(43)
  • 【PG】PostgreSQL客户端认证pg_hba.conf文件

    目录 文件格式  连接类型(TYPE) 数据库(database) 用户(user) 连接地址(address) 格式 IPv4 IPv6 字符 主机名 主机名后缀 IP-address/IP-mask auth-method trust reject scram-sha-256 md5 password gss sspi ident peer ldap radius cert pam bsd auth-options 示例 用户在连接到PG数据库之前首先要经过文件的验证,可以

    2024年02月08日
    浏览(40)
  • PostgreSql pg_ctl 命令

    控制 PostgreSQL 服务的工具。 init 或 initdb:调用initdb命令。详见initdb。 参数说明 : -c 或 --core-files :生成服务器崩溃产生核心文件。 -D datadir 或 --pgdata=datadir :指定数据库数据文件位置。如果这个选项被忽略,将使用环境变量 PGDATA。 -l filename 或 --log=filename :追加服务器日志

    2024年02月14日
    浏览(45)
  • PostgreSQL实战-pg13主从复制切换测试

    修改/etc/profile文件, 添加如下内容: 清空数据表数据 主库清空数据表数据 从库对应的数据表也会被清空 新增数据表数据 主库数据表插入数据一行 从库数据表也会插入一行 删除数据表数据

    2024年02月15日
    浏览(45)
  • POSTGRESQL PG15关于归档的新模式

    开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到3群(共810人左右 1 + 2 + 3),这里需要注意,如果想和 瑞典马工进行面对面的交

    2024年02月06日
    浏览(48)
  • 【PostgreSQL】连接pg数据库Schema切换

    由于PostgreSQL数据库模式(schema)存在多个,原先的表单是默认采用public但是查询表和字段时候有查询所有未进行过滤,导致数据库连接失败、查表字段也为空(空即查询服务端异常错误) 数据库连接配置 添加参数补充 ?currentSchema=dwd 譬如: username=root;password=XXXX;url=jdbc:postg

    2024年02月11日
    浏览(50)
  • 【PG】PostgreSQL高可用方案repmgr部署(非常详细)

    目录 简介 1 概述 1.1 术语 1.2 组件 1.2.1 repmgr 1.2.2 repmgrd 1.3 Repmgr用户与元数据 2 安装部署 2.0 部署环境  2.1 安装要求 2.1.1 操作系统 2.1.2 PostgreSQL 版本 2.1.3 操作系统用户 2.1.4 安装位置 2.1.5 版本要求 2.2 安装 2.2.1 软件包安装 2.2.2 源码编译安装 3 快速开始 3.2 PostgreSQL部署主库

    2024年02月02日
    浏览(43)
  • PG DBA培训23:PostgreSQL执行计划与统计信息

    本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL Execution plan and statistical,学完本课程可以掌握PostgreSQL性能优化之查询处理,PostgreSQL处理SQL的整个逻辑顺序,PostgreSQL查询处理的流程讲解,PostgreSQL性能优化之执行计划,执行计划的介绍,执行计划查看语法,执行

    2024年01月22日
    浏览(50)
  • POSTGRESQL(PG) 性能优化之like全文检索优化

    使用like操作可以进行字符串比较,全文检索等,性能相对比较差,有些情况下可以通过建立索引来提升性能。下面我们通过使用TPCH orders表作为例子,来进行说明。但是请注意, not like是不能用任何索引的,BTREE不支持!=操作,只能进行=和范围查找。 TPCH orders表的定义如下,

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包