博客/技术探讨

一场实测揭示:从 Greenplum 迁移到 YMatrix 能快多少?

2025-07-17 · YMatrix Team
#技术探讨

前言

很多 Greenplum 用户都在关心这样一个问题:如果我们什么都不改,迁移到 YMatrix,性能能提升多少?如果进一步使用 YMatrix 的存储引擎 MARS3,又能快多少?

本期我们基于 TPC-H 标准测试,回答这两个问题。

在之前的文章中,我们介绍了YMatrix 与 Greenplum 的相同与不同,简而言之,从 Greenplum 迁移至 YMatrix, 能够在上层应用基本无改动的情况下,获得三大收益:

  • 分析更高效

  • 压缩比更高

  • 服务更可靠

本期将聚焦其中的分析,通过实测结果给出明确答案,并展示如何通过合理使用 YMatrix 的 MARS3 存储引擎,实现大幅性能跃升。

01 测试标准:为什么选择 TPC-H?

TPC-H 是针对分析型场景,被广泛采用的的一个基准测试,用以衡量数据库系统在复杂分析查询和 BI 工作负载下的性能。

它模拟一个供应链管理业务的模型,包含 8 张规范化的表,具体的查询均基于真实的场景,涉及销售分析、库存管理、客户行为分析、供应商评估等。

比如:

  • 分析特定时间段内收入变化趋势(Q1,Q5)

  • 识别销售表现最好的地区(Q3,Q7)

  • 分析不同供应商提供的零件成本差异(Q2,Q16)

  • 预测哪些订单可能会延迟发货(Q12,Q21)

  • 计算客户购买行为的市场份额变化(Q8,Q18)

从查询复杂度、负载多样性上也覆盖非常全面:

  • 查询复杂度从简单到高度复杂不等

  • 包含各种 SQL 特性(聚合、子查询、连接等)

  • 包含并发数据修改操作

  • 覆盖计算密集型和连接密集型查询

02 测试环境

本次测试环境并非高配,但仍能清晰地反映系统间的真实性能差异。本次测试环境并非高配,但仍能清晰地反映系统间的真实性能差异。

本次测试结果来源于 YMatrix 开发过程中进行常规基准测试。虽然硬件规格不高,但也能很好的反映出 Greenplum 与 YMatrix 之间在相同或不同的存储引擎中的性能差异:

  • CPU:8c

  • 内存:64G

  • 部署方式: 1 主角点 + 2 数据节点(每个数据节点上 2 个实例)

  • Greenplum version: 6.26.4

  • YMatrix version: 6.3.0

  • 数据量:100 GB (比例因子 = 100)

03 性能测试

🔍 实测结果一:Heap vs Heap —— YMatrix 快 3.06 倍!

Heap 是 Greenplum 的默认存储引擎,目前也是 YMatrix 的默认存储引擎。

作为继承自 PostgreSQL 的经典存储引擎,Heap 存储能够更好的支持写入、更新、删除等操作,但是作为行存,在大数据分析型场景中表现不佳。

受益于计算引擎和其他组件的优化,虽然 Heap 存储引擎不是 TPC-H 这类场景中的最佳选择,但 YMatrix 也获得了较好的成绩。

🔍 实测结果二:AOCO vs MARS3 —— YMatrix 快 12.3 倍

AOCO 是 Greenplum 的列式存储引擎,MARS3 是 YMatrix 自研的行列混合存储引擎。二者都具备列式存储的优势,能够提升数据库在大数据量分析型场景中的性能表现。

虽然使用了 AOCO 这样的列式存储,但 Greenplum 的计算引擎仍然是传统的火山式存储引擎,无法充分发挥列式存储的的优势,因此性能提升不明显。

而 YMatrix 的计算引擎经过了全面的向量化改造,能够利用现代 CPU 的 SIMD 指令集实现批量的数据计算,配合 MARS3 存储引擎,性能提升更明显。

04 总结:相同引擎 3 倍起步,不同引擎 14 倍+

基于 TPC-H 的实测结果,即便不使用 MARS3,YMatrix 也能在 Greenplum 基础上实现约 3 倍性能提升。

如果进一步启用 MARS3 存储引擎,整体性能最高可提升至 14 倍以上。更重要的是,使用方式几乎无学习成本,即可实现业务侧“0 改动”的平滑加速。

05 使用 MARS3 存储引擎的最佳实践

MARS3 虽然经过了大量优化,但绝大多数情况下使用起来和其他类型的表并无区别。

如何使用:

  1. 创建表时显式的声明USING MARS3,就会使用 MARS3 作为存储引擎
CREATE TABLE metrics (
    ts              timestamp,
    dev_id          bigint,
    power           float,
    speed           float
) USING MARS3 -- 使用 MARS3 存储引擎
DISTRIBUTED BY (dev_id)
  1. MARS3 存储引擎支持 UPDATE/DELETE, 无论是查询还是其他操作都可以使用标准的 SQL 直接进行操作

  2. MARS3 还支持 ORDER BY 操作,当指定了排序键时,数据会根据指定的排序键存储,在一些场景中(特别是按排序键进行点查的场景),还能提升 30% 以上的效率

CREATE TABLE metrics (
    ts              timestamp,
    dev_id          bigint,
    power           float,
    speed           float
) USING MARS3
DISTRIBUTED BY (dev_id)
ORDER BY (dev_id,ts) --- 排序键
  1. MARS3 支持 Brin 索引,还有包括压缩在内的更多可灵活配置的参数,具体可参考文档:https://ymatrix.cn/doc/6.4/reference/storage/intro