目前 AntDB 已经同时具备 OLTP 和 OLAP(HTAP)的能力,由于用户对性能的要求是永无止境的,所以还需要继续优化 OLTP 和 OLAP 的性能,针对OLTP 的优化采用基于提交时间戳的 MVCC 机制,针对 OLAP 的优化采用列式存储和向量化执行引擎,下面举例说明 AntDB 在这两方面的具体优化方案。
OLTP性能优化
AntDB 已具备完整的 OLTP 功能,性能随着数据节点增多略呈线性增长。目前 AntDB 事务的并发性能存在两方面瓶颈:第一,数据节点的事务采用基于快照的可见性判断机制存在多核可扩展瓶颈;第二,分布式事务采用全局快照可见性判断机制存在单点瓶颈。具体平衡点分析如下。
AntDB 基于快照的事务可见性判断机制如图 7-2 所示。
图 7-2 AntDB 基于快照的事务可见性判断机制
存在如下锁冲突竞争:
● 获取快照需要加共享锁遍历Proc Array。
● 事务结束时需要加锁清理自己的Proc。
● 有时还需要CLOG判断可见性,读写CLOG需要加读写锁。
AntDB 分布式事务流程可参见图3-2,为方便阅读,复制于此,如图7-3 所示。
存在如下单点瓶颈:
● 每次需要生成全局范围内的活跃事务XID列表,在GTM上管理活跃事务XID列表。
● 造成网络瓶颈和GTM的CPU瓶颈。
AntDB 接下来将采用基于提交时间戳的 MVCC 机制,消除基于快照的多核可扩展和全局快照单点瓶颈。
● 事务开始和提交时分配时间戳。
● 任意并发事务T1和T2。
T1提交的修改对T2可见的条件:T1.commit_ts≤ T2.start_ts。
GTM 不保存全局活跃事务 XID 列表,与分布式事务相关的分片节点选举出主节点,分布式事务提交时下发给主节点,由主节点进行二阶段提交,主节点保留分布式事务的状态和参与节点的信息,参与节点保留主节点的信息。分片节点根据各自的事务状态列表判断可见性,故障转移时,根据本地事务状态信息和节点信息恢复事务到故障点,决定未完成的事务是继续提交还是回滚。