南大通用GBase 8c特性介绍——高性能

12 阅读4分钟

原文链接: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 等复杂算子,都可以下推。
单表查询下推.png

(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 查询下推

join 查询下推.png

(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技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。