在Oracle Database 20c中,Automatic In-Memory(AIM)管理功能得到了显著增强。
通过对 INMEMORY_AUTOMATIC_LEVEL 初始化参数添加了一个新的HIGH选项,Oracle 实现了自动化的内存压缩对象管理。
现在这个参数具有四个选项:
INMEMORY_AUTOMATIC_LEVEL = { LOW | MEDIUM | HIGH | OFF }
复制
当设置为 HIGH 之后,默认情况下,所有未预先存在的INMEMORY设置的对象,都会自动设置为INMEMORY MEMCOMPRESS AUTO。
然后,AIM使用访问跟踪和列统计信息自动管理填充到内存(IM)列存储中的对象。这解决了客户最常遇到的问题之一,即“如何确定要填充到IM列存储中的对象?”
LOW和MEDIUM的先前参数选项仍然存在,并且功能与在Oracle Database 18c中引入时相同。但是,使用Oracle Database 20c中新的HIGH选项,数据库将自动管理IM列存储的内容。它使用类似于热图数据的访问跟踪和列统计基础结构监视分段活动,该基础结构是作为自动数据优化(ADO)的一部分引入的。
将AIM设置为HIGH时,将根据使用情况自动逐出并填充分段。您不必选择要在内存中启用的对象。此外,AIM也可以自动压缩各个列。所有这些都是为了最大程度地利用IM列存储并自动提供最佳性能!
当然,如果您不希望在IM列存储中填充特定对象,则仍可以将其手动设置为NO INMEMORY。
如果您决定不再使用INMEMORY_AUTOMATIC_LEVEL参数的HIGH设置,那么当您更改或取消设置参数值时,所有带有MEMCOMPRESS AUTO的段都将设置为NO INMEMORY。
AIM的另一个有趣功能是,您可以调整AIM考虑用于细分用途的窗口。换句话说,可以将AIM调整为仅考虑与AWR一致的对象使用情况统计信息。这样,这些统计信息就不会因不活动时间段,其他应用程序使用情况甚至维护活动而受到影响。
AIM运行类似于ADO的任务,并且这些任务在两个数据字典视图中公开。
可以查询视图 DBA_INMEMORY_AIMTASKS 和 DBA_INMEMORY_AIMTASKDETAILS 来查看AIM所执行的操作。
当然,您仍然可以使用视图v$im_segments查询IM列存储的内容,并使用视图v$inmemory_area查看已使用了多少内存。
这是 Oracle 20c 增强的一个重要特性,非常值得关注和验证。