1 简介
PG-Strom是在PostgreSQL上的GPU插件,可以使用GPU进行运算。
cstore_fdw是PostgreSQL上的列式插件,使用该插件可以对表进行列式存储。
对比原生PG与使用上述插件的导入及查询性能。
2 系统配置
CPU | Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz*4 |
内存 | 8G |
磁盘 | 260G ssd |
GPU | NVIDIA Tesla P40(24G显存)*1 |
3 性能测试
原始数据:美国2008年飞行数据(MapD官方提供)行长约400B,共2.1亿行,84G
3.1 入库性能
数据库 | 导入性能 | 表大小 | 数据压缩比 |
pg-strom | 9.3w/s | 66G | 1.27 |
pg-strom多进程导入 | 23.9w/s | 66G | 1.27 |
cstore_fdw | 7w/s | 3.8G | 22.1 |
3.2 查询性能
测试语句:
Sql1: select count(*) from flights; |
Sql2: select count(*) from flights where origin_country=’USA’; |
Sql3: select count(*) as cnt,avg(distance) as dis from flights where flight_month=10; |
Sql4: select origin_city,dest_city,count(*) as cnt,avg(airtime) as atime from flights group by origin_city,dest_city order by cnt desc,atime; |
Sql5: select origin_state,dest_state,count(*) as cnt,avg(airtime) as atime from flights where distance<175 group by origin_state,dest_state ; |
性能对比:
无缓存:
Sql 查询耗时(ms) | pg | pg with pg-strom | cstore_fdw | pg-strom & cstore_fdw |
sql1 | 70833 | 86196 | 24478 | 35965 |
sql2 | 143490 | 90782 | 49316 | 47441 |
sql3 | 75490 | 88699 | 6766 | 7902 |
sql4 | 1286666 | 94219 | 141624 | 85152 |
sql5 | 212259 | 91956 | 41230 | 39182 |
有缓存:
Sql 查询耗时(ms) | pg | pg-strom | cstore_fdw | pg-strom & cstore_fdw |
sql1 | 71456 | 86946 | 22503 | 35686 |
sql2 | 142894 | 91004 | 39743 | 38782 |
sql3 | 74287 | 88874 | 4595 | 4686 |
sql4 | 1270628 | 92768 | 119362 | 64952 |
sql5 | 211838 | 88107 | 41951 | 38719 |
4 测试结论
- 入库性能:PG一个导入进程只能用满1核,故需要多进程导入才能达到性能上限。但是cstore_fdw不支持多进程并发导入,只支持单进程。
- cstore_fdw插件数据压缩比很高,甚至高于vertica的13.12。
- 两个插件较原生PG均能大幅提高性能,且可以共同生效。
- 有无缓存对PG性能基本没有影响,只有cstore_fdw插件在有缓存场景下性能有所提升。
- 分析型业务可以使用cstore_fdw插件提速,但是该插件使用外部表,功能上限制较大,不支持删除与修改。