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
领取专属 10元无门槛券
私享最新 技术干货