您的位置:首页 > 数据库 > Oracle

【Oracle】ORACLE 12c DB In-Memory简述及启用

2015-11-08 23:23 507 查看
Oracle DB In-Memory是预装在Oracle Database 12c(12.1.0.2之后的版本)中的,不需要安装其他软件或者是重新编译现有的的数据库软件。这是因为In-Memory选项是作为SGA的一个新组件无缝集成在Oracle Database软件内核中的,所以如果Oracle Database已经安装,则Oracle DB In-Memory同时也已安装。In-Memory store默认是不开启的,但是可以简单通过几个步骤来开启改功能。

比较重要的一点是DB In-Memory的开启是在实例级别的,同时对于要存储到In-memory的objects需要手动指定,否则是不会自动存储到In-Memory Area的。

In-Memory Area是SGA中用列式存储的方式来存储数据的一个静态池。在没有这个特性之前,oracle的数据全部采用行形式进行存储(除EHCC压缩之外),而在In-Memory Area中数据以列式进行存储,通过这种存储方式在某些业务场景中提升扫描性能,如:出报表等。

In-Memory Area的大小通过参数INMEMORY_SIZE来进行控制的,改参数默认为0,表示DB In-Memory被禁用。

数据库当前正在使用的INMEMORY_SIZE参数可以通过v$parameter视图进行查看,同时在v$sga视图中也可以看到。In-Memory column存储在一个静态池当中,所以对于INMEMORY_SIZE参数的所有调整都只在该instance重启之后才会生效。同时In-Memory pool的大小也不会受到自动内存管理(AMM)的影响。如果启用DB In-Memory特性,INMEMORY_SIZE最小需要设置为100M。

下面我们来看一下和In-Memory相关的参数:

SQL> show parameter INMEMORY

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
inmemory_clause_default string
inmemory_force string DEFAULT
inmemory_max_populate_servers integer 0
inmemory_query string ENABLE
inmemory_size big integer 0
inmemory_trickle_repopulate_servers_ integer 1
percent
optimizer_inmemory_aware boolean TRUE
这7个含有INMEMORY前缀的参数分别控制着In-Memory功能的各个方面。比如INMEMORY_QUERY参数控制着在system和session级别上用户查询是否可以使用列式存储的数据。其他参数也会在之后的文章中一一介绍。

在当前的参数设置中可以看到INMEMORY_SIZE参数被设置为0,这代表着DB In-Memory功能未启用,未在SGA中分配相关空间。

我们同样可以通过v$sga进行查看,In-Memory Area没有被分配空间。

SQL> select name,value from v$sga;

NAME VALUE
-------------------- ----------
Fixed Size 2929160
Variable Size 469765624
Database Buffers 2600468480
Redo Buffers 13844480

开启DB In-Memory过程如下:

1.修改INMEMORY_SIZE参数:

SQL> ALTER SYSTEM SET INMEMORY_SIZE=1G SCOPE=SPFILE;

System altered.
注意:INMEMORY_SIZE最小为100M。

2.检查sga参数的设置,确保在设置完inmemroy_size参数之后数据库实例还可以正常启动。如果数据库使用了ASMM,则需要检查sga_target参数。如果使用了AMM,则需要检查MEMORY_TARGET参数,同时也需要检查SGA_MAX_TARGET(或MEMORY_MAX_TARGET)。

3.重启数据库实例

SQL> shutdown immediate;
SQL> startup
4.检查重启后的数据库参数设置:

SQL> show parameter INMEMORY_SIZE

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
inmemory_size big integer 1G
同时也可通过v$sga视图查询In-Memory Area的分配:

SQL> select name,value from v$sga;

NAME VALUE
-------------------- ----------
Fixed Size 2929160
Variable Size 469765624
Database Buffers 1526726656
Redo Buffers 13844480
In-Memory Area 1073741824

在In-Memory Area中又被分为两个小的pool,分别为:

1.1M pool(IMCU pool)

2.64KB pool(SMU pool)

具体分配的大小我们可以通过V$INMEMORY_AREA视图进行查看:

SQL> select pool,alloc_bytes,used_bytes from v$inmemory_area;

POOL ALLOC_BYTES USED_BYTES
-------------------------- ----------- ----------
1MB POOL 854589440 0
64KB POOL 201326592 0
可以看到绝大部分的In-Memory Area被分配为1MB pool。在没有手工指定In-Memory的表时,USED_BYTES为0。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