1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

新闻 并行方式全表扫描功能已提交 PG 9.6 版主干代码 下载

本帖由 漂亮的石头2015-12-09 发布。版面名称:软件资讯

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    487,354
    赞:
    47
    以下博文翻译自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,谢谢!
    并行方式全表扫描功能已提交 PG 9.6 版主干代码下载地址
     
正在加载...