Hacker News 中文摘要

RSS订阅

为分析场景将Postgres提速300倍:批处理、算子融合与SIMD -- Making Postgres 300x faster for analytics: batching, operator fusion, and SIMD

文章摘要

文章介绍了pgrust 0.2版本通过重构查询引擎,使Postgres在分析型基准测试中性能提升300倍,甚至超越Clickhouse。核心优化包括批处理、算子融合和SIMD指令,主要针对现代数据集常驻内存、磁盘I/O不再是瓶颈的趋势。

文章总结

文章核心内容重述

标题: 通过批处理、算子融合与SIMD技术,将Postgres分析性能提升300倍

核心观点: 文章介绍了pgrust项目(Postgres的Rust扩展)如何通过优化查询引擎,实现比原生Postgres快300倍的分析查询性能。作者通过构建一个简化的Postgres查询引擎模型,逐步演示了三种关键优化技术如何将查询速度提升近10倍。

关键细节:

  1. 性能对比:

    • pgrust v0.2相比上一版本快10倍。
    • 在OLTP基准测试中,pgrust比Postgres快30%。
    • 在Clickbench(ClickHouse的分析数据库基准测试)中,pgrust比Postgres快300倍,甚至超过了ClickHouse。
  2. 性能瓶颈背景:

    • Postgres诞生于磁盘I/O是主要瓶颈的80年代。
    • 如今,数据集常驻内存、分析型工作负载的批量扫描特性、以及NVMe等高速磁盘的出现,使得CPU和内存速度成为新的瓶颈。
    • 查询引擎是数据库中最消耗CPU的组件,因此优化它是提升性能的关键。
  3. 优化技术详解(以对5亿个浮点数求和为例):

    • 原始Postgres查询引擎(Volcano模型): 每次调用next()只处理一行数据,开销巨大。模拟代码执行耗时1.3秒。
    • 优化1:批处理(Batching):next()改为next_batch(),一次处理1024行数据,消除了逐行调用的开销。执行时间降至480毫秒(加速2.7倍)。
    • 优化2:算子融合(Operator Fusion): 将顺序扫描和求和两个节点合并为一个节点,消除了数据在节点间拷贝的开销。执行时间降至358毫秒(加速3.6倍,与纯Rust循环性能一致)。
    • 优化3:SIMD(单指令多数据流): 利用CPU的SIMD指令,同时对多个数据执行求和操作。执行时间降至135毫秒(加速9.6倍,比纯循环快3倍)。
  4. 总结:

    • 通过批处理、算子融合和SIMD这三项优化,查询引擎的性能提升了近10倍。
    • 这些优化是pgrust在分析型查询上比Postgres快数百倍的核心原因之一。
    • 文章还提及了JIT编译技术,它可以为任意查询动态生成最优代码,实现“作弊”级别的优化,但未在本篇展开。

测试环境: AWS c8g.4xlarge (Graviton4, 16 vCPU), PostgreSQL 18.4, Rust cargo build --release

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 许可证争议(评论1,评分None):用户对pgrust采用AGPL许可证表示质疑,认为PostgreSQL的MIT类许可证是其成功的关键,建议改用MIT许可证以吸引更多关注。

    • 关键引用:"AGPL is an odd license for a non web project. Postgres is MIT-like, and that drove it's adoption."
    • 关键引用:"we can have an independent rust port of pgrust, which can be MIT, which will garner more attention."
  2. 项目进展与可靠性(评论2,评分None,作者为项目作者):强调项目首要目标是正确性,已通过形式化验证和差分模糊测试证明超1000个函数逻辑与PostgreSQL一致,并发现约100个pgrust bug和20个PostgreSQL bug。

    • 关键引用:"We've been able to prove over 1000 user facing functions have the exact same logic in both pgrust and postgres."
    • 关键引用:"we've discovered ~100 bugs in pgrust and ~20 bugs in Postgres itself."
  3. 性能与架构对比(评论3、4,评分None):用户好奇pgrust与pgColumnar等OLAP扩展的对比,并关注I/O调度器和线程调度器的架构设计,认为PostgreSQL在“噪声邻居”问题上表现不佳,而pgrust可能通过线程池和I/O优先级解决。

    • 关键引用:"I’m curious to see how this compares to pgColumnar or other OLAP extensions."
    • 关键引用:"PostgreSQL has historically been bad at managing the noisy neighbor problem, but with thread pools, and io priorities, it can be solved."
  4. 自适应规划(评论5,评分None):用户对pgrust实现自适应规划表示期待,批评PostgreSQL核心团队对此技术的保守态度,希望pgrust能证明其可行性。

    • 关键引用:"One of my biggest annoyances with the Postgres core team has been their reluctance to implement any sort of adaptive planning."
    • 关键引用:"I hope this, at the very least, proves the viability of this model outside of academic/niche contexts."
  5. 许可证认可(评论6,评分None):用户感谢作者选择尊重用户自由的许可证(AGPL),并称赞项目技术出色。

    • 关键引用:"Thanks to the authors for choosing a license that respect users freedom."
    • 关键引用:"on top of being an awesome technical project."

平衡性总结:
评论对pgrust的许可证选择存在分歧:一方认为AGPL可能限制项目推广,建议改用MIT;另一方则赞赏AGPL对用户自由的尊重。项目作者强调正确性优先,已通过严格测试发现大量bug,并计划进一步验证。用户对自适应规划、I/O调度等特性表示期待,同时关注与现有扩展的对比。整体上,评论既肯定技术潜力,也指出许可证和架构设计的潜在挑战。