原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
并行技术
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 成为性能瓶颈;
原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。