• PG-Storm让PostgreSQL插上飞翔的翅膀
  • Linda 发表于 2015/9/21 22:13:00 | 分类标签: PostgreSQL 数据库
  • PostgreSQL的扩展PG-Storm允许用户自定义扫描方式,将CPU的密集型工作负载转移到GPU处理,从而利用GPU强大的并行执行能力完成数据任务。在处理器内核数量和RAM带宽上,GPU有得天独厚的优势。GPU通常有成百上千的处理器内核,RAM带宽也比CPU大几倍,可以并行处理大量数值计算,因此其运算十分高效。

    PG-Storm基本基于两点思想:
    •运行中本地GPU代码生成
    •异步流水线执行模式
     
    在查询优化阶段,PG-Storm检测给定查询是否完全或部分可以在GPU上执行,而后确定该查询是否可转移。如果该查询可以转移,那么PG-Storm则在运行中创建GPU本地二进制文件的源代码,在执行阶段前启动即时编译进程。接下来,PG-Storm将提取行集装载入DMA缓存(一个缓存区的大小默认为15MB),并异步启动DMA传输和GPU内核执行。CUDA平台允许这些任务在后台执行,因此PostgreSQL可以提前运行当前进程。通过GPU加速,这些异步相关切分也隐藏了一般延迟。

    装载PG-Strom后,在GPU上运行SQL并不需要专门的指示。它允许允许用户自定义PostgreSQL的扫描方式,而且提供了可以在GPU上运行的扫描/联接逻辑的其他可行方案。如果预计费用合理可行,任务管理器则放入自定义扫描节点,而非内置查询执行逻辑。

    下图是PG-Strom和PostgreSQL的基准测试结果,横坐标为表数量,纵坐标为查询执行时间。在此次测试中,所有相关的内部关系都可以一次性地加载到GPU RAM上,预聚集大大减小了CPU需要处理行数。测试代码详情可以查看这里。

    从上图中可以看出,PG-Strom比单纯PostgreSQL快很多。

    以下是几种可以提高PostgreSQL性能的方法:
    •同类纵向扩展
    •异类纵向扩展
    •横向扩展
     


    PG-Strom使用的是异类纵向扩展方法,针对工作负载特性,最大限度地利用了硬件优势。换句话来说,PG-Strom在CPU内核上运行之前,在GPU设备上分配简单而大量的数值计算。

    对于PG-Storm更多细节感兴趣的读者,可以参考NEC的专家KaiGai最近在PGCON 2015给出的Talk,文中详细解释了大数据所面临的挑战,为何引入GPU以及PG-Storm的原理和效率等内容。

  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:Linda
  • 加入时间:2013/7/2 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