华为云 GaussDB:企业级分布式数据库技术深度解析

📅 2026-07-01

---

摘要

GaussDB 是华为自研的企业级分布式数据库系列,涵盖 关系型(GaussDB for MySQL/PostgreSQL)、非关系型(GaussDB for Mongo/Cassandra/Influx/Redis)、以及原生分布式(GaussDB DWS/HTAP) 三大产品矩阵。本文从存储引擎、分布式事务、查询优化器、高可用架构四个维度深入剖析 GaussDB 的核心技术,并对比 Aurora、Spanner、TiDB 等竞品。

---

一、GaussDB 产品矩阵

1.1 家族全览

` GaussDB 产品体系 │ ├── 关系型数据库 │ ├── GaussDB(for MySQL) — MySQL 兼容,存算分离 │ ├── GaussDB(for PostgreSQL) — PG 兼容,商业级特性 │ └── GaussDB(openGauss) — 纯自研内核,集中式/分布式双模 │ ├── 非关系型数据库 │ ├── GaussDB(for Mongo) — MongoDB 协议兼容,存算分离 │ ├── GaussDB(for Cassandra) — 宽表,时序友好 │ ├── GaussDB(for Influx) — 时序数据库 │ └── GaussDB(for Redis) — 内存 KV,高可用 │ ├── 分析型 │ └── GaussDB(DWS) — MPP 数据仓库,PB 级 │ └── HTAP 混合负载 └── GaussDB(for MySQL) + HTAP — 行列混存,实时分析 `

1.2 选型决策树

`mermaid flowchart TD A[新项目选型] --> B{需要分布式?} B -->|单机足够| C{GaussDB for MySQL 兼容?} B -->|必须分布式| D{数据模型?} C -->|是| E[GaussDB for MySQL] C -->|否, 要高兼容性| F[GaussDB for PostgreSQL] C -->|否, 要极致性能| G[GaussDB openGauss] D -->|关系型| E D -->|文档/JSON| H[GaussDB for Mongo] D -->|宽表/时序| I[GaussDB for Cassandra] D -->|分析/OLAP| J[GaussDB DWS] `

---

二、存算分离架构:GaussDB(for MySQL)

2.1 架构设计

GaussDB(for MySQL) 采用了业界领先的 存算分离 + 日志即数据库 架构,与 AWS Aurora 类似但有显著改进:

` ┌─────────────────────────────────────────────────┐ │ SQL 路由层 │ │ (Proxy 层, 读写分离, 负载均衡) │ └──────┬──────────────────────┬────────────────────┘ │ │ ┌──────▼──────────┐ ┌──────▼──────────┐ │ RW Node │ │ RO Node × 15 │ │ (计算节点) │ │ (只读节点) │ │ │ │ │ │ • SQL 解析 │ │ • 从存储层读取 │ │ • 事务管理 │ │ Page │ │ • 锁管理 │ │ • Buffer Pool │ │ • Buffer Pool │ │ 独立缓存 │ │ • REDO 日志产生 │ │ │ └──────┬──────────┘ └──────┬───────────┘ │ │ │ REDO Log Stream │ Read Pages ▼ ▼ ┌─────────────────────────────────────────────────┐ │ 分布式共享存储 (DFV Storage) │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ Log Store (高速 SSD, 3-AZ 同步复制) │ │ │ │ • REDO 日志持久化 (Quorum Write) │ │ │ │ • RPO = 0 │ │ │ └─────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ Page Store (分布式 KV) │ │ │ │ • 日志应用 → 生成具体数据页 │ │ │ │ • 6 副本 (3AZ × 2) │ │ │ │ • 自动修复/再平衡 │ │ │ └─────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────┘ `

2.2 日志即数据库 (Log is Database)

GaussDB 的核心技术创新:计算节点只写 REDO Log 到存储层,数据页的生成完全由存储层异步完成

` 传统 MySQL: Write-Ahead Logging: Commit → 写 REDO → 写 Binlog → 刷 Dirty Page → 返回

GaussDB(for MySQL): Commit → 写 REDO (Quorum, 3-AZ) → 立即返回 │ └→ 存储层异步 apply 日志生成 Page

收益: ✓ 写路径缩短: 1 次网络往返 vs 3-4 次 ✓ 无 Full Page Write 开销 ✓ 无 Checkpoint 导致的 I/O 抖动 ✓ Crash Recovery 从分钟级降至秒级 `

2.3 只读副本(Read Replica)

| 特性 | GaussDB for MySQL | AWS Aurora | |------|-------------------|------------| | 最大只读副本 | 15 | 15 | | 副本延迟 | <3ms (同 AZ) | <10ms (同 AZ) | | 副本扩展时间 | <30s | <10min | | 副本一致性保证 | Multi-Paxos | Quorum 仲裁 | | 自动读写分离 | 原生 Proxy 层 | 需配置 RDS Proxy |

---

三、分布式事务引擎:GaussDB(openGauss)

3.1 分布式架构模式

GaussDB(openGauss) 支持 集中式 → 分布式 平滑升级:

