PostgreSQL中是否可以使用并行SELECT语句?

时间:2011-06-23 15:18:09

标签: postgresql parallel-processing

来自SQL和数据库新手的问题

我已经阅读了一些关于db并发的文章,但同时更新是最常见的事情。

但是,我只对从数据库中提取信息感兴趣。

所以,问题如下:

是否可以同时从数据库中执行多个SELECT?这些SELECT会干扰吗?案例2可能吗?

通常情况(1):

  • [时间流逝:0秒]
  • SELECT something1 FROM table1
  • 获取第一个SELECT
  • 的结果
  • [时间流逝:1.5秒]
  • SELECT something2 FROM table1
  • 获取第二个SELECT
  • 的结果
  • [时间流逝:3秒]

同时查询的案例(2):

  • [时间流逝:0秒]
  • SELECT something1 FROM table1
  • [时间流逝:0.001秒]
  • SELECT something2 FROM table1
  • 获取第一个SELECT
  • 的结果
  • [时间流逝:1.5秒]
  • 获取第二个SELECT
  • 的结果
  • [时间流逝:1.5001秒]

4 个答案:

答案 0 :(得分:4)

是的,只要您打开了两个单独的连接并通过单独的连接运行两个select语句就可以了。

答案 1 :(得分:0)

PostgreSQL使用名为MVCC的方法协调多个同时执行的语句。对于最常见的情况,多个读者或作者共存,彼此之间没有任何干扰。执行读写操作混合的两个会话可能会相互影响。例如,第二个会话尝试更新已由正在执行的事务已经UPDATEd的行将阻止等待第一个会话提交或中止。

在某些其他情况下,执行类似操作的两个会话将进行交互,但这些是为了提高性能而完成的。例如,如果一个会话正在对整个表执行巨大的顺序扫描查询,然后第二个会话开始执行相同的操作,则第二个会话将加入以共享第一个正在完成的工作。这对您来说都是透明的,但可以大大加快每个查询的完成速度。

当您同时进行多个连接时,最关心的是当您开始执行UPDATE和DELETE语句时,这些语句会对数据库中的项进行锁定。这些很容易相互干扰,会发生的事情是第二个语句通常会在它继续之前等待第一个语句完成。我已经提到过的文档章节也对此进行了介绍。

答案 2 :(得分:0)

现在使用 PostgreSQL 9.6 + ,部分SQL查询可以并行化,用户几乎不做任何努力(没有DBLink /没有专门的查询调优)。

了解更多here

答案 3 :(得分:-1)

是可以通过添加这暗示:

/*+ PARALLEL(table) */ * from table;

/*+ PARALLEL(table 4) */ * from table; 

=>其中4是number_of_workers;

您可以通过显示允许的上限工人:

SHOW max_worker_processes;