虽说近些年来,从国内数据库市场来看,Oracle是有些势衰;但从全球角度来说,其霸主地位依然不可撼动。其技术的演讲变化,仍然对行业数据库发展有着颇大的指导引领意义。下面是我对其近三年来发布的新特性加以盘点,进而洞察行业变化,挖掘技术趋势。材料部分内容引用自盖总的《Oracle新特性》系列文章,感谢!
1. 数据库智能管理 — “自治”
Oracle最早在2017年提出了自治的概念,其提出并倡导的”Autonomous Database,100% Self-Driving”理念开创了数据库智能管理之先河。其公开的新特性包含以下内容:
自动化索引创建与管理
索引是查询加速的重要优化手段,如何创建、管理索引,长期以来是DBA的一项繁重工作。从Oracle 19c开始,自动化索引创建和实施技术被引入进来。Oracle预置的专家系统,通过捕获、识别、验证、决策、在线验证、监控的全流程管控索引自动化的过程。这一特性将会自动帮助用户创建有效的索引,并通过提前验证确保其性能和有效性,并且在实施之后进行监控,这一特效将极大缓解数据库索引维护工作。此外,其还支持删除长时间未使用的索引。
内存对象管理
Oracle的内存管理,经历了数代的发展。从早期的各组件分别控制、到SGA、PGA分别控制、再到MEM整体的全局控制。如何满足不同负载情况下内存的管理要求,如何更精细地管理内存,成为Oracle内存管理重点。特别随着12c引入了列式内存结构,内部管理更加复杂。Oracle正通过内置的机器学习算法自动实现内存管理,减少人为干预。例如,自动压缩较少访问的内存列数据等等。
解读
数据库智能管理,是近些年来很火的一个课题。特别是,随着AI技术的逐步成熟,如何利用人工智能更好的管理数据库,减少人为干预管理的工作量成为热点。
不仅在大型商业数据库如此,开源数据库也有不少实践。以2017年马逊和卡内基梅隆大学一起开发的一套名“OtterTune”的机器学习自动化调整DBMS的系统为代表。国内BAT等大厂也有很多在智能管理上的实践。例如通过参数调整节省内存,进而减低整体成本。
智能管理,在云数据库方面,有着更为重要的意义。作为一种“开箱即用”的产品,如何减低用户对云数据库使用门槛,是各家着力去解决的问题。例如阿里的CloudDBA、腾讯的DBbrain等,这些附加在数据内核之外的产品,正通过增值的周边生态服务,吸引用户,增加自身竞争力。
2. 数据库架构能力 — “灵活”
Oracle的架构能力,我认为一直以来是比较薄弱的。这与其原来的产品理念有关。随着开源数据库(特别是MySQL)的大热,其灵活多变的架构方式,满足了客户的多种需求。Oracle也尝试在这方面有所改进。
分片(Sharding)
Oracle在12c中推出了分片的概念,其提出了“表家族”的概念。表家族中的所有Sharded table都按照相同的sharding key(主键)来分片。在19c中,进一步增强了此功能,允许存在多个表家族。此外,Oracle还提供了跨地域和混合云的的自动Sharding能力。
读写分离
在读写分离方面,Oracle 19c中支持自动重定向备库DML。在使用ADG作为备库进行读写分离部署时,可能因为应用的原因,会有偶然的DML操作发送到备库上。通过这一特性,ADG会话的ACID一致性得以保持,同时透明的支持“多数读,偶尔更新”应用的自然读写分离配置。这个特性的引入,将进一步的增加ADG的灵活性,帮助用户将备库应用的更加充分。
解读
数据库的架构是否灵活,满足用户的各异需求,对数据库产品来说很重要。早前的一些做法,更多是通过”中间件+数据库”的配合来完成。但现在的趋势是更多在数据库端解决,或者向上包住一层,给客户整体化解决方案的感觉。
对于分片、读写分离等问题,很多厂商正试图引入AI技术,自动化处理,减少客户干预。让产品内部足够灵活,对外提供统一访问方式,减少客户对产品的细节了解,降低使用门槛。
3. 数据一致性
数据一致性,是数据库最为核心的能力要求之一。看看Oracle近几年都做了哪些改进。
增强同步
在ADG中支持对Nologging数据的复制同步。
多实例并行重做日志应用增强
在Oracle Data Guard环境中,备库的日志应用速度一直是一个重要挑战,如果备库不能够及时跟上主库的步调,则可能影响备库的使用。自Oracle 12.2版本开始,支持多实例并行应用,这极大加快了恢复进度;在18c中,开始支持In-Memory列式存储;在19c中,并行应用开始支持In-Memory列式存储。
增加数据检查函数checksum
在20c中,Oracle增加了CHECKSUM函数,用于检测数据的完整性。
解读
数据一致性要求,是对数据库的基本要求,但也是颇有难度的挑战。例如MySQL的数据一致性,一直是个绕不过去的梗。解决这一问题取巧的方式,是通过底层存储同步或如云原生的那般处理。
从原理上看,数据保存一份,是最完美的一致性。随着HTAP技术的成熟、数据库承载能力的提升,对数据一致性的要求,是可能通过一体式方案在一定程度上解决的。
4. 业务连续性 — SLA
如何保证数据库的可用性,保证变更时不影响业务,是数据库能够承载核心业务的重要标志。Oracle无疑在这方面走在各家的前面。
透明的应用连续性支持增强
在Oracle RAC集群中,支持对于查询的自动切换。当一个节点失效,转移到另外一个节点,在19c中Oracle持续改进和增强了连续性保持,数据库会自动记录会话状态,捕获用于重演的信息,以便在切换时,在新节点自动恢复事务,使DML事务同样可以获得连续性支持。
在线维护操作增强
在不同版本中, Oracle 持续增强在线维护操作, 例如在12.2 开始支持的Online Move、在线修改普通表为分区表等特性。在19c中,持续增强了智能的、细粒度的游标失效控制,将DDL操作对于游标失效的影响降至最低等等。
编译游标增强
第一个看到需要重新编译SQL游标的会话(例如,由于新的优化器统计信息)执行重新编译。其他会话继续使用旧的SQL游标,直到编译完成避免因重新编译而导致大量会话停顿。
零影响的计划停机维护
在20c中,对于计划停机维护或者滚动升级等,Oracle通过Smart DRM等特性以实现对应用的零影响。对于维护操作,数据库可以在实例关闭前进行动态的资源重分配,这一特性被称为Smart DRM,通过GRD的动态资源重组织,重新选出的Master节点不需要进行任何的恢复和维护,对于应用做到了完全无感知、无影响。
备库的Result Cache支持
在Oracle12.2和18c中,已经实现了ADG的会话连接保持和Buffer Cache保持;在20c中,Result Cache在备库上进一步得以保留,以确保这个细节特性的主备性能通过。在做切换时,可尽快承载起业务。
解读
对于业务可用性来说,Oracle的确做到的前面。不仅仅在实例级别、会话级别实现连续可用,Oracle在方方面面为连续可用做了大量工作,来保证对业务的平滑体验。
分布式数据库,在处理上述问题时有其天然的优势,特别是无master的模式。配合上前端的接入层,已经可以实现较为完美的平滑体验。
5. 混合负载 — HTAP
混合负载类型,是未来数据库发展的重要方向之一。Oracle这方面的重点投入就是引入了”in-memory选件”,并尽量使其完美内置,对用户无感。
In-memory
In-Memory技术引入之后,为Oracle数据库带来了基于内存的列式存储能力,支持OLTP和OLAP混合的计算。在20c 中, Oracle 支持了自主的In-Memory 管理, DBA将不再需要人工指定将哪些数据表放置在内存中,数据库将自动判断需要将哪些对象加入或驱逐出In-Memory的列式存储中。
解读
HTAP,看起来是很美好,但实现起来难度很大。其核心还是要将数据按场景做多份存储,由不同的计算引擎来处理。Oracle的in-memory如此,TiDB的TiFlash亦如此。混合负载类型的难点在于,数据同步、资源隔离等。目前各大厂也都纷纷提出了HTAP的方案,至于解决如何还需拭目以待。
6. 性能加速 — Fast
追求更高的性能,是各数据库一直以来的追求。这方面场景有几类做法:
硬件上的提升,例如引入更快的存储、网络设备。
存储模式的变化,例如引入列存满足特定场景、引入LSM结构由同步改异步等。
算法的改进,例如提供bloom filter提升过滤效率;提供近似计算,在精度要求不高的情况下,提供更大的性能。
解读
关系模型,对于性能有其天然的短板。在维护一个复杂功能上,其性能必然有所损失,这也是很多nosql或特定场景数据库(如时序)的特长所在。
分布式数据库,性能方面尤其值得注意,在跨网络条件下,其性能表现一般较单机数据库还是有所差距。
这里需要区分下,吞吐量<>高性能。在很大程度上,数据库的吞吐量指标更有价值。极致性能,只在某些特定场景才有需求。
7. 数据分层、虚拟化、生命周期
数据分层
Oracle在12c中引入了数据生命周期的概念。其通过对数据使用的监控,实现了一定程度上的数据分层,最大程度利用资源。
外部表(in-memory,inline)
外部表的引入,使得Oracle对外部数据操作更加灵活,并且基于内存列式存储压缩,能够更快的支持大数据量的运算,对于数据仓库环境将会是极大的增强。而Inline外部表,可以通过SQL直接调用,无需创建仅需一次使用的外部表,这使得开发灵活了很多,也减少了大量元数据的处理。
混合分区表支持
在19c中,Oracle增强了分区特性,可以将外部对象存储上的文件,以外部表的方式链接到分区中,形成混合分区表,借助这个特性,Oracle将数据库内外整合打通,冷数据可以剥离到外部存储,热数据在数据库中在线存储。
解读
个人认为,这是Oracle做到比较强的方面。其凭借多年的积累,对数据使用特征的掌握,可以做到数据全生命周期管理。这一点有些平台也是通过外部表方式支持,但其使用体验及顺滑度,较Oracle还是有所差距。
这方面是数据库的未来发展重点。在用户已经满足了基本的存储、计算能力后,如何更好地使用数据成为重点。分层、虚拟化等技术,可以更好地降低用户成本,提升数据利用率。
8. 易用性 — 使用方便
使用Oracle的DBA,都有种感觉,就是Oracle太方便了。的确是,Oracle在易用性方面做了大量的工作。
分析视图
12c引入的分析视图,实现了将底层各种数据对接,在提供给简化SQL访问,最终输出给应用,将复杂性通过分析视图遮蔽。
多维表达式
多维表达式查询支持。
多态表
支持自描述,全动态SQL。是ANSI 2016标准的一部分。
SQL宏
宏的作用在于让SQL获得进一步的概括和抽象能力,允许开发者将复杂的处理逻辑通过宏进行定义,然后在后续程序处理中可以反复引用这一定义。
SQL扩展
在Oracle 20c中,关于SQL的函数扩展很多,包括对于ANSI 2011标准的部分支持,进一步的提升了SQL的处理能力。
解读
这一方面,国产数据库或开源数据库还任重而道远。Oracle的易用,也成为很多去O项目的核心难点。这也是很多国内数据库一直致力于Oracle兼容性工作的初衷。
9. 优化器 — 更加智能
统计信息近实时刷新。
随着表数据的变化,优化器表数据统计数据将近实时刷新,以防止次优执行计划。统计的在线维护内置于直接路径加载操作中当数据显着变化时运行自动统计信息收集作业。例如,自上次收集统计信息以来,表中超过10%的行被添加/更改。
执行计划自动管理
在19c中,数据库缺省的就会启用对于所有可重用SQL的执行计划捕获,然后进行自动的执行计划评估,评估可以针对AWR中的TOP SQL、SGA、STS中的SQL进行。如果被评估的执行计划优于当前执行计划(一般是要有效率 50%以上的提升),会被加入到执行计划基线库中,作为后续的执行选择,而不佳的执行计划则会被标记为不可接受。有了这个特性,SQL执行计划的稳定性将更进一步。
SQL增强
在19c中,SQL 功能获得了进一步的增强,这其中包括对于COUNT DISTINCT的进一步优化,在12c中引入的近似 Distinct操作已经可以为特定SQL带来极大性能提升,现在基于位图的COUNT DISTINCT操作继续为查询加速。
解读
优化器方面,一直是Oracle最令人称道的地方。这一点,还需要国内厂商奋起直追。
优化器后续发展方向是更加智能地管理SQL,减少执行抖动的情况。
10. 软硬件结合
近些年来,新兴硬件的出现对数据库的发展影响很大。如何利用好这些硬件,甚至从底层架构去适配这些硬件,是后续的发展重点。
基于NVRAM的多级缓存增强
在数据库中NVRAM又被作为一级高性能缓存用于加速数据库,这是非常强大的软硬结合优化。这一特性应该率先被用于Exadata环境,Exadata将NVRAM放置在了Flash Memory前面,计算节点可以通过RDMA协议,绕过软件栈,实现高性能的访问,较传统协议路径提速20倍。NVRAM用作Cache和作为直接存储使用,综合能力提升了10倍。
持久化内存存储支持
自Oracle 19c开始,Oracle就已经开始修改程序以更好的配合持久化内存,提升数据库性能。在20c中,Oracle明确支持了持久化内存 - Persistent Memory,虽然目前发布的信息是在Exadata中支持,但是软件的提升是通过的,在各类一体机中,或者是传统架构中使用持久化内存是毫无障碍的。持久化内存的引入,让Oracle的存储多达6级:SATA、SAS、SSD、Flash、PMEM、RAM,冷热数据分离,分层存储,可以进行更加精细化的架构设计。整体架构提供小于19个微秒的IO延时。
100Gb以太网和RoCE
在Oracle新发布的Exadata X8M一体机中,100Gb的以太网和RoCE获得支持,这是第一次在Oracle一体机中引入了基于RoCE的架构;存储服务器上,通过PMEM在Flash之前进行加速,RoCE和PMEM提供了极速性能。
11. 多模支持
原生的区块链支持
随着区块链技术的不断成熟和发展,Oracle在其多模的数据库支持中,引入了原生的区块链表支持。区块链表使客户可以在需要高度防篡改的数据管理,而又无需在多个组织中分布分类帐或依靠分散的信任模型时使用Oracle数据库。为了遵循区块链的可信和安全机制,区块链表只能INSERT记录,而不能修改,同时链可以被多方参与者验证。区块链表,可以和其他常规表进行关联,进行事务处理或者查询。
地理信息与全文检索
针对Oracle数据库内置的多模特性,地理信息-Spatial和全文检索-Text组件,在20c中,通过In-Memory的内存特性,获得了进一步的支持。对于空间数据,Oracle在内存中为空间列增加空间摘要信息(仅限于内存中,无需外部存储),通过SIMD矢量快速过滤、替换R-Tree索引等手段,以加速空间数据查询检索,可以将查询速度提升10倍。针对全文检索(Text,在内存中将倒排索引添加到每个文本列,同时通过将单词映射到包含单词的文档,以内存替换原来的磁盘索引,从而加速全文检索的性能。通过结合关系数据和文本的混合查询,全文检索可以获得3倍以上的性能提升。
解读
多模的趋势,是为了充分利用现有成熟的数据库生态,实现在单一平台对多类数据的加工处理的需求。
12. 机器学习
增加机器学习算法
在Oracle的新版本中,更多的机器学习算法被加进来,进而实现更广泛的算法支持。如分类、回归、排行、异常检测等等。