GBase 8c
其他
文章
南大通用GBase 8c特性介绍——高性能
发表于2026-02-03 17:25:30269次浏览7个评论
并行技术
GBase 8c采用并行技术来提升系统的性能和吞吐量,主要特点有:
- Coordinator协调器制定分布式执行计划,将算子下推到数据节点,数据节点并行处理;
- 各数据节点采用多线程架构,多个线程并行处理;
- 采用MVCC(多版本并发控制)技术,实现读写不冲突,提升读写并行处理能力;
- 支持并行查询,可以解决在复杂查询场景中,单个查询的执行时间过长造成系统并发度降低,从而影响数据库对外服务性能的问题。
原位更新
与PostgreSQL相比
1、PostgreSQL使用多版本并发控制MVCC机制:
- 当执行delete时,数据库将删除元组直接标记为dead,并不会真正从物理上删除;
- 当执行update时,数据库将会使用unused空间写入一个新的元组,然后将旧元组标记为dead,也不进行物理删除;
- 当表上频繁DML时,dead tuple会逐渐将空间耗尽,同时做全表扫描时产生很多额外I/O。
GBase 8c采用原位更新技术:
- 将new tuple放在原位,将dead tuple集中存放在undo;
- 去除vacuum,保证数据回收时IO稳定;
- 数据空间缩减。
2、PostgreSQL采用追加更新方式存储数据,也就是当修改数据时,不是在原位置修改,而是写入一个新记录,这会导致空间膨胀,也就需要定期回收过期的数据空间。这一直是PostgreSQL的一个弱项。
而GBase 8c实现了Undo机制,也就可以在原位置更新数据。这带来的好处包括:
- 高性能:对插入、更新、删除等不同负载的业务,性能以及资源使用表现相对均衡;
- 运行平稳:性能运行平稳;
- 高效存储:支持最大限度的原位更新, TPCC负载下节约空间,UNDO空间统一分配,集中回收,复用效率更高,存储空间使用更加高效、平稳。
算子下推
算子下推是GBase 8c关键技术之一,可以把各种复杂的SQL进行下推执行,最小化数据移动,这是相对于基于分库分表的中间件方案的核心优势。
1、单表查询下推
单表查询,不管SQL的where条件是否带有分片键,优化器都可以生成下推的执行计划,包括sort/group by等复杂算子,都可以下推。

(1)分片键上的where条件,直接下推到对应DN执行:
EXPLAIN SELECT * FROM td1 WHERE a=18 ORDER BY b;
例如返回:
QUERY PLAN
------------------------------------------------------------
Remote Fast Query Execution (cost=0.00..0.00 rows=0 width=0)
Node/s: dn2
-> Sort (cost=38.44..38.47 rows=11 width=8)
Sort Key: b
-> Seq Scan on td1 (cost=0.00..38.25 rows=11 width=8)
Filter: (a = 18)
(6 rows)
(2)非分片键where条件:DN先计算,CN做结果汇总,group by可以直接下推到DN:
EXPLAIN SELECT * FROM td1 WHERE b=18 ORDER BY b;
例如返回:
QUERY PLAN
------------------------------------------------------------
Remote Subquery Scan on all (dn1,dn2,dn3) (cost=0.00..1.01 rows=1 width=8)
-> Seq Scan on td1 (cost=0.00..1.01 rows=1 width=8)
Filter: (b = 18)
(3 rows)
2、Join查询下推

(1)分片键上的join条件,直接下推到对应DN执行:
EXPLAIN SELECT * FROM td1,td2 WHERE td1.a=td2.c ORDER BY a;
例如返回:
QUERY PLAN
------------------------------------------------------------
Remote Subquery Scan on all (dn1,dn2,dn3) (cost=2.04..2.05 rows=1 width=16)
-> Sort (cost=2.04..2.05 rows=1 width=16)
Sort Key: td1.a
-> Nested Loop (cost=0.00..2.03 rows=1 width=16)
Join Filter: (td1.a = td2.c)
-> Seq Scan on td1 (cost=0.00..1.01 rows=1 width=8)
-> Seq Scan on td2 (cost=0.00..1.01 rows=1 width=8)
(7 rows)
(2)非分片键join条件,DN直接做数据交换,避免CN成为性能瓶颈:
EXPLAIN SELECT * FROM td1,td2 WHERE td1.b=td2.b ORDER BY a;
例如返回:
QUERY PLAN
------------------------------------------------------------
Remote Subquery Scan on all (dn1,dn2,dn3) (cost=2.04..2.05 rows=1 width=16)
-> Sort (cost=2.04..2.05 rows=1 width=16)
Sort Key: td1.a
-> Nested Loop (cost=0.00..2.03 rows=1 width=16)
Join Filter: (td1.b = td2.b)
-> Remote Subquery Scan on all (dn1,dn2,dn3) (cost=100.00..101.02 rows=1 width=8)
Distribute results by H: b
-> Seq Scan on td1 (cost=0.00..1.01 rows=1 width=8)
-> Materialize (cost=100.00..101.03 rows=1 width=8)
-> Remote Subquery Scan on all (dn1,dn2,dn3) (cost=100.00..101.02 rows=1 width=8)
Distribute results by H: b
-> Seq Scan on td2 (cost=0.00..1.01 rows=1 width=8)
(12 rows)
- Join下推到DN执行,DN之间直接进行数据重分布,交换数据,无需CN参与;CBO优化器选择小表t2做重分布;
- Sort下推到DN,CN只需做归并排序,避免CN成为性能瓶颈;
评论
登录后才可以发表评论
柒柒天晴发表于 6个月前
学习下
郝老师发表于 5个月前
全面
GBase用户47954发表于 5个月前
感谢作者的精彩分享!
GBase用户47954发表于 5个月前
感谢作者的精彩分享!
曾云林发表于 3个月前
学习了
青菇凉发表于 3个月前
学习了
GBase用户51884发表于 2个月前
学会了
热门帖子
- 12025-12-01浏览数:183029
- 22023-05-09浏览数:25742
- 42023-09-25浏览数:19323
- 52020-05-11浏览数:17940