亚信自研分布式数据库AntDB落地某省电信的案例分享

整体介绍

某省电信大数据分析平台,需要对BSS的三户、订单、实例等近10TB级的数据进行快速分析统计,每次分析的数据量最高达到5亿级别,同时需要向其它厂商开放这种实时的数据分析能力,前期这种数据分析是通过大数据平台Hadoop+Hive的框架进行支撑,但这种框架存在几个不足:1)需要hive脚本将BSS的关系型数据导入到大数据平台的文件中2)需要用Hadoop体系非SQL的MapReduce脚本进行统计,在技术实现上不满足数据分析能力的快速开放,在性能上不能实时返回统计分析数据,在“去O”的大趋势下,却又带来了新的难题与挑战。该省电信开始考虑新的数据库Postgres来支撑这种实时分析的场景,同时采用开源的Postgres-XL数据库集群,但在实际落地的过程中出现性能瓶颈,扩展瓶颈。

在今年8月中旬,CTC PaaS团队向客户推荐使用公司的AntDB3.1产品代替开源的Postgres-XL,并于8月底完成8个节点的部署,8个节点部署8主8从,在整个部署过程中,也向客户展现了AntDB一键化Oracle/MySQL数据迁移工具、在线不停机扩容、主从切换的产品核心能力,AntDB上线后,稳定运行至今,解决了前期遇到的所有性能及技术难题,稳定性与性能大幅提升,得到客户的高度认可,客户也承诺将AntDB产品纳入该省电信企业级PaaS平台的组件,将8节点扩展成32节点,将AntDB这样优秀的数据库能力提供给更多的系统进行使用,更好的支撑该省电信IT化建设。

项目实践

部署架构

该项目采用share-nothing架构,由10台X86服务器组成,采用4C8D1GTM的组网架构。

GTM/Datanode/Adbmgr通过流复制协议,全部实现一主一从的高可用环境。

复杂场景优化

AntDB在某省电信落地过程中得到快速认可,基本上解决了客户95%的分析场景,性能也超过了客户的预期,但一些比较复杂业务场景没有达到客户的期望,AntDB团队成员积极分析场景的SQL,对AntDB的内核以及SQL的写法进行了持续的优化,研发并支持一序列针对性能优化的新功能。

  • 继承表支持并行扫描
  • 支持多种方式的表连接并行
  • 集群计划支持union all
  • 集群计划支持cte+union all组合
  • 支持小表在集群内广播
  • 内核级+SQL级优化方式,满足客户亿级多表关联分组查询,秒级返回结果的需求

最终性能优化明显,最高的性能提升了190倍。

AntDB 替换某省电信大数据平台的案例分享_数据库

注:场景说明见下表

AntDB 替换某省电信大数据平台的案例分享_SQL_02

下面重点分析一下业务场景1/3/5/7

场景1案例分享

场景说明

该案例并不针对具体的业务场景,是从数据库层面为90%的业务场景提升10倍性能。继承表类似于oracle的分区表,在可管理性、高性能等方面,都为应用程序带来极大的优势。在AntDB3.1版本之前,只支持普通表的parallel seq scan。然而,在真实的业务场景里,普通表都会设计为配置类小表或数据量极小的复制表,并行不会带来性能上的优势,甚至会降低执行效率。真实的业务场景,超大表都会设计为继承表。因此,继承表支持parallel seq scan功能,实际上已经是AntDB3.1新版本发布的一种标准的出厂指标。

优化措施

优化前性能瓶颈

优化措施

单进程顺序扫描继承表

多进程并行扫描继承表

从内核层代码改造,支持分布式数据库 继承表的parallel seq scan。

执行时间对比

数据量:5千万

单位:s

优化前

8

优化后

0.8

性能提升

10倍

案例分析

该SQL 选择Parallel Nested Loop Left Join并行嵌套循环的连接方式,而基表的数据量是1.2 亿,loop的开销非常高。AntDB研发团队在制定该SQL的优化措施时,决定将并行hashjoin纳入AntDB3.1版本中,以替代nestedloop,提升该场景下的性能。

优化措施

优化前性能瓶颈

优化措施

亿级数据量作为基表时,nestedloop开销非常高。

集群计划支持hashjoin,当大表之间进行连接时,优化器选择执行效率更高的hashjoin

从内核层代码改造,支持分布式数据库 hashjoin并行。

执行时间对比

数据量:2千万 * 6

单位:s

优化前

190

优化后

6

性能提升

30倍

场景5案例分享

场景说明

该场景是报表统计类SQL,用于统计多种业务在某一天的新装用户数,按省/地市分组统计,部分业务允许指定条件过滤后汇总输出。

效果如下:

AntDB 替换某省电信大数据平台的案例分享_mysql_03

案例分析

该SQL 使用了cte+union all语法,在AntDB3.1版本之前,对该语法的支持还不够全面,因此,在该场景下选择了效率较差的pgxc的执行计划。

AntDB研发团队在制定该SQL的优化措施时,决定将cte+union all纳入AntDB3.1版本的集群计划中,以替代pgxc的执行计划,来充分利用集群计划的并行优势。

优化措施

优化前性能瓶颈

优化措施

由于集群计划不支持cte+union all语法,优化器只能选择xc的执行计划,导致无法利用集群的parallel seq scan等并行能力。

集群计划支持cte+union all,集群计划选择parallel seq scan+parallel hash join方式,充分利用分布式数据库并行计算的能力。

从内核层代码改造,分布式数据库的集群计划支持 cte+union all。

执行时间对比

数据量:2千万 * 6

单位:s

优化前

150

优化后

3

性能提升

50倍

场景7案例分享

场景说明

该场景是报表统计类SQL,用于统计多种业务在某一天的新装用户数,按省/地市分组统计,并指定多种开关类分组条件后汇总输出。

案例分析

AntDB 替换某省电信大数据平台的案例分享_SQL_04

该SQL 在进行group by 分组汇聚时,使用了多个维度,且分组字段均选择text数据类型,导致优化器估算出的分组数太多,从而无法利用parallel能力,而选择了seqscan。

分析该SQL,红框内的字段应该是bool数据类型,然而业务在建模时,选择了text数据类型。如果改成bool类型,对优化器在进行估算分组总数、从而确定最优执行计划选择时,大有裨益:

bool类型只有两种结果

char(1)类型不超过256种结果

text类型分组结果无限大

在对这3个字段的表数据进行统计后,的确只有0和1 两种数据。最终和业务侧确认,将字段类型由text修改为bool后,该SQL执行效率从 原254秒 将至 1.5秒。

优化措施

优化前性能瓶颈

优化措施

业务侧表结构建模不严谨,没有结合实际情况选择合适的字段类型,导致在该场景下无法选择最优执行计划。

和业务侧确认,修改字段类型。

执行时间对比

数据量:2千万 * 6

单位:s

优化前

254

优化后

1.5

性能提升

169倍

AntDB内核参数优化

在产品落地,性能优化过程中,除了优化不同场景下的SQL,也对AntDB的内核的参数进行了优化,增强了AntDB的健壮性,同时也增强了执行的效率。

AntDB 替换某省电信大数据平台的案例分享_分布式数据库_05

结语

在去“O“及自主可控的大趋势下,AntDB数据库必将在更多的场景中得到更多的应用,当前AntDB更多地在数据分析统计的场景中展现它的魅力,鉴于AntDB的内核比Mysql更快更稳定,同时完美兼容Oracle语法,在中国电信集团研发中心主推基于Mysql的分布式数据库应用到核心业务系统的背景下,AntDB承载省级的核心业务数据是未来的努力目标。