以下博文翻译自PostgreSQL主要代码贡献人员之一Robert Haas的博客(详情可浏览:http://www.postgresql.org/community/contributors/),同时他也是并行方式全表扫描功能的主要开发人员, 原文地址: http://rhaas.blogspot.com/2015/11/parallel-sequential-scan-is-committed.html (Blogspot现为Google旗下网站,得翻墙)


我以前建议过将并行全表扫描功能加入至PostgreSQL 9.5中,但未实现。然而,今天我很高兴地向各位通报 我已经将第一版本的并行扫描功能提交至PostgreSQL的开发主分支中,我们确认它将会包含在将要发布的9.6版本中。

为PostgreSQL增加并行查询功能,目前这只是第一步,它也是我长久以来的一个梦想,我已为此工作了好几年了, 最早真正开发时是在9.4版本的开发期间,那时我主要是开发了一些后台动态进程和动态共享内存;接着在9.5版本 期间,我又增加了很多有关并行机制的底层基本加松的开发,以及其他包含在提交的补丁的内容。下面我想说提交的 主要内容明细和下一步还准备要开发的工作和大家沟通一下。

在开始之前,我想首先将这些荣誉给一些应该得的人。首先,Amit Kapila为这个项目中贡献了巨大的帮助。主要是由 Amit和我写了这个功能的大部分代码,这些代码经过涵盖在最近几年多次提交的补丁中。我们俩也写了大量的没有包含在补丁 中的代码。第二,我想感谢Noah Misch,在项目早期阶段,在我被一些问题给绕得晕头转向时,他给了我很大的帮助;第三,我想向整 向PostgreSQL社区的成员,尤其是所有帮助我进行代码审核、功能测试、提出改进意见以及在很多其他方面提供帮助而最终 使用这个功能得以实现的人们。

最为重要的是,我要感谢EnterpriseDB公司,没有EnterpriseDB公司管理上的支持,尤其是来自Tom Kincaid和Marc Linster的支持, 也就不可能让我和Amit有大量的时间开发并最终完成这个项目。同样地,没有我在EnterpriseDB公司的团队的支持,我们的项目也 不可能现在完成,当我忙于项目开发时,我的同事们耐心地帮助我处理了其他的问题。谢谢所有的人。

好了,现在我们来看一下测试效果:

rhaas=# \timing
Timing is on.
rhaas=# select * from pgbench_accounts where filler like '%a%';
 aid | bid | abalance | filler
-----+-----+----------+--------
(0 rows)

Time: 743.061 ms
rhaas=# set max_parallel_degree = 4;
SET
Time: 0.270 ms
rhaas=# select * from pgbench_accounts where filler like '%a%';
 aid | bid | abalance | filler
-----+-----+----------+--------
(0 rows)

Time: 213.412 ms

这里是查询计划的内容:

rhaas=# explain (costs off) select * from pgbench_accounts where filler like '%a%';
                 QUERY PLAN                 
---------------------------------------------
 Gather
   Number of Workers: 4
   ->  Parallel Seq Scan on pgbench_accounts
         Filter: (filler ~~ '%a%'::text)
(4 rows)

目前因该功能还在进一步的开发中,还有一些未处理的问题和使用限制,如现在该功能暂不能在分区表上使用; 仅可对表的全表扫描类查询较有效,有索引的列就用不上了,当然对数据的过滤的操作,多进程并行处理总是要快一些; 还有就是并行处理的进程数如何根据系统配置进行最有效设置,以及其他一些小问题还未完全完成。

最后,也是请大家多多进行测试,并给我们反馈Bug,谢谢!

请在登录后发表评论,否则无法保存。
© 2010 PostgreSQL中文社区