公司动态
pgrust 无 VACUUM 愿景:存储引擎的革命性实验
pgrust 无 VACUUM 愿景存储引擎的革命性实验【免费下载链接】pgrustPostgres rewritten in Rust, now faster than Postgres and Clickhouse项目地址: https://gitcode.com/GitHub_Trending/pg/pgrustpgrust 是一个用 Rust 从零重写 PostgreSQL 的开源项目它的终极愿景之一是打造一个无 VACUUM 的存储引擎。这个革命性实验如果成功将彻底改变数据库运维的日常——不再需要定时清理、不再担心表膨胀、不再为事务回卷熬夜。本文将面向新手用最通俗的语言讲清楚VACUUM 到底在解决什么问题、为什么它让人头疼以及 pgrust 计划如何在存储引擎层面掀翻这张旧桌子。一、新手必读VACUUM 到底在干什么PostgreSQL 采用MVCC多版本并发控制机制当你更新或删除一行数据时旧版本不会立刻被物理删除而是作为死元组残留在页面里这样才能保证正在读取的其它事务不受影响。久而久之这些死元组越积越多就会导致表膨胀Bloat表文件越来越大磁盘占用飙升查询扫描变慢事务 ID 回卷风险事务号是 32 位循环使用的必须通过 FREEZE 冻结老事务否则数据库可能拒绝写入甚至宕机索引失效清理不及时索引与堆表数据不同步。VACUUM就是 PostgreSQL 内置的清洁工回收死元组、更新可见性映射、冻结旧事务。原版 Postgres 中它由backend/commands/vacuum.c这个庞然大物驱动而 pgrust 已经把这套逻辑完整移植到了 commands_vacuum/src/lib.rs注释里明确写着保留 freeze-cutoff 运算、逐分支保留控制流——这是为了先在行为上 100% 对齐Postgres。二、为什么 VACUUM 是运维界公认的麻烦精既然 VACUUM 这么重要为什么还要干掉它因为它带来了巨大的运维负担与不确定性必须定时调度autovacuum 的触发阈值、休眠间隔、并发数……参数多到让人眼花缭乱性能抖动大表 VACUUM 会抢占 I/O 与 CPU慢查询、锁竞争时有发生膨胀不可预测写多读少的业务表可能一夜之间膨胀数倍VACUUM FULL 需要锁表想彻底收缩表空间得先接受业务停摆。这些痛点背后是清理这件事被事后补救式地强加在行级存储之上。pgrust 的设想是与其维护一个复杂的清洁工不如在设计存储引擎时就让垃圾无处产生。三、pgrust 的无 VACUUM 革命性实验存储引擎级解决方案 pgrust 的 Roadmap 里白纸黑字写着storage experiments, including no-vacuum designs——无 VACUUM 设计正是官方规划的存储实验方向。它在存储层拥有完整的自研基础设施为这场实验铺好了路storage/buffer/缓冲管理器页面缓存与刷盘策略的核心storage/smgr/存储管理器对接文件系统、批量写入storage/freespace/空闲空间管理直接影响死空间能否被即时复用storage/page/页面布局无 VACUUM 的关键战场。可能的实现路径包括就地即时回收在更新/删除时直接清理死元组让空间立即可复用分区式空间管理借鉴 LSM / 列存思路将清理转化为高效的合并与压实compaction后台静默完成更聪明的 XID 处理摆脱 32 位事务号的回卷束缚从根上消灭 FREEZE 的必要性。值得一提的是pgrust 的堆表访问层已经拆出了独立的 heapam/freeze.rs专门承载冻结相关的逻辑为后续替换冻结机制预留了清晰的边界。四、不止于愿景pgrust 当下的硬核成绩单 无 VACUUM 是长远实验但 pgrust 的短期成绩已经相当亮眼兼容 Postgres 18.3磁盘格式完全兼容可直接从现有 Postgres 18.3 数据目录启动46,000 回归查询全部通过 Postgres 官方预期输出行为一致性惊人正在开发的新版本线程替代进程thread-per-connection 模型、事务负载比 Postgres快 50%、分析负载快约 300 倍在 ClickBench 基准上已逼近 ClickHouse作者认为还有反超空间。这些数据意味着pgrust 不只是能跑的玩具而是一个行为可信、性能有想象空间的重写工程。存储实验正是在这个地基上展开。五、想亲手体验两步跑起来 克隆仓库地址见项目主页后在项目根目录执行用项目自带的--initdb初始化数据目录具体参数可参考 README.md 的 Build From Source 一节启动后即可用psql连接跑select version()感受一下。想观察内核行为项目内置了轻量级的 TRACE 设施见 pgrust/trace/通过环境变量PGRUST_TRACEheaptuple,smgr,bufmgr即可实时看到存储与元组层面的执行轨迹——对理解 VACUUM 相关实验尤其有帮助。六、结语一场值得围观的存储革命 无 VACUUM 不是噱头而是对 PostgreSQL 最古老顽疾的一次正面宣战。pgrust 用 Rust 的内存安全与表达力配合 AI 辅助编程正在把Postgres 内核难以改动这座大山一点点搬走。无论实验最终走向何方这场存储引擎的革命性实验都值得每个数据库爱好者持续关注。【免费下载链接】pgrustPostgres rewritten in Rust, now faster than Postgres and Clickhouse项目地址: https://gitcode.com/GitHub_Trending/pg/pgrust创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考