百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

这篇“Oracle 19c和20c新特性”最全解密,真香

mhr18 2024-10-17 10:35 26 浏览 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主备切换带来的影响。

相关推荐

【预警通报】关于WebLogic存在远程代码执行高危漏洞的预警通报

近日,Oracle官方发布了2021年1月关键补丁更新公告CPU(CriticalPatchUpdate),共修复了包括CVE-2021-2109(WeblogicServer远程代码执行漏洞)...

医院信息系统突发应急演练记录(医院信息化应急演练)

信息系统突发事件应急预案演练记录演练内容信息系统突发事件应急预案演练参与人员信息科参与科室:全院各部门日期xxxx-xx-xx时间20:00至24:00地点信息科记录:xxx1、...

一文掌握怎么利用Shell+Python实现完美版的多数据源备份程序

简介:在当今数字化时代,无论是企业还是个人,数据的安全性和业务的连续性都是至关重要的。数据一旦丢失,可能会造成无法估量的损失。因此,如何有效地对分布在不同位置的数据进行备份,尤其是异地备份,成为了一个...

docker搭建系统环境(docker搭建centos)

Docker安装(CentOS7)1.卸载旧版Docker#检查已安装版本yumlistinstalled|grepdocker#卸载旧版本yumremove-ydocker.x...

基础篇:数据库 SQL 入门教程(sql数据库入门书籍推荐)

SQL介绍什么是SQLSQL指结构化查询语言,是用于访问和处理数据库的标准的计算机语言。它使我们有能力访问数据库,可与多种数据库程序协同工作,如MSAccess、DB2、Informix、M...

Java21杀手级新特性!3行代码性能翻倍

导语某券商系统用这招,交易延迟从12ms降到0.8ms!本文揭秘Oracle官方未公开的Record模式匹配+虚拟线程深度优化+向量API神操作,代码量直降70%!一、Record模式匹配(代码量↓8...

一文读懂JDK21的虚拟线程(java虚拟线程)

概述JDK21已于2023年9月19日发布,作为Oracle标准Java实现的一个LTS版本发布,发布了15想新特性,其中虚拟线程呼声较高。虚拟线程是JDK21中引入的一项重要特性,它是一种轻量级的...

效率!MacOS下超级好用的Linux虚拟工具:Lima

对于MacOS用户来说,搭建Linux虚拟环境一直是件让人头疼的事。无论是VirtualBox还是商业的VMware,都显得过于笨重且配置复杂。今天,我们要介绍一个轻巧方便的纯命令行Linux虚拟工具...

所谓SaaS(所谓三维目标一般都应包括)

2010年前后,一个科技媒体的主编写一些关于云计算的概念性问题,就可以作为头版头条了。那时候的云计算,更多的还停留在一些概念性的问题上。而基于云计算而生的SaaS更是“养在深闺人未识”,一度成为被IT...

ORA-00600 「25027」 「x」报错(报错0xc0000001)

问题现象:在用到LOB大对象的业务中,进行数据的插入,失败了,在报警文件中报错:ORA-00600:内部错误代码,参数:[25027],[10],[0],[],[],[],[],[...

安卓7源码编译(安卓源码编译环境lunch失败,uname命令找不到)

前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...

编译安卓源码(编译安卓源码 电脑配置)

前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...

360 Vulcan Team首战告捷 以17.5万美金强势领跑2019“天府杯“

2019年11月16日,由360集团、百度、腾讯、阿里巴巴、清华大学与中科院等多家企业和研究机构在成都联合主办了2019“天府杯”国际网络安全大赛暨2019天府国际网络安全高峰论坛。而开幕当日最激荡人...

Syslog 日志分析与异常检测技巧(syslog发送日志配置)

系统日志包含有助于分析网络设备整体运行状况的重要信息。然而,理解并从中提取有效数据往往颇具挑战。本文将详解从基础命令行工具到专业日志管理软件的全流程分析技巧,助你高效挖掘Syslog日志价值。Gr...

从Oracle演进看数据库技术的发展(从oracle演进看数据库技术的发展的过程)

数据库技术发展本质上是应用需求驱动与基础架构演进的双向奔赴,如何分析其技术发展的脉络和方向?考虑到oracle数据库仍然是这个领域的王者,以其为例,管中窥豹,对其从Oracle8i到23ai版本的核...

取消回复欢迎 发表评论: