体验另类“MySQL”的极致性能

  • 2020 年 2 月 25 日
  • 筆記

AnalyticDB,是阿里云推出的一款数据库产品,主打海量实时数据分析领域。说其是另类“MySQL”,是因为其兼容MySQL生态,可以像MySQL一样去使用,非常简洁方便。不久前,其还推出单机版规格,颇为惊艳,可以说把大数据的门槛大大降低了。正如上图所表现的,"大数据"这头大象也可以敏捷奔跑起来。假期无事,特针对AnalyticDB新推出的单机版与MySQL,在规模数据下的查询表现做了个对比分析。

《敏捷大数据》的时代到来

曾几何时,大数据的概念非常火热。但我们这里要看到,这里的大数据通常代表两层含义,一是所谓符合4V标准的数据;二是随之诞生的一些适合处理前者问题的技术。随着近些年来,数据在企业中扮演者越来越重要的地位,之前常见的一些“中小”数据,也逐步变成了大数据。此外,随着数字化浪潮的发展,数据在企业经营决策中扮演着愈发重要的地位,随之而来对数据计算的需求也越来越强烈。而之前谈到的大数据技术,并没有很好地跟上现实需求,其较高的技术门槛、离散的技术生态、非传统的使用方式都阻碍了快速普及。AnalyticDB的推出,正是看中了这一问题,以近似传统的使用方式,来处理现在面临的海量、实时类数据问题。进而,也提出了“敏捷大数据”的理念,摒弃传统大数据技术的繁复冗赘,而倡导以一种更加简洁的方式来使用数据。

1. 背景介绍:数据库新兵“ADB”

分析型数据库MySQL版(AnalyticDB for MySQL)是云端托管的PB级高并发实时数据仓库,是专注于服务OLAP领域的数据仓库。在数据存储模型上,采用关系模型进行数据存储,可以使用SQL进行自由灵活的计算分析,无需预先建模。利用云端的无缝伸缩能力,分析型数据库MySQL版在处理百亿条甚至更多量级的数据时真正实现毫秒级计算。其特点包括:

  • 极致性能 分析型数据库MySQL版运用新一代超大规模的MPP+DAG融合引擎,采用行列混存技术、自动索引、智能优化器等技术。针对复杂SQL查询速度相比传统的关系型数据库快10倍以上。此外,其采用的分布式架构可快速扩容至数千节点的超大规模,进一步提升速度。
  • 灵活部署 分析型数据库MySQL版,采用存储和计算分离架构,可根据需要调整节点数量和动态升降配实例规格。既可实现Scale Up,也可以实现Scale Out。方便用户根据自身情况进行选择。
  • 简单易用 分析型数据库MySQL版,全面兼容MySQL协议和SQL:2003,可很方便的融入MySQL生态体系。通过标准SQL和常用BI、ETL工具平台,可轻松使用分析型数据库MySQL版。
  • 海量规模 分析型数据库MySQL版是全分布式结构,无任何单点设计。整体系统可通过横向扩容来大幅度扩大存储规模及提升查询SQL性能和并发处理能力。其可实现数千节点,PB级规模的体量。

单机版介绍

AnalyticDB for MySQL单机版,于2019年12月底推出。其目的是大幅降低企业用户使用大数据的成本,可方便用户快速享受到数据实时分析所带来的技术红利。其推出的多种规格,可满足中小规模用户的数据分析需求。其核心特点如下:

  • 门槛降低 用户仅需之前约50%的成本,即可使用AnalyticDB。这将大大降低用户的成本投入。无论是小白用户入门大数据,还是既有用户新增测试、开发环境都是不错的选择。
  • 极速性能 在应对复杂SQL场景下,单机版虽较集群版性能有所降低,但其综合性能仍可达开源MySQL 10倍以上。特别适合于针对MySQL只读查询压力大的情况,可快速根治释放压力。
  • 使用灵活 用户可根据需要,随时选择使用更为强大的集群版,减少用户的前期投入。阿里云也将随后推出平滑迁移方案。
  • 免运维优化 AnalyticDB,采用开箱即用策略,免运维、免优化。可快速享受到极速性能所带来的红利。

2. 测试概述:ADB vs MySQL

1). 环境说明

  • SSD云盘IOPS在25000,高效云盘为5000。
  • RDS和ADB均为阿里云同地域的提供的默认配置。

2). 样本说明

