In-Memory Column Store IM列存储是Oracle 12.1.0.2新引入的特性,IM列存储是系统全局区SGA的一个可选部分,它存储表、表分区或其它数据库对象的副本。IM列存储包含在Oracle数据库In-Memory选项中。本部分内容是在Oracle 12.1.0.2版本进行操作。
1 IM列存储
1.1 IM列存储介绍
IM列存储是SGA中一个新的静态池,IM列存储中的数据不以传统的行格式存储,而是以列格式存储,每个列存储为一个单独的结构。IM列存储并不会替代数据库缓冲区缓存,而是作为它的一个补充,因此数据可以以行和列的格式并存在内存中。
要启用IM列存储,必须将INMEMORY_SIZE初始化参数设置为非零值,最小值为100M。可以在以下任意级别启用列存储特性:
- 列
- 表
- 物化视图
- 表空间
- 分区
1.2 IM列压缩
在IM列存储中,可以对数据进行压缩,并且SQL查询直接在被压缩的数据上执行。IM列存储的压缩方法如下:
在SQL语句中,MEMCOMPRESS关键字之前必须加上INMEMORY关键字。
1.3 IM列存储数据填充
当为IM列存储启用数据库对象时,默认情况下,是由数据库来控制何时在IM列存储中填充数据库对象的数据,当然,也可以通过指定一个优先级别来确定填充填充对列中数据库对象的优先级,SQL语句通过INMEMORY PRIORITY设置优先级别,优先级别包含以下内容:
2 数据库启用IM列存储
在表、表分区、物化视图和表空间启用IM列存储之前,必须为数据库启用IM列存储。数据库启用IM列存储的步骤如下:
1)兼容性设置,确保数据库兼容性是12.1.0或更高级别
SQL> show parameter compatible
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
compatible string 12.1.0.2.0
noncdb_compatible boolean FALSE
2)设置INMEMORY_SIZE初始化参数为非零值,最小为100M
SQL> alter system set inmemory_size=400M scope=spfile;
System altered.
3)重启数据库,初始化SGA中的IM列存储
SQL> startup
ORACLE instance started.
Total System Global Area 1644167168 bytes
Fixed Size 2925024 bytes
Variable Size 9730821