语言
<< 返回文章列表

Oracle Database 20c:In-Memory增强

2020年2月19日
甲骨文云技术
263

原文链接:https://www.modb.pro/db/21580 

在Oracle Database 20c当中In-Memory特性里面的Automatic In-Memory(以下简称AIM)显著被增强,AIM技术不是在20c当中刚提出来了,早在18c就已经引入,用来自动管理高性能内存选件。在20c当中,为INMEMORY_AUTOMATIC_LEVEL这个参数增加了一个选项:HIGH。当被设定为HIGH之后,所有的相关数据对象不需要额外设定INMEMORY参数,都将被自动设定为默认的 INMEMORY MEMCOMPRESS AUTO 。然后,AIM使用访问跟踪和列统计信息自动管理In-Memory (IM) column存储对象。这个功能解决了客户经常向我们提出的疑问:我要将哪些对象放入In-Memory (IM) column存储?


modb_20200217_100325.png


在之前的数据库版本就可以使用的INMEMORY_AUTOMATIC_LEVEL:LOW和MEDIUM参数依旧有效。当我们将参数设定为HIGH之后,系统使用类似heatmap这样的技术对segments做访问跟踪以及使用columns统计信息来决定哪些对象将被放入内存列存储,您不再需要决定哪些数据对象要添加INMEMORY选项了。此外,AIM将自动压缩列中的数据,这些技术的使用将让IM列存储发挥最大的效能,同时也将系统性能最大化。如果您坚持不使用IM技术,您依旧可以在数据对象上使用NO INMEMORY子句。如果将这个参数从HIGH转换为其他参数,那么对象的IM属性将被设定为NO INMEMORY。


接下来我们就通过例子来看看这项功能是如何使用的吧。


第一步:创建几个测试表


modb_20200217_100327.png


第二步:查询这几个表的IM状态


我们目前还没有设定INMEMORY_AUTOMATIC_LEVEL参数,我们看看数据表原始的IM状态是怎样的。


modb_20200217_100328.png


通过观察发现这些表是普通的表,没有启动IM选项,也没有进行IM压缩。


第三步:修改T1表的INMEMORY属性,然后查看表的IM状态


我们看到T1表的IM属性已经开启,这是我们在没有设定INMEMORY_AUTOMATIC_LEVEL参数之前,手工设定的情况。


modb_20200217_100329.png


第四步:来到CDB设定INMEMORY_AUTOMATIC_LEVEL参数并重启数据库


modb_20200217_100330.png


第五步:查看T1,T2和T3的IM设定情况


我们发现T2和T3没有通过手工设定,已经自动被启用了IM功能,并且启用了自动压缩模式。


modb_20200217_100332.png


第六步:将T1也修改成自动管理


modb_20200217_100333.png


第七步:设定时间窗口


您可以通过DBMS_INMEMORY_ADMIN设定Automatic In-Memory只考虑过去一个月或者过去一周的使用情况(统计值),来决定如何处理IM对象。下面的例子中,设定时间窗口为7天,这个参数默认是1天。


modb_20200217_100334.png


第八步:相关的数据字典


您可以通过查询DBA_INMEMORY_AIMTASKS和DBA_INMEMORY_AIMTASKDETAILS来了解Automatic In-Memory的后台任务情况。


modb_20200217_100335.png


关于Oracle Database 20c中的IM增强就为您介绍到这里,更多详细讯息,请参考Oracle Database 20c官方文档。