作者
digoal
日期
2019-03-19
标签
PostgreSQL , cpu 并行 , smp 并行 , 并行计算 , gpu 并行 , 并行过程支持
背景
PostgreSQL 11 优化器已经支持了非常多场合的并行。简单估计,已支持几十种场景的并行计算。
并行计算到底带来了多大的性能提升?
是否满足实时分析的需求?
是否可以支持OLTP与OLAP混合业务使用?
PostgreSQL 11 并行计算使用场景、性能提升倍数
场景 | 数据量 | 关闭并行 | 开启并行 | 并行度 | 开启并行性能提升倍数
---|---|---|---|---|---
全表扫描 | 10 亿 | 53.4 秒 | 1.8 秒 | 32 | 29.7 倍
条件过滤 | 10 亿 | 53.4 秒 | 1.87 秒 | 32 | 28.6 倍
哈希聚合 | 10 亿 | 142.3 秒 | 4.8 秒 | 30 | 29.6 倍
分组聚合 | 10 亿 | 142.3 秒 | 4.8 秒 | 30 | 29.6 倍
select into | 10 亿 | 54.5 秒 | 1.9 秒 | 32 | 28.7 倍
create table as | 10 亿 | 54.7 秒 | 2 秒 | 30 | 27.35 倍
CREATE MATERIALIZED VIEW | 10 亿 | 54.7 秒 | 2 秒 | 30 | 27.35 倍
create index | 10 亿 | 964 秒 | 252 秒 | 32 | 3.83 倍
parallel CREATE INDEX CONCURRENTLY - 不堵塞读写 | 10亿 | 509.6 秒 | 355 秒 | 16 | 1.44 倍
排序 | 10 亿 | 76.9 秒 | 2.75 秒 | 32 | 28 倍
自定义并行聚合1(求 distinct 数组 字段元素、以及count distinct) | 10 亿 | 298.8 秒 | 8.7 秒 | 36 | 34.3 倍
自定义并行聚合2(求 distinct 普通 字段元素、以及count distinct) | 10 亿 | 96.5 秒 | 3.43 秒 | 36 | 28 倍
自定义并行函数(UDF) | 10 亿 | 456 秒 | 16.5 秒 | 30 | 27.6 倍
普通并行(gather) | 10 亿 | 70.2 秒 | 2.5 秒 | 30 | 28.1 倍
归并并行(gather merge) | 10 亿 | 78.2 秒 | 2.76 秒 | 30 | 28.3 倍
rc (ud agg count distinct) | 10 亿 | 107 秒 | 3.65 秒 | 30 | 29.3 倍
rr (ud agg count distinct) | 10 亿 | 107 秒 | 3.65 秒 | 30 | 29.3 倍
parallel OLAP : 中间结果 parallel with unlogged table ; unlogged table并行求avg case | 10 亿 | 73.6 秒 | 2.5 秒 | 30 | 29.44 倍
parallel index scan | 10 亿 | 19 秒 | 1.58 秒 | 20 | 12 倍
parallel bitmap scan | 10 亿 | 23.98 秒 | 15.86 秒 | 20 | 1.5 倍
parallel index only scan | 10 亿 | 8 秒 | 0.6 秒 | 20 | 13.33 倍
parallel nestloop join | 10亿 join 10亿 using (i) where t1.i<10000000 | 14.4 秒 | 4.6 秒 | 8 | 3.13 倍
parallel merge join | 10亿 join 10亿 using (i) where t1.i<10000000 | 3.2 秒 | 1 秒 | 8 | 3.2 倍
parallel hash join | 10亿 join 10亿 using (i) where t1.i<10000000 and t2.i<10000000 | 8.1 秒 | 1 秒 | 20 | 8.1 倍
parallel hash join | 10亿 join 10亿 using (i) | 1071 秒 | 92.3 秒 | 20 | 11.6 倍
parallel partition table wise join | 10亿 join 10亿 using (i) | 1006 秒 | 76 秒 | 24 | 13.2 倍
parallel partition table wise agg | 10亿 | 191 秒 | 8 秒 | 24 | 23.9 倍
parallel append | 10亿 | 70.5 秒 | 3.16 秒 | 24 | 22.3 倍
parallel append merge | 10亿 | 99.4 秒 | 5.87 秒 | 24 | 16.93 倍
parallel union all | 10亿 | 99 秒 | 5.6 秒 | 24 | 17.68 倍
parallel CTE | 10亿 | 65.65 秒 | 3.33 秒 | 24 | 19.7 倍
parallel 递归查询, 树状查询, 异构查询, CTE, recursive CTE, connect by | 异构数据1亿,日志数据10亿 | 5.14 秒 | 0.29 秒 | 24 | 17.7 倍
parallel scan mult FDW tables (通过继承表方式) | 10亿 | 180 秒 | 7.8 秒 | 24 | 23.1 倍
parallel scan mult FDW tables (通过union all) | 10亿 | 165.6 秒 | 27.8 秒 | 5 | 6 倍
parallel leader process | 10亿 | 186 秒 | 95 秒 | 1 | 2 倍
parallel subquery | 20亿 | 179.7 秒 | 6.5 秒 | 28 | 27.6 倍
每一项性能提升的测试CASE请见参考部分。
参考
《PostgreSQL 并行计算解说 之29 - parallel 递归查询, 树状查询, 异构查询, CTE, recursive CTE, connect by》
《PostgreSQL 并行计算解说 之28 - parallel CREATE INDEX CONCURRENTLY - 不堵塞读写》
《PostgreSQL 并行计算解说 之27 - parallel subquery》
《PostgreSQL 并行计算解说 之26 - parallel gather | gathermerge - enable leader worker process》
《PostgreSQL 并行计算解说 之24 - parallel CTE (Common Table Express)》
《PostgreSQL 并行计算解说 之23 - parallel union all》
《PostgreSQL 并行计算解说 之23 - parallel append merge》
《PostgreSQL 并行计算解说 之22 - parallel append》
《PostgreSQL 并行计算解说 之21 - parallel partition table wise agg》
《PostgreSQL 并行计算解说 之20 - parallel partition table wise join》
《PostgreSQL 并行计算解说 之19 - parallel hash join》
《PostgreSQL 并行计算解说 之18 - parallel merge join》
《PostgreSQL 并行计算解说 之17 - parallel nestloop join》
《PostgreSQL 并行计算解说 之16 - parallel index only scan》
《PostgreSQL 并行计算解说 之15 - parallel bitmap scan》
《PostgreSQL 并行计算解说 之14 - parallel index scan》
《PostgreSQL 并行计算解说 之13 - parallel OLAP : 中间结果 parallel with unlogged table》
《PostgreSQL 并行计算解说 之12 - parallel in rc,rr 隔离级别》
《PostgreSQL 并行计算解说 之11 - parallel gather, gather merge》
《PostgreSQL 并行计算解说 之10 - parallel 自定义并行函数(UDF)》
《PostgreSQL 并行计算解说 之9 - parallel 自定义并行聚合》
《PostgreSQL 并行计算解说 之8 - parallel sort》
《PostgreSQL 并行计算解说 之7 - parallel create index》
《PostgreSQL 并行计算解说 之6 - parallel CREATE MATERIALIZED VIEW》
《PostgreSQL 并行计算解说 之5 - parallel create table as》
《PostgreSQL 并行计算解说 之4 - parallel select into》
《PostgreSQL 并行计算解说 之3 - parallel agg》
《PostgreSQL 并行计算解说 之2 - parallel filter》
《PostgreSQL 并行计算解说 之1 - parallel seq scan》
PostgreSQL 许愿链接
您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.
9.9元购买3个月阿里云RDS PostgreSQL实例
PostgreSQL 解决方案集合
德哥 / digoal's github - 公益是一辈子的事.





