Oracle Database 12c In-Memory特性之执行计划对比

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180726G0ORFN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券