测试样本采用常见的人力资源模型,数据采用了人工构造方式。

  • 数据结构 原生结构如下,ADB由于是分布式结构,需要定义分布键(使用了主键)。此外,MySQL后续做了结构优化,添加了部分索引。后续测试分两组对比。
  • 规模

3). 测试集说明

根据SQL特点,将其归纳为十个大类。每类抽象出有代表性的若干语句,作为测试语句。

4). 测试方法

  • 数据加载 使用原生MySQL的默认处理,insert into … values(),()方式插入。
  • 前置操作 插入后,进行了analyze table操作。
  • 测试操作 使用自定义脚本,进行多轮查询测试,并记录SQL执行时长。
  • 测试数据
    1. 为避免大数据传输影响,执行结果使用聚合操作后返回,部分结果会存在下推影响结果的情况。对MySQL和ADB影响一样。
    2. 所有测试,均进行三组,取执行时长的平均值。
    3. 所有数据的默认单位为毫秒(ms)。
  • 测试说明
    1. 单机版规格,性能较集群版有一定差距,且无法进行性能扩展。只能在有限程度做ScaleUp,因此对性能要求较高的用户,建议使用集群版。
    2. 由于ADB采用的分布式架构,集群内组件较多。在单机环境内部署完整环境,自身资源消耗比例较大。本组测试,只是为了对比同等资源下的MySQL与ADB的性能表现,对ADB而言远非最佳实践。
    3. 单机版规格后端使用高效云盘,其IO性能较SSD云盘差异巨大,这点也对测试结果造成较大影响。如考虑高性能,还是建议使用集群版(其后端为SSD云盘)。
    4. 针对MySQL的测试,使用了原始状态和优化后,分别进行了测试。5000万规模,因执行时间过长未进行MySQL原始状态的测试。ADB全程未经任何调优,为默认安装后的状态。

3. 测试结果:ADB vs MySQL

1). 结果概览

对比数据为MySQL/ADB,数字小于1,表示前者优于后者;数字大于1,表示后者优于前者。数据越大,差距越明显。图中灰色部分表示MySQL优于ADB的部分。

2). 分项说明

  • 简单查询

对于此类查询,基本不需要优化器更多优化,就是比拼数据提取的能力。ADB采用分片机制,类似于MySQL的“分库分表”,并行提取数据。

  • 排序

此部分,优化前后差异较大。上图为MySQL未优化的情况,理所当然使用了”Using filesort”,性能很差。在优化后,通过加入索引这一有序结构,可以大幅降低排序成本,性能良好。ADB是分布式架构,需要汇总后排序;而单机版受限架构,无法利用多物理节点的能力,表现一般。

  • 过滤

这一情况类似“简单查询”。在提取数据后,多一步CPU计算过滤过程,这一点单机版的ADB也没有太多优势。这里面比较特殊的是binary比较,引入后使用全表扫描,即使增加索引也效果有限。但ADB则表现优异,猜想是与其列式存储等因素有关。

  • 模糊查询

这一类查询,ADB有压倒性的优势。因与其列式存储等因素有关。

  • 逻辑条件 同"简单查询"。
  • 统计

这一组,也是ADB大优。原理就在于分布式架构与单体架构,及行式与列式存储的差异。

  • 分组

ADB胜出,原理同上组。

  • 关联

关联部分,ADB使用分布式架构,需要有分片间的数据交换等步骤,并最终使用Hash Join完成。而MySQL依托于索引有序结构,可使用Block Nested Loop快速获得数据。8.0的Hash Join也许对大表间的关联更有优势。

  • 集合

这一组也是ADB胜出,原因还是出于其分布式架构所致。

  • 其他

对于分页类的操作,在有索引的有序结构下,MySQL表现不错。ADB中规中矩。

4. 测试总结:ADB vs MySQL

一轮测试下来,对ADB有了更多的了解认识。作为新兴的数据库,对于实时分析类场景,这一产品颇有其特点。此外,其兼容MySQL生态,也很有吸引力,客户的大量软件资产,可以平滑迁移。在架构上,甚至可作为MySQL的从库存在,将复杂类的查询需求迁移上去,减轻主备库压力。可做到一套代码,适用多种场景。这远比之前那种消费到大数据平台,然后异步查询来的优雅。最后,总结下AnalyticDB的适用场景,及与MySQL、大数据平台的对比。(星号部分为计划发展中)