Postgresql9.6:为什么并行查询的10个循环比1个循环慢

Postgresql9.6:为什么并行查询的10个循环比1个循环慢,postgresql,sql-execution-plan,postgresql-9.6,Postgresql,Sql Execution Plan,Postgresql 9.6,博士后9.6;Centos 6.7;24芯 BigTable1包含150000000行;重量180GB。 最大工作进程数=20个每个聚集最多并行工作进程数=12个 完成并比较了两项测试: 1) 运行explain Analysis时,从BigTable1中选择count(*) 我们有“工人计划:10”,查询执行时间为448秒。 解释分析输出是: Parallel Seq Scan on BigTable1 (cost=0.00..20137165.46 rows=**177208946** wi

博士后9.6;Centos 6.7;24芯 BigTable1包含150000000行;重量180GB。 最大工作进程数=20个每个聚集最多并行工作进程数=12个

完成并比较了两项测试:

1) 运行explain Analysis时,从BigTable1中选择count(*)

我们有“工人计划:10”,查询执行时间为448秒。 解释分析输出是:

Parallel Seq Scan on BigTable1 (cost=0.00..20137165.46 rows=**177208946** width=0) (actual time=0.023..417798.820 rows=159481670 loops=10)
我们看到几乎所有用于读取和统计BigTable1中数据的时间

2) 使用定义的集合max\u parallel\u workers\u per\u gather运行相同查询时=0

执行时间为547秒

 Aggregate  (cost=38306668.21..38306668.22 rows=1 width=8) (actual time=547132.254..547132.255 rows=1 loops=1)
   ->  Append  (cost=0.00..34319310.77 rows=1594942978 width=0) (actual time=0.562..444920.155 rows=**1595067208** loops=1) 
        -> Seq Scan on category_data_prt_201702  (cost=0.00..34313881.12 rows=1594880512 width=0) (actual time=0.026..312120.207 rows=1594816703 loops=1)
问题是:

  • 为什么10个循环的工作速度比1个循环慢
  • 如果没有并行的查询花费了时间,即以下内容是什么意思:
Aggregate(成本=38306668.21..38306668.22行=1宽度=8)(实际时间=547132.254..547132.255行=1循环=1)
->追加(成本=0.00..34319310.77行=**1594942978**宽度=0)(实际时间=0.562..444920.155行=159506728循环=1)
  • 为什么在并行查询执行测试中没有那些“追加/聚合”部分

显然,您的硬盘速度不够快,无法用10个并行线程进行复制。并行执行大量工作并不总是比一个接一个地执行快。此外,您是否多次运行测试?可能第一次数据库必须从磁盘读取更多数据,第二次数据已经在文件系统中缓存。显然,您的硬盘速度不够快,无法用10个并行线程进行复制。并行执行大量工作并不总是比一个接一个地执行快。此外,您是否多次运行测试?可能第一次数据库必须从磁盘读取更多数据,第二次数据已经在文件系统中隐藏物