
1.3.3 MySQL HeatWave
MySQL是最流行的开源数据库,在2021年8月的DB-Engines大排名中仅次于商用数据库Oracle,位居第二。MySQL是面向OLTP优化的数据库,支持不同种类的存储引擎。在MySQL HeatWave发布之前,其中和内存相关的存储引擎包括MEMORY和NDB Cluster。MEMORY存储引擎可以将整个表的数据置入内存中,提供快速低延时的访问。但由于其不提供持久化,数据在硬件异常或数据库重启时会丢失,因此只适合于存放以读取为主、临时访问的非关键数据,如缓存或会话管理数据。和MEMORY一样,NDB Cluster也是内存数据库引擎,通过定期磁盘检查点支持数据的持久化,提供更好的事务支持和可扩展性。
如果要对MySQL中的数据进行分析,通常需要定义复杂的业务逻辑将MySQL中的数据抽取到专门的分析型数据仓库。其中涉及数据传输的安全保障问题、数据实时性和增量抽取的问题,以及维护多个系统的管理开销和成本。2020年4月,Oracle在公有云上发布了MySQL数据库服务,紧接着在年底又推出了配套的MySQL分析型引擎,2021年1月正式更名为MySQL HeatWave。
MySQL HeatWave是基于内存的分析型引擎,由一个MySQL数据库服务和多个分析节点组成。HeatWave安装于MySQL数据库服务器节点,负责集群管理,加载数据到HeatWave节点的内存中,查询调度和查询执行。HeatWave支持所有的MySQL语法,因此现有使用标准ODBC/JDBC连接器的应用和分析工具均可不加改变地使用。HeatWave使得MySQL可以同时支持交易型和分析型负载,MySQL自动根据工作负载的特征将查询转发到OLTP引擎或分析型引擎。
需要分析型处理的数据以内存列格式存放于HeatWave节点的内存中,节点的数量取决于需要分析的数据量和内存压缩比。HeatWave分析集群最少为两个节点,最多可扩展到64个节点,节点类型支持虚拟机和物理机。单个虚拟机节点配置为16 CPU核和512GB内存,可以存放约400GB数据。10TB以上数据建议采用物理机节点,单个物理机节点配置为128CPU核和2TB内存。
分析型数据在整个HeatWave节点中进行分区,在分区内部可以结合多核和SIMD向量处理,整体架构提供良好的可扩展性。HeatWave集群中的每个节点,节点中每一个CPU核都支持对分区的数据进行并行处理,包括扫描、过滤、联结、聚合等操作。HeatWave集群可在线添加和减少节点,但由于数据是在所有节点中进行分布的,因此集群伸缩后需要重新加载数据以重新分布。
利用HeatWave实现MySQL分析型负载处理的典型流程如下。
(1)确定需要加载到HeatWave中的表。分析型查询涉及的表只有加载到HeatWave中后,相应的处理才能卸载到HeatWave中进行处理。
(2)指定需要加载到HeatWave中的列。可以排除不支持的数据类型以及查询不涉及的列,如注释列。
(3)选择列的压缩类型。对于字符串列支持变长压缩(VARLEN)和字典压缩(DICTIONARY)。变长压缩支持联结操作、字符串函数和LIKE谓词。如果不需要支持这些操作并且列中的唯一值较少,可以选择字典压缩。
(4)定义数据分布键。默认情况下,表中的数据按主键水平分布到所有HeatWave节点。如果其不能达到性能预期,也可以自定义数据分布键,如常用查询中的联结键和分组键。
(5)指定分析型引擎。MySQL数据库服务使用InnoDB作为主引擎,对于需要加载到HeatWave中的表,还需指定分析型引擎,即RAPID引擎。
(6)加载数据到HeatWave集群。加载完成后,在MySQL数据库服务中的数据更改自动复制到HeatWave。复制每200ms或当变化数据积累超过64MB时进行一次。
(7)当需要分析的数据变化时,按需增减HeatWave节点的数量。扩展或减少节点的操作是在线进行的,完成后需重新加载需要分析的数据。
目前的MySQL HeatWave数据库系统只能在Oracle公有云(OCI)上提供,并且其中的MySQL数据库只能是独立数据库。MySQL数据库服务在2020年12月支持入站复制,可以将应用场景扩展到本地或集群MySQL数据库,如图1-5所示。本地数据库可以是独立MySQL数据库,或MySQL NDB Cluster。源端的集群数据库也可以是建立在Oracle公有云上的MySQL HA数据库系统。

图1-5 MySQL HeatWave应用场景
MySQL HeatWave是一项比较新的服务,功能也在不断完善中。2021年8月10日,MySQL HeatWave同时发布了两项新功能:横向扩展数据管理和MySQL Autopilot。
横向扩展数据管理为HeatWave新增了对象存储持久化层,以列格式保持同步到HeatWave中的数据。这既可以保证一致和更快速的恢复速度,也可以在HeatWave集群中节点失效时利用其进行恢复。
MySQL Autopilot利用机器学习实现了配置、数据加载、查询执行和故障处理等多项重要任务的自动化。MySQL Autopilot包括以下4类自动化功能。
(1)系统自动设置。通过对需要加载到HeatWave中的表进行采样估算HeatWave节点的数量,避免了人工估算的不准确和反复调整。
(2)数据加载。可以提供3种功能,①自动并行加载:自动生成脚本并使用最佳并行度来加载数据到HeatWave;②自动数据放置:推荐分区键以实现最佳数据分布和查询性能;③自动编码:为列推荐最适合的编码方式,以保证查询性能和节省存储空间。
(3)查询执行。可以提供4种功能,①自动查询计划改进:利用历史查询的统计信息优化未来查询的执行计划;②自动查询时间估计:在查询运行之前预测查询执行时间;③自动更改传播:自动确定数据变化传播到横向扩展数据管理层的最佳时间;④自动调度:通过队列中各查询预估运行时长自动调度,实现总体等待时间最短。
(4)错误处理。当HeatWave集群中的节点失效时,可以进行自动错误恢复,配置新节点并重新加载数据。