` 集中式 (单节点): ┌────────────────────────────┐ │ GaussDB Master │ │ • 查询优化器 │ │ • 事务管理器 │ │ • 存储引擎 │ └────────────────────────────┘

分布式 (Sharding) — 自动分片: ┌──────────────────────────────────────────┐ │ Coordinator Node (CN × 2-4) │ │ • 接收客户端连接 │ │ • SQL 解析 & 路由 │ │ • 分布式查询计划生成 │ │ • 分布式事务协调 │ └───────────┬──────────────────────────────┘ │ ┌──────────┼──────────┬──────────┐ ▼ ▼ ▼ ▼ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ DN 1 │ │ DN 2 │ │ DN 3 │ │ DN 4 │ Data Node (DN) │Shard │ │Shard │ │Shard │ │Shard │ • 实际存储数据 │ 0-31 │ │32-63 │ │64-95 │ │96-127│ • 本地事务执行 │ │ │ │ │ │ │ │ • 参与分布式事务 └──────┘ └──────┘ └──────┘ └──────┘ │ ┌──────────┴──────────┐ ▼ ▼ ┌──────┐ ┌──────────┐ │ GTM │ │ CMS │ │Global│ │ Cluster │ │Trans │ │ Manager │ │ Mgr │ │ Service │ └──────┘ └──────────┘ `

3.2 分布式事务协议:2PC + GTM

GaussDB 使用 全局事务管理器 (GTM) + 两阶段提交 (2PC) 实现分布式事务:

` 阶段 0: 申请 GXID CN → GTM: 获取全局事务ID GTM → CN: GXID = 10001 (全局唯一,单调递增)

阶段 1: PREPARE CN → DN1: PREPARE GXID=10001 CN → DN2: PREPARE GXID=10001 CN → DN3: PREPARE GXID=10001 (所有 DN 将事务所涉数据锁住,写入 Undo/Redo,但标记为 In-Doubt)

阶段 2a: CORE COMMIT (核心节点提交) CN → DN1: CORE COMMIT GXID=10001 (DN1 立即提交,释放锁)

阶段 2b: ASYNC COMMIT (异步提交) CN → DN2, DN3: COMMIT GXID=10001 (异步执行,不阻塞客户端)

优势: ✓ GTM 单点串行化 → 严格全局顺序 → SI (Snapshot Isolation) 天然保证 ✓ CORE COMMIT 机制 → 分布式事务的延迟 ≈ 单机事务 + 1次网络 ✓ 无全局死锁检测开销 (GTM 顺序分配 XID 天然无环) `

GaussDB GTM vs Spanner TrueTime vs CockroachDB HLC:

| 维度 | GaussDB GTM | Spanner TrueTime | CockroachDB HLC | |------|-------------|------------------|-----------------| | 时钟方案 | 集中式顺序 XID | 原子钟 + GPS 授时 | 混合逻辑时钟 | | 全局一致性 | Strict Serializability | External Consistency | Serializability | | 时钟硬件依赖 | 无 | TrueTime API (硬件依赖) | 无 | | 延迟来源 | 1 次 GTM 网络往返 | 提交等待 (Commit Wait) | 不确定性窗口 | | 单点瓶颈 | GTM (可做主备) | 无 (分布式) | 无 (分布式) | | 跨 Region 延迟 | 高 (GTM 集中) | 低 (就近 TrueTime) | 中等 |

3.3 MVCC 与可见性判断

GaussDB 使用基于 CSN (Commit Sequence Number) 的 MVCC:

`sql -- 每条元组 (Tuple) 携带的隐藏字段 xmin -- 插入该行的事务 GXID xmax -- 删除/更新该行的事务 GXID (0 表示未删除) cmin -- 插入命令的事务内序号 cmax -- 删除命令的事务内序号 csn -- 事务提交的全局序列号

-- 可见性判断引擎逻辑 (简化) -- 事务 T 的快照 XID = GTXID_T,快照 CSN = CSN_T FUNCTION is_visible(tuple, GTXID_T, CSN_T): IF tuple.xmin == GTXID_T THEN -- 自己插入的 → 可见 RETURN TRUE END IF

IF tuple.csN > CSN_T THEN -- 在快照之后提交 → 不可见 RETURN FALSE END IF

IF tuple.xmax != 0 AND tuple.xmax_csn <= CSN_T THEN -- 被可见事务删除了 → 不可见 RETURN FALSE END IF

RETURN TRUE END FUNCTION `

---

四、查询优化器:AI-Native 优化

4.1 自适应查询优化 (ABO)

GaussDB 引入了 基于机器学习的基数估计强化学习的 Join Order 选择

`sql -- 传统优化器 (CBO) 的痛点 -- 假设列之间独立 → 估算偏差可达 1000× SELECT COUNT(*) FROM orders WHERE status = 'completed' AND created_at > '2024-01-01';

-- CBO 估算: total_rows × selectivity(status) × selectivity(created_at) -- 实际: status 和 created_at 高度相关 (老订单更可能是 completed) -- → 估算偏差导致错误的 Join Order

-- GaussDB ABO 方案: -- 1. 自动收集列组统计 (Multi-Column Statistics) -- 2. 训练 ML 模型推断联合分布 -- 3. 使用 DQN (Deep Q-Network) 搜索最优 Join Order `

