DBIM ( DatabaseIn-Memory ) 是Oracle12c数据库的选项,类似于RAC,ADG。
DBIM 能够实现对混合类型应用的支持,传统的以行形式保存的数据满足OLTP应用,列形式保存的数据满足以查询为主的OLAP应用。IM组件可以和其他数据库组件功能使用像Sybase IQ, SAP HANA,并不需要用户单独开发或者修改应用程序,就可以非常方便的实现基于实时数据库分析的转变
主要目的是利用内存的速度和优化的列格式来加速分析
DBIM 的缺省的参数有:
inmemory_size big integer 0
默认是不开启的。
DBIM 在内存中需要预留空间,属于SGA中的静态池分,是纯列式存储。列存储不会取代缓冲区缓存,而是作为一种补充,以便数据现在可同时以行格式和列格式存储在内存中。
通过INMEMORY_SIZE控制DBIM内存的大小,至少为100M,当其大于0时,启用DBIM功能。
开启步骤如下:
alter system set inmemory_size=200M scope=spfile sid='*' ;
重启数据库
数据库启动时,可以看到 SGA 中分配的 Inmemory Area 区域。
建一张测试表:
create table tab_inmas select * from dba_objects;
将该表数据设置存储在内存中
SQL> alter table tab_inm inmemory;
Table altered.
SQL> SET AUTOTRACE on
inmemory 执行计划如下:

V$INMEMORY_AREA 可以查询内存区域的使用情况,其中 USED_BYTES 表明当前已经使用的内存 :
从上边的执行计划看, 使用 in-memory 效果还是比较明显的。
In-Memory 需要注意如下及不支持:
1 、索引组织表 (IOT) 和集群表
2 、 LONG 何 out-of-line LOB 也不支持
12.2 之前不支持在 ADG 的 standby 实例中使用
另外,需要注意如下
2
点:
(1)
该特性不支持
SYS
用户下的对象
,
不支持
SYSTEM
、
SYSAUX
表空间下的对象
(2)Objects that are smaller than 64KB are not populated into memory
如果要支持
sys
用户和
sys
表空间里面的对象,需要修改隐含参数
_inmemory_enable_sys
为
TRUE
(3) 强烈建议将每个 RAC 节点的 IM 列存储设置为相同大小。
(4) 热表、热分区、经常访问的列放入 In-Memory
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10201716/viewspace-2709518/ ,如需转载,请注明出处,否则将追究法律责任。