基于视图创建表 - 最快的方法,使用多线程

时间:2012-07-25 03:17:52

标签: sql postgresql

我有一个观点,大约有1百万的记录;并且创建临时表大约需要15分钟。 尽管如此,我的CPU核心中只有一个显示负载,其他7个核心可用。如何在此过程中使用所有核心?

create table feed_03_tmp as SELECT *  FROM feed_03;

1 个答案:

答案 0 :(得分:1)

PostgreSQL后端是单线程的,每个客户端有一个后端,因此单个客户端只能使用单个核心。但是对于这样一个简单的查询,我很确定你是IO绑定的。如果你是IO绑定的,那么执行工作的一个核心将低于100%负载,如果它始终处于100%,那么你就是CPU限制。

您可以通过打开多个连接来使用多个核心,并让每个核心复制一行,但正如我所说,这可能无济于事。请注意,每个连接都在其自己的事务中。

要改善IO,您可以将临时表存储在单独的驱动器上。为此,请在第二个驱动器上创建一个表空间,并将一个TABLESPACE子句添加到create table语句中。

CREATE TABLE feed_03_tmp 
  TABLESPACE my_temp_tablespace
  AS SELECT *  FROM feed_03;
BTW:postgresql开发人员正在尝试引入多线程,但它可能需要一段时间才能得到广泛使用并使其成为一个版本。