4.2 内核级执行引擎优化

| 优化技术 | 说明 | 性能提升 | |----------|------|----------| | 向量化执行 | 批量处理 (每批 1024 行),减少函数调用 | 2-5× | | LLVM JIT 编译 | 将表达式编译为机器码 | 2-10× | | 自适应并行 | 运行时根据数据分布决定并行度 | 1.5-3× | | CodeGen | 为特定查询生成专用 C 代码 | 5-20× | | SMP 并行 | 单查询多核并行执行 | 线性扩展 (上限 64 核) |

`c // 示例:表达式 JIT 编译 // 原始: WHERE (a + b) * c > 100 // 传统: 对每行执行虚函数调用链 // GaussDB JIT: 生成以下机器码

// 生成的伪汇编 (x86-64) mov rax, [rbx + a_offset] // 加载 a add rax, [rbx + b_offset] // + b imul rax, [rbx + c_offset] // * c cmp rax, 100 // > 100? jg .L_match // 跳转到匹配分支

// 收益: 完全消除了解释器开销和虚函数调用 `

---

五、高可用与容灾

5.1 跨 AZ 高可用架构

` Client │ ▼ ┌───────────────┐ │ DNS / VIP │ ← 自动故障切换 └───────┬───────┘ │ ┌─────────────┼─────────────┐ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ AZ 1 │ │ AZ 2 │ │ AZ 3 │ │ │ │ │ │ │ │ Master │ │ Standby │ │ Quorum │ │ (RW) │──│ (Sync) │──│ (Async) │ │ │ │ │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ ┌────▼────────────▼────────────▼────┐ │ 分布式共享存储 (DFV) │ │ 6 副本 / 3-AZ 写入 │ │ RPO: 0 / RTO: < 60s │ └────────────────────────────────────┘

同步策略: • SYNC → Master 等待 Standby 确认 (至少 1 个) • QUORUM → Master 等待多数派确认 (推荐) • ASYNC → Master 不等待 `

5.2 跨 Region 容灾 (DR)

`yaml

GaussDB 异地灾备配置

disaster_recovery: type: "cross_region" primary_region: "ap-southeast-3" # 新加坡 (生产) dr_region: "ap-southeast-4" # 香港 (灾备) replication: mode: "async" # 跨Region必然异步 network: "cloud_connect" # 走华为云骨干网 switchover: type: "planned" # planned / forced RPO: "< 1 second" RTO: "< 5 minutes" data_verification: true # 切换前校验数据一致性 `

---

六、性能基准测试结果

SysBench OLTP (GaussDB for MySQL)

| 配置 | TPS | QPS | P95延迟 | |------|-----|------|---------| | 2vCPU 8GB (单机) | 12,500 | 250,000 | 8ms | | 8vCPU 32GB | 45,000 | 900,000 | 5ms | | 16vCPU 64GB | 82,000 | 1,640,000 | 3ms | | 32vCPU 128GB + 2RO | 195,000 | 3,900,000 | 2ms |

TPC-H (GaussDB DWS)

| 数据规模 | 节点数 | 总执行时间 | |----------|--------|------------| | 100 GB | 3 | 42s | | 1 TB | 12 | 185s | | 10 TB | 48 | 612s |

---

七、与竞品对比总结

| 维度 | GaussDB | AWS Aurora | Google Spanner | TiDB | |------|---------|------------|----------------|------| | 存算分离 | ✅ | ✅ | ✅ (Colossus) | ✅ | | 分布式事务 | GTM+2PC | 有限 (Aurora DSQL) | TrueTime+2PC | Percolator | | 分片模型 | Hash / Range / 混合 | Aurora Limitless | 自动 | Range / Hash | | MySQL 兼容 | 99.9%+ | 99.9%+ | 有限 (PG 语法) | 95%+ | | AI 优化器 | ✅ ABO | ❌ | ❌ | 部分 | | ARM 原生 | ✅ Kunpeng | ✅ Graviton | ❌ | ❌ | | 开源 | openGauss | ❌ | ❌ | ✅ (Apache 2.0) | | 中国区域 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ❌ | ⭐⭐⭐⭐ |

---

总结

GaussDB 的核心技术优势在于 存算分离架构的深度优化 + 自研内核级性能改造 + AI-Native 查询优化。它不是 MySQL/PG 的简单托管,而是在兼容协议之上的重新实现。对于需要 强一致分布式事务、高并发 OLTP、实时 HTAP 分析 的出海企业,GaussDB 提供了一个性能与 Aurora 相当、生态比 Spanner 更开放、同时拥有中国 + 亚太数据主权优势的数据库选项。

---

> 下一篇预告:华为云 CCE 云原生与微服务架构实践 —— Volcano 批量调度、Kata 安全容器、ServiceComb 微服务治理全景。