这篇“Oracle 19c和20c新特性”最全解密,真香
ccwgpt 2024-11-26 01:07 70 浏览 0 评论
本期为我们带来分享的嘉宾是 ACOUG 核心专家,Oracle ACE 总监 杨廷琨先生,本次嘉年华上,杨老师为我们带来题为:Oracle 19c 和 20c 的新特性解密 主题分享。下面,让我们跟随杨老师,一同来学习关于Oracle 19c和20c新特性吧~
在这次数据技术嘉年华大会上,我和大家分享的是Oracle最新版本的一些重要的新特性。
根据我们白求恩自动巡检平台的数据分析结果,虽然Oracle对于11g的支持已经进入扩展维护期,但是目前业内使用最多的版本仍然是11.2,大概占到了6成左右。而12c的版本的使用超过10g版本,总体接近3成。这说明对于很多客户,已经逐渐把数据库升级到了12.2及以后的版本上。12c正在逐渐变为主流的版本,因此希望把新版本中一些重要的新特性分享给大家,以便于后续在数据库版本选择的时候可以对新的功能做到心中有数。
12.2推出了很长时间了,大部分DBA对于12.2的特性并不陌生,因此这次主要分享18c、19c和20c的新特性。
在Oracle中,一个频繁插入的系统在正常时刻的运行会非常稳定和高效,但是很可能突然会出现大量的竞争和等待,一般来说产生这个性能问题原因是单调递增索引在索引分裂的时候引发的竞争和等待。绝大部分主键依赖于SEQUENCE产生的NEXT_VALUE,而SEQUENCE产生的值一般都是单调递增的,因此序列产生的新值总是最大的,而索引本身又是一个排序的结构,当多个会话同时进行插入时,这些会话就会争抢索引叶子块的最右端,也就是最大值存放的地方。当索引需要进行分裂来扩展空间时,就会导致所有试图插入的会话被锁定,从而引发一系列并发等待,造成严重的性能问题。
在18c中,一个重要的特性就是引入了Scalable Sequence。Oracle改造了序列的构成,其后半部分就是一个标准的序列,而前半部分分别把数据库的实例ID和当前会话的SESSION ID加到了序列中,因此在获取序列的NEXT_VALUE时,得到的不再是递增的数值,而且变化差异非常大的不连续的数值,从根本上改变了获取序列的数据连续性问题,解决了由此引发的索引热点块争抢的问题。
18c中使用外部表不再需要通过DDL先创建后使用的方式,可以将外部表的描述性部分直接加入到访问的SQL语句中,从而简化了外部表的使用和维护。尤其是针对一次性加载的外部表,INLINE外部表功能是非常方便的。
除了增加了外部表使用的便利性,在性能方面,18c也对外部表进行了优化。可以在数据库中为外部表创建IN MEMORY缓存,从而极大的加快外部表数据的运算和分析过程,对于多次访问或进行复杂分析运算的外部表,启用IN MEMORY外部表功能,可能会得到成百倍的性能提升。
Oracle对于PDB的复制同步功能得到进一步提升,从12.2引入了PDB的热克隆,同时支持了克隆库可以阶段性的从源库进行增量的数据同步,而在18c中,可以对源库和克隆库之间进行SWITCHOVER切换,转换二者的身份,使得源库变成可同步刷新的只读克隆环境,而原本的只读克隆库变为可读写的主库。这种PDB级别的SWITCHOVER对于计划停机场景和非计划故障停机场景都是有价值的。
18c中另外一个很重要的特性就是Oracle提供了对于用户使用权限的捕获,可以通过开启一个业务周期的权限捕获,然后获取到这个用户在这个业务周期内,使用了哪些权限,访问了哪些对象,对于分析当前用户是否权限过大,非常有帮助。而在之前的版本中,这个任务非常难以实现。
上面是18c中带来的一些重要的特性,下面看看19c中Oracle又引入了哪些重大的功能和特性:
Oracle第一次提出了自制数据库的概念,而要解决数据库自治,自动优化是不可缺少的,而19c引入的一个重要的特性就是索引自动创建功能。当设置了自动索引创建功能后,Oracle后台会不断的评估数据库中运行的SQL语句,分析这个语句是否可以通过创建索引来提升性能,并尝试创建不可见索引,如果优化器评估确认新创建的索引确实可以提高查询性能,会将这个索引设置为可见,使得前台业务SQL语句可以使用这个索引。
针对物联网应用场景,面临海量数据的频繁插入,Oracle提供了专门的优化手段:MEMOPTIMIZE FOR WRITE。开启表的这个功能后,前台业务插入直接写入LARGE POOL中的内存空间,后台进程异步的将内存中的数据写入到数据库文件中,其本质是以牺牲事务性为代价来换取极速的插入性能,在2 Socket服务器上可以实现每秒插入2500万条记录。
在19c中Oracle对于在线维护操作进一步增加,进一步降低了DDL对于正在运行系统的影响。在进行游标过期时,将会采用更加智能的策略,将DML和SELECT按照不同的策略进行处理,采用滚动游标过期方式,避免DDL使得所有相关游标同时过期,从而导致解析风暴引发的并发锁定问题。
在数据库中有一类SQL比较难以处理,被称为RUNAWAY语句,这类语句有一个特点,执行次数并不频繁,但是会消耗大量的资源,一旦被执行就可能造成系统的性能问题。而且下次再运行的时候,可能在SQL文本上有少量的变化,导致难以通过SQL_ID的方式进行定位和处理。
Oracle针对这种SQL提供了执行计划隔离的能力,评估一个SQL是否会被隔离不是根据SQL文本,而是根据SQL的执行计划,一旦SQL的消耗超过了资源管理器中的阈值设置,该SQL语句对应的执行计划就被隔离起来,后续所有采用同样执行计划的SQL都不会再被执行。从而有效地避免了RUNAWAY语句对于性能的影响。
19c的ADG对DML的自动重定向功能也是比较引人关注的,在配置了该功能后,在备库上运行的DML会被Oracle通过内部DBLINK传输到主库中运行,运行成功后产生的日志发送到备库并成功应用后,备库上的DML才会成功返回,并可以查看到DML执行后的结果。
Oracle实现这个功能的同时并没有牺牲数据库的事务性,也就是说在备库的DML未提交之前,备库上的修改只有当前会话可见,其他会话看不到修改后的结果,当备库的DML修改提交之后,其他会话才可以看到修改后的结果。这个功能适用于读写分离应用中存在很少量修改的情况,这时备库不会报错,而是透明的将修改应用到主库中。
在19c中,对于Sharding的功能有了进一步的增强,其中比较重要的一点改进是目前Sharding支持多个表家族,也就是说一个Shard中可以存储超过一套的主子表,而在以前的版本中,Oracle只允许存储一套主子表。另外一个改进是在Sharding的目录库中,可以通过运行ALTER SYSTEM语句将参数设置发送到所有的Shard库中。
Oracle在19c中对于外部数据的混合存储功能进一步加强,允许分区表中部分分区为数据库内的在线数据,部分分区由存储在外部文件系统的外部数据构成。这使得数据库中全生命周期管理功能得到进一步完善。对于很少访问的历史数据,不需要通过额外的历史库或历史表去访问,而是通过原表不需要修改程序就可以直接访问到离线的只读数据。Oracle会对不同类型的分区进行分别处理,当一个SQL同时访问内部分区和外部分区时,Oracle将执行计划拆分为两个UNION ALL分支,采用不同的执行计划去获取数据。
很多时候一些SQL的执行计划性能低下,实际上是统计信息不准确导致的,Oracle的19c开始将部分关键统计信息实时化,从根本上避免了由于统计信息不准确导致执行计划低效的问题。由于统计的实时化不能以牺牲DML操作的性能为代价,因此目前实时计算的统计信息仅包括最小值,最大值和行数。因此实时统计信息并不能完全代替统计信息收集,后台的自动统计信息收集仍然需要执行。
19c在SQL方面有三方面的增强,首先增加了一个ANY_VALUE()函数,这使得在聚集操作时,可以对非关键列采用随机值而不是必须使用MIN/MAX来进行处理,从而降低了处理的资源消耗;第二方面是字符串汇总功能LISTAGG增加了DISTINCT关键字,可以在汇总字符串之前去掉重复数据,从而降低了SQL语句的复杂度;第三方面可以在计算DISTINCT的使用采用BITMAP的方式,从而获取更好的性能。
上面介绍了18c和19c中,Oracle最新的一些功能和特性,下面我们看一下在20c中,Oracle会带来哪些新的功能:
在20c中,Oracle支持原生的区块链表,这种表具备了区块链的特性,包括不可篡改,加密和可验证等,而且与分布式区块链相比更容易使用。
在20c的一体机中,Oracle开始支持持久化内存。持久化内存的处理速度要比FLASH和SSD硬盘快不止一个数量级,加入了持久化内存后,在存储节点上,数据会分为冷、温和热三个区域,冷数据存储在硬盘中,温数据存储在FLASH CACHE中,而最热的数据放在持久化内存中。配合最新的100G以太网以及RoCE协议,使得IO响应延迟可以达到微秒级。
在20c中允许把SQL函数定义为类似C或JAVA语句用的宏定义的方式,该函数可以在编译的时候进行宏展开,目前Oracle支持标量表达式和FROM语句中的TABLE表达式两种类型的宏。
在20c中Oracle增加了两个新的聚集函数:偏度和坡度,用来描述数据分布的情况;支持了运算聚集操作;通过GROUPS语句来扩展窗口边界,使得分析函数的窗口功能进一步增强。
20c中Oracle内置了机器学习算法,比如极限梯度提升树,MSET-SPRT等。此外,这些机器学习的算法支持多种语言的支持,比如SQL、Python和R语言。
在之前的版本中,当多租户数据库所在实例出现故障后,这个多租户会在哪个幸存实例上启动,取决于服务漂移到哪个实例上,PDB的启动由服务来驱动。在20c中,面临同样的问题时,有了更多的选择,可以定义PDB的选择性和等级,事先定义好问题发生后,PDB会在哪个节点上启动,此外还可以根据各个节点的运行负载以及性能差异来动态评估。
对于RAC而言,一旦发生节点关闭,数据库会进行资源的重组,这个过程会锁定全局资源目录,从而导致在线的操作受到短暂的影响。在20c中,对于计划内的停机,在关闭数据库之前,Oracle自动完成资源的分配,避免了其他实例的恢复操作,有效的降低了对整个系统的影响。
Oracle的In-Memory功能仅需一个参数就可以实现全自动化的管理,不在需要管理员手工指定表的方式。内置的自动算法会根据表的访问频繁情况,自动决定加载表或从IN-Memory内存中驱除表,还会自动对较少访问的数据进行压缩。
Oracle的In-Memory功能不仅仅针对结构化数据,对于空间数据库和全文数据库,同样可以采用In-Memory来进行加速,从而获得几倍或更高的性能提升。
在12.2和18c中,Oracle实现了ADG切换之后的连接会话保持和Buffer Cache的保持功能,在20c中,Oracle可以实现ADG中Result Cache缓存的保持功能,普通用户将很难察觉到Data Guard主备切换带来的影响。
相关推荐
- 一个基于.Net Core遵循Clean Architecture原则开源架构
-
今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...
- AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%
-
写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...
- OneCode低代码平台的事件驱动设计:架构解析与实践
-
引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...
- 国内大厂AI插件评测:根据UI图生成Vue前端代码
-
在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...
- AI+低代码技术揭秘(二):核心架构
-
本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...
- GitDiagram用AI把代码库变成可视化架构图
-
这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...
- 30天自制操作系统:第六天:代码架构整理与中断处理
-
1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...
- AI写代码越帮越忙?2025年研究揭露惊人真相
-
近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...
- 一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具
-
一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...
- 5分钟掌握 c# 网络通讯架构及代码示例
-
以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...
- 从复杂到优雅:用建造者和责任链重塑代码架构
-
引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...
- 低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈
-
专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...
- 框架设计并不是简单粗暴地写代码,而是要先弄清逻辑
-
3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...
- 大佬用 Avalonia 框架开发的 C# 代码 IDE
-
AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...
- 轻量级框架Lagent 仅需20行代码即可构建自己的智能代理
-
站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- 知识框架图 (52)
- ppt框架 (55)
- 框架图模板 (59)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)