作为企业级原生分布式数据库,OceanBase自创立以来一直坚持原生分布式的发展路线,其高兼容、金融级容灾和高可用、透明扩展、稳定安全等能力已经在金融、政府、运营商、互联网等各个行业得到了充分验证以及认可。去年6月,OceanBase发布定位为HTAP企业级数据库的里程碑3.1版本,支持不限大小的超大事务,引入向量化引擎、并行DML、复杂查询优化。3.2版本在持续增强诊断监控能力、安全性、兼容性等企业级功能的基础上,进一步完善向量化引擎,以万QphH
GB的性能成绩,创造TPC-H分析型基准测试新的世界纪录,目前排名第二。年4月18日,OceanBase3.2.3正式发布,该版本是3.x的第一个LTS(LongTermSupport)版本,也是HTAP能力的里程碑版本。
功能亮点及用户价值
一、增强HTAP能力
全面实现向量化引擎,支持所有基础算子向量化,复杂查询场景下带来数量级的性能飞跃,配合持续增强的优化器改写优化能力及大规模分布式并行执行引擎,使得该版本成为打造完整HTAP能力的一个重要里程碑,TPC-H性能相比OceanBase2.2.x提升10倍。
二、性能大幅提升
优化NestLoopJoin,性能提升1倍。支持多表关联SQL语句转化为NestLoopJoin执行计划,通过算子优化大幅提升多表关联性能。
提升TableAPI流式扫描性能,OceanBase3.2.3流式扫描性能达到HBase2.4.6的2.2倍。
提升CDC(OMS)数据传输性能,一个主键加一个非唯一键索引场景下全量迁移时间节省33%。经场景实测,在完全不影响业务的情况下,全量迁移速度可达到38万RPS(64GB内存、个并发)。
三、完善企业级功能
Oracle模式新增DBLink功能,支持用户通过DBLink访问Oracle的数据,满足用户Oracle迁移到OceanBase后跨实例访问远端数据库数据的需求。
MySQL模式引入Oracle模式的Sequence功能,相比MySQL的自增列,Sequence功能支持用户通过更加灵活的方式生成唯一序列值,并设置序列值生成方式,例如支持重设序列起点,支持循环取值,支持指定缓存大小等。值得一提是,该版本兼容了MySQL8.0的CTE(CommonTableExpression)和CHECK检查约束功能,支持用户通过CTE功能来模拟Oracle的CONNECTBY递归查询功能,提供CHECK约束功能便于用户对数据进行合法性校验。
四、加强诊断监控能力
存储过程支持GETDIAGNOSTICS诊断,可使用该功能获取SQL语句或者存储过程执行时的错误信息,帮助用户快速定位、排查解决问题。
OCP引入SQL画像和事务画像功能,用户可通过SQL画像、事务画像获取SQL执行时的统计信息、每个算子的资源消耗,事务持有资源和等待情况以及分布式和并行执行情况,帮助用户更快更准的定位SQL执行慢、事务卡住等问题。
五、增强企业级安全性
新增备份恢复完整性校验功能,帮助用户快速发现磁盘静默故障,最大限度避免因备份数据损坏导致无法用于应急恢复的风险。
ODC支持操作记录审计功能,自动记录所有的数据库变更操作,确保所有变更可审计、可回溯。
向量化引擎增强HTAP能力
复杂查询性能再升级
计划编译执行和向量化引擎,是近十几年数据库学术界提出的两种重要执行优化思路。前者在工业界以SingleStore(原MemSQL)为代表进行了初步探索。向量化引擎以MonetDB/X系统最早实践,因Vectorwise的大规模使用带来出色的性能表现,让业内看到这项技术巨大的性能价值和技术前景。此后,包括Oracle、SQLServer分别通过RowSets等方式实现了向量化执行引擎能力。
OceanBase3.2.3版本全面实现了向量化引擎,重新设计执行引擎核心数据结构,以Architecture-aware的设计改造全部算子和最常用的执行表达式,充分发掘现代CPU的Cache特性以及优化指令,并应用于TPC-H的benchmark中。向量化带来了大量的算法优化可能,通过在向量化的框架下进行算法和数据结构优化。相比非向量化执行引擎,实测整体执行性能性能提升5倍,部分算子和单场景可实现10倍以上性能提升。
向量化引擎可以在复杂查询场景下实现数量级的性能飞跃,配合持续增强的优化器改写优化能力及大规模分布式并行执行引擎,使得OceanBase3.2.3版本成为打造完整HTAP能力的一个重要里程碑,TPC-H性能相比OceanBase2.2.x提升1个数量级。
性能大幅优化
提升典型业务场景的处理能力
NestLoopJoin性能优化
NestLoopJoin是多表关联、索引回表等SQL语句背后的基础算子,OceanBase3.2.3针对单分区表和多分区表进行了深度优化,相比3.1.x版本,无论是并发QPS还是单查询耗时方面,提升均达到1倍左右。
场景一:50并发测试QPS,2张表各10万行数据,查询SQL对行数据进行关联。
场景二:单并发测试耗时(RT),右表有16个分区,每张表写入万行数据,关联查询20万行数据。
提升TableAPI流式扫描性能
在TableAPI顺序扫描OceanBase的典型场景下,当扫描的数据量比较大时,一次接口调用需要多次客户端和服务端的交互才能获取完整数据,这种扫描操作称为流式扫描。在整个交互过程中,服务端的事务以及迭代器状态等都需要持续保持。此前版本采用同步等待实现方式,工作线程记录了请求的上下文,服务端需要保持工作线程用于等待客户端发送下一个请求。在流式扫描并发量较大的情况下,可能会出现服务端还有处理能力,但是所有的工作线程都在等待,无法处理客户端请求的现象。
OceanBase3.2.3实现了异步化改造,将请求上下文与工作线程解耦。通过本次优化,流式扫描整体性能提升2倍以上,达到HBase2.4.6的2.2倍左右。
以下为模拟流式扫描测试场景,每次扫描涉及8次客户端与服务端交互。经测试,OceanBase的各版本以及HBase2.4.6的最大吞吐对比如下:
提升CDC(OMS)数据传输性能
在实际的数据迁移工作中,用户经常要面对表数据量较大的场景,当建表语句中包含索引创建时,整表的全量迁移会因为实时维护索引造成效率低下,需要耗费很长的时间才能完成迁移。
为了解决此问题,OceanBase3.2.3通过CDC(OMS)提供在全量数据加载完成后创建非唯一键索引的能力,借助CDC本身的调度能力,千万/亿级别的表整体迁移时间节省33%(测试环境单表具有一个主键和一个非唯一键索引情况下)。值得一提的是,单表非唯一索引越多的情况下,性能提升越明显。经客户现场环境测试,OMS在不影响业务的情况下全量迁移速度可以达到38万RPS(64GB内存、个并发),帮助用户轻松应对百TB级别的数据库的迁移任务。
面向B端客户完善企业级功能
打造更好用的数据库
Oracle模式:支持数据库链接到Oracle(DBLink)
在企业实际业务中,Oracle迁移到OceanBase过程中用户通常会出现数据已经迁移到OceanBase,但还有少部分数据留在Oracle数据库的情况,需要通过类似DBlink的方式跨实例访问远端数据库的数据。
为了更好地满足用户诉求,OceanBase3.2.3版本新增了DBLink功能,通过分布式数据库的跨数据源访问的能力,帮助用户以访问本地数据库的方式访问远端数据库,并且支持跨数据源的分布式事务能力。在SQL查询执行过程中采用动态链接OCI驱动以只读的方式链接到Oracle数据库,通过将Oracle数据库的访问操作内嵌到OceanBase的算子执行,大幅降低业务系统多数据源访问的设计复杂度。目前已支持DBlink到Oracle数据库的分布式读事务能力,分布式事务写能力将在后续版本持续迭代完善。
MySQL模式:支持Sequence对象
作为Oracle业务系统里被高频使用的数据库对象,Sequence(序列)可以按照一定的规则自动生成唯一序列值,通过修改序列的属性,可以让这组值递增、递减、循环。
年开始,OceanBase提供Oracle模式下Sequence对象的支持。随着一些DB2、Oracle业务迁入OceanBaseMySQL模式,OceanBase3.2.3在MySQL语法模式下正式引入了Sequence支持。相对于自增列(auto_increment),用户可以对生成序列值的方式有更灵活的控制,如Sequence支持指定缓存大小、支持循环取值、支持重设起点等。
值得注意的是,Sequence非常适用于对“递增”没有强需求,仅需要生成唯一值的场景。可以尝试在合理的前提下设置较大Sequence的缓存(例如万),此时Sequence的取值将会在各个服务器实例的本地缓存完成以提供卓越性能。
MySQL模式:兼容8.0的CTE
CommonTableExpressions(下文简称CTE)是指在一条查询语句中可以定义一个临时结果集,或者可以理解为一个临时视图,该视图仅在这条查询中有效,可以被多次引用。一条查询中可以定义多个临时视图,后定义的视图可以引用先定义的视图。
CTE功能常用于定义临时视图,这类视图一般存在以下几个特点:1)不是通用视图,仅在这条查询中会被使用;2)有一定复杂性或在查询中被多次引用。除此之外,CTE还常常被当成CONNECTBY嵌套查询的替代方案。CONNECTBY是Oracle中一个常用功能,在MySQL中并不支持。一个简单的CONNECTBY示例如下:
EMPLOYEE表中记录了一个公司的员工信息,MANAGER_ID表示每个员工的管理者的ID。这条CONNECTBY语句展示了ID等于1的员工的所有直接和间接下属,可以将CONNECTBY的结果理解为树状结构,满足STARTWITH条件的数据是树的根节点,CONNECTBY子句定义了父子结点间的关系,这个例子中要求父结点的ID和子结点的MANAGER_ID相等。LEVEL表示结点的深度,即处于树中的第几层。
和上述CONNECTBY语句等价的CTE语句如下:
MySQL模式:兼容8.0的CHECK约束
数据库中CHECK约束的作用是,通过一个布尔表达式限制表中某些列中可接受的值来保证表中数据的合法性。每次在表中插入或更新数据时,会对表中CHECK约束的布尔表达式进行计算,如果新行的值在该表达式中计算的结果为FALSE,则违反CHECK约束,此时数据库会拒绝新行的数据变更操作。
MySQL在8.0.16版本之前,允许使用创建CHECK约束的语句,但是语法解析时会忽略CHECK约束部分。从8.0.16版本开始支持了完整的功能。
OceanBase在3.2.3版本之前MySQL模式下允许使用创建CHECK约束的语句,但和低版本MySQL类似仅被用来进行分区裁剪优化,不会让所创建的CHECK约束真正生效。从OceanBase3.2.3版本开始,支持完整的CHECK功能,用户可以在CREATE/ALTER/DROPTABLE语句中创建、修改、销毁CHECK约束。
增强诊断监控能力
让运维更简单
支持GETDIAGNOSTICS诊断
在使用SQL或者PL的过程中遇到错误时,用户需要快速诊断具体发生了什么错误,以方便定位、排查和解决问题。OceanBaseMySQL模式实现了GetDiagnostics的功能,该功能用于获取错误信息,与诊断区域中的内容相关。GetDiagnostics主要用于展示SQL命令执行之后产生的一些错误信息和其他的反馈信息。
SQL画像和事务画像
大型企业系统的SQL往往比较复杂,变化频繁,且可能因为运行中的数据变化或者数据库版本升级等因素变坏。因此,把专业的SQL诊断能力变成产品,对于IO密集的大型数据库系统尤为重要。OceanBase通过OCP的SQL诊断模块,从诊断-优化建议-调优应急角度,全面的监控分析线上的运行SQL。首先,通过可疑SQL,TOPSQL,SLOWSQL和并行SQL模块发现有问题的或者需要优化的SQL。其次,通过SQLturningadvisor工具提出优化建议,包括索引绑定推荐、最优索引创建推荐、历史执行计划推荐、SQL限流推荐、租户CPU扩容推荐等;最后,执行调优应急操作,例如绑定推荐索引、快速关闭存在问题的会话,对访问的SQL进行限流等。
OceanBase3.2.3版本通过OCP引入SQL画像和事务诊断功能。其中,SQL画像展示的信息包括:SQL执行统计信息、资源消耗、算子/步骤的运行耗时、分布式查询、并行查询涉及多节点的运行情况等待相关信息。除SQL画像展示SQL基本信息之外,OCP还提供事务画像展示SQL所在事务持有的资源和时间,以及该事务阻塞的其他事务状态(包含分布式事务)。用户可以通过SQL画像和事务画像分析SQL事务耗时或者耗资源的具体原因,从而快速定位SQL执行慢、事务卡住等问题的根因。
新增备份校验和变更操作审计
提升数据库的安全性
备份文件完整性校验
数据备份和日志备份是提升用户数据安全的重要辅助手段,当备份介质出现磁盘静默错误等故障时,通常会导致备份数据损坏无法用于后续的应急恢复。
新版本支持备份恢复完整性校验功能,利用数据备份和日志归档文件中记录的校验和(checksum)来提前发现数据损坏的情况。该功能实现的难点在于需要充分利用OceanBase的分布式计算能力,将备份校验任务分发到所有OBServer工作节点。通过其内置的分布式调度能力,以分区组为粒度将校验任务批量发送给OBServer,帮助用户快速发现磁盘静默错误。用户可以通过CDB_OB_BACKUP_VALIDATION_JOB_HISTORY来查看本次数据校验的结果,如果出现磁盘静默错误,将会在RESULT字段上观察到相应的错误码。
变更操作审计
ODC公共连接只读权限用户被禁止执行数据库操作(DDL/DML),为保障数据库变更过程的安全,管理员可在ODC公共资源管控台任务流程内配置审批流,如定义风险等级数、选择任务子类、指定变更的SQL数量范围和设置审批节点等。管理员配置审批流后,被分配相关只读权限的用户可在任务中心创建模拟数据/导入/导出/数据库变更等任务,并在创建任务后根据所创建的任务类型来匹配对应的审批流程进行审批。OceanBase3.2.3版本引入变更操作审计功能,自动记录所有的数据库变更操作,真正做到所有变更可审计、可回溯。
OceanBase3.2.3作为3.x的LTS版本,是完整HTAP能力的一个重要里程碑。该版本全面实现了向量化引擎,进一步提升性能,完善诊断监控、安全性、兼容性等企业级功能。在版本研发过程中,OceanBase借鉴了部分来自Oracle数据库的优秀设计理念,结合OceanBase开源社区的用户反馈,在此向经典数据库的探索者和社区用户致以崇高的敬意。