Oracle Database In-Memory技术在12c这个版本已经提供给大家了,这是一种鱼与熊掌兼得的技术。随着数据库版本的不断升级,In-Memory技术也不断发展。在Oracle Database 21c其中,它给你带来了很多惊喜。接下来,让我们通过实验了解一下Oracle Database 21c当中有哪些In-Memory加强技术。
启用Automatic In-Memory数据填充、删除和重新压缩段,无需用户干预。当INMEMORY_AUTOMATIC_LEVEL设置为HIGH数据库将根据段的使用模式自动启用和填充段。结合选择性列级回收和再压缩的支持,In-Memory数据填充在很大程度上实现了自我管理。这种自动化有助于最大限度地增加一次In-Memory列存储中对象的数量。

Automatic In-Memory将在SQL当工作负荷发生变化时,。工作数据集由查询最频繁的部分组成。工作数据集通常会随着时间的推移而变化。用户必须决定使用哪些部分In-Memory通常需要通过监控来确定数据段的载入和删除,并创建技术ADO IM策略。这就要求数据库管理员全面了解工作量。
为了将DBA解放人工维护工作,Automatic In-Memory维护频繁更新的内部统计信息IM列出存储中的工作数据集。Oracle数据库决定加载什么数据,清除什么数据,何时执行。从某种意义上说,IM列存储实现了自动驾驶。
初始化参数INMEMORY_AUTOMATIC_LEVEL设置为HIGH时,Automatic In-Memory会持续监视IM存储中的列统计信息,所有事先没有INMEMORY属性段设置为INMEMORY MEMCOMPRESS AUTO。数据库只加载它来决定工作数据集中的对象。该决定基于当前统计信息的使用。通过内部列统计识别数据库IM存储的非活动区与Heat Map使用相似,但不需要HEAT_MAP设置为ON。Automatic In-Memory可重新压缩 AUTO segments节省空间的非活动数据。优先级设置为非NONE该段将被排除在自动清除算法之外。
接下来,让我们通过一个例子来理解它Automatic In-Memory如何工作,看看它如何自动加载数据IM列存储,不清除非活动数据。
测试分析
首先,我们通过以下句子查询当前数据库的内存配置,然后我们将,之后在HR在用户下面创建一个表,称为emp,然后插入一些数据,并将它放入内存当中。
接下来,我们查看刚才创建的emp表的IM并修改属性HR.JOB_HISTORY的IM放入属性IM并启动压缩。
现在我们开始自动化IM管理,只要将INMEMORY_AUTOMATIC_LEVEL设定为HIGH可以。此操作应在容器数据库上执行。设置后,重启数据库,使其生效。
然后我们检查HR下面的表的IM状态。
如果看不到上面红框所示的默认情况enabled并且设定为auto状态,只要在PDB通过以下语句设置级别并重启PDB即可。
通过观察上面HR下各个表的IM状态,我们发现COUNTRIES表的状态是disabled,为什么不像其他手表一样一起修改呢?我们通过以下句子强制修改它IM属性看看。
通过提示可以看到,In-Memory不支持IOT表,而COUNTRIES就是一个IOT表。
接下来,我们是对的HR全表扫描下表。
为什么只有emp表中的数据包含在内存中,而其他表中的数据没有包含在内存中?有两个原因:第一,系统根据统计值决定哪些表应该包含在内存中,因为统计值没有实时更新,数据查询刚刚完成,统计值没有更新,所以表中的信息没有包含在内IM存储。其次,统计值是最新的,但系统认为数据是冷数据,不应放入IM存储。
目前,Exadata单元上的CellMemory要求RDBMS端inmemory_size为> 0。这是因为CellMemory需要In-Memory选件。自治数据库和运行EE极端性能的Oracle云,inmemory_size不需要设置。这在Bug 已完成26797490中。现在,我们想介绍一下INMEMORY_FORCE=cellmemory_level,允许当地客户不设置inmemory_size使用CellMemory。
对于分区或混合的外表,INMEMORY表和分区级都支持子句。对于混合表,表级INMEMORY属性适用于所有分区,无论是内部还是外部。这种增强极大地扩大了对内存外观的支持。
我们知道In-Memory是Oracle现在数据库企业版的选择Oracle为了让我们的客户享受使用In-Memory在某种程度上,我们将提高性能In-Memory如果您已经使用它作为数据库的基本特征Oracle企业版数据库,并且In-Memory存储设置不得超过16GB,你不需要付款In-Memory版权费的选择。对于免版权费有以下限制:
1. AIM禁止
2. 压缩级只能是QUERY LOW
3. 不能排除列
4. CELL MEMORY禁止(Exadata特性)
并不是所有的列都放在表中In-Memory此时列存储Oracle同样支持数据库In-Memory扫描。这种情况发生在为了节省空间间,设置了一些列NO INMEMORY,In-Memory混合扫描可以同时从列存储和行存储中读取数据,与之前完全从行存储中读取数据相比,性能提高了几个数量级。
在Oracle数据库21c以前,如果查询引用任何带NO INMEMORY属性列,然后查询将访问银行存储(buffer cache)所有数据。因此,列格式、谓词下推等不能用于表扫描In-Memory特性。从Oracle Database 21c开始,带有INMEMORY和NO INMEMORY列查询可访问列存储数据。在某些情况下,IM混合扫描可以提高几个数量级的性能。在查询选择性过滤器时,性能将得到最大的提高。在这种情况下,IM列存储可以快速过滤掉大部分行,使行存储只投射到少量行。为了实现最佳性能,优化器将有不同的访问方法。如果优化器选择表扫描,存储引擎将自动确定IM混合扫描的性能是否优于常规存储扫描。当满足以下条件时,优化器将考虑混合扫描:
-
谓词只包含INMEMORY列。
-
包括选择列表INMEMORY和NO INMEMORY的任意组合
IM混合扫描在逻辑上将工作分为两部分:一部分处理对IM列存储查询,另一部分处理行存储查询。在执行计划中,TABLE ACCESS INMEMORY FULL (HYBRID)操作表示混合扫描。请注意,如果运行过程中的统计信息表明只访问银行存储会提高性能,则在运行过程中可以禁止数据库IM混合扫描。