KingbaseE中的并行查询

概述当前 CPU 具有大量内核,应用程序一直在与数据库并行发送查询。在报告查询处理多表行的情况下,查询使用多个 CPU 的能力有助于我们更快地执行。KingbaseES 中的并行查询允许利用多 CPU 更快地完成报告查询。测试环境数据准备,建立大表,可以很好体现并行查询的差异。kingbase=# \d+关联列表架构模式 | 名称 | 类型 | 拥有者 | 大小 | 描述----------±----------------.
摘要由CSDN通过智能技术生成
  1. 概述
    当前 CPU 具有大量内核,应用程序一直在与数据库并行发送查询。在报告查询处理多表行的情况下,查询使用多个 CPU 的能力有助于我们更快地执行。KingbaseES 中的并行查询允许利用多 CPU 更快地完成报告查询。
  2. 测试环境
    数据准备,建立大表,可以很好体现并行查询的差异。
    kingbase=# \d+
    关联列表
    架构模式 | 名称 | 类型 | 拥有者 | 大小 | 描述
    ----------±-----------------------------±-------±---------±-----------±-----
    public | BUSINESS_WHGL_whid_SEQ | 序列数 | system | 8192 bytes |
    public | business_wf_file | 数据表 | system | 17 MB |
    public | business_wf_file_id_seq | 序列数 | system | 8192 bytes |
    public | business_wf_lcsl | 数据表 | system | 2440 kB |
    public | business_wf_lcsl_lcsl_id_seq | 序列数 | system | 8192 bytes |
    public | business_whgl | 数据表 | system | 16 kB |
    public | jbpm4_hist_task | 数据表 | system | 191 MB |

kingbase=# \d jbpm4_hist_task
数据表 “public.jbpm4_hist_task”
栏位 | 类型 | 校对规则 | 可空的 | 预设
------------------±-------------------------------±---------±---------±--------------
dbid_ | numeric(19,0) | | not null |
dbversion_ | integer | | not null |
execution_ | character varying(255 char) | | |
outcome_ | character varying(255 char) | | |
assignee_ | character varying(255 char) | | |
priority_ | integer | | |
state_ | character varying(255 char) | | |
create_ | timestamp(3) without time zone | | |
end_ | timestamp(3) without time zone | | |
duration_ | numeric(19,0) | | |
nextidx_ | integer | | |
supertask_ | numeric(19,0) | | |
ext_lcsl_id_ | numeric(19,0) | | | ‘-1’::integer
ext_author_id_ | numeric(19,0) | | | ‘-1’::integer
ext_business_id_ | numeric(19,0) | | | ‘-1’::integer

  1. 并行顺序扫描
    这可能更快不是因为并行读取,而是因为数据分散在许多 CPU 内核上。现代操作系统为 PostgreSQL 数据文件提供了良好的缓存。预读允许从存储中获取一个块,而不仅仅是 KES 守护进程请求的块。因此,查询性能不受磁盘 IO 限制。它消耗 CPU 周期用于:

 从表数据页中一一读取行
 比较行值和 WHERE 条件

让我们尝试执行简单的选择查询:

kingbase=# explain analyze select supertask_ as sum_qty from jbpm4_hist_task;
QUERY PLAN

Seq Scan on jbpm4_hist_task (cost=0.00…36702.12 rows=1230512 width=7) (actual time=0.061…223.064 rows=1230512 loops=1)
Planning Time: 0.040 ms
Execution Time: 255.468 ms
(3 行记录)

顺序扫描产生太多没有聚合的行。因此,查询由单个 CPU 内核执行。

添加 SUM() 后,很明显可以看到两个 worker 将帮助我们更快地进行查询:
kingbase=# explain analyze select sum(supertask_) as sum_qty from jbpm4_hist_task;
QUERY PLAN

Finalize Aggregate (cost=31806.14…31806.15 rows=1 width=32) (actual time=116.894…117.734 rows=1 loops=1)
-> Gather (cost=31805.92…31806.13 rows=2 width=32) (actual time=116.783…117.720 rows=3 loops=1)
Workers Planned: 2
Workers Launched: 2
-> Partial Aggregate (cost=30805.92…30805.93 rows=1 width=32) (actual time=114.408…114.409 rows=1 loops=3)
-> Parallel Seq Scan on jbpm4_hist_task (cost=0.00…2952

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值