【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。
比较重要的一点是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。
相关文章推荐
- oracle的oci和thin区别
- 42.Oracle数据库SQL开发之 日期和时间的存储与处理——Oracle对2位年份处理
- 41.Oracle数据库SQL开发之 日期和时间的存储与处理——设置默认的日期格式
- 40.Oracle数据库SQL开发之 日期和时间的存储与处理——使用TO_CHAR和TO_DATE
- 39.Oracle数据库SQL开发之 日期和时间的存储与处理——几个简单的存储检索日期
- 38.Oracle数据库SQL开发之 对行进行分组
- 37.Oracle数据库SQL开发之 使用聚合函数
- 36.Oracle数据库SQL开发之 使用简单函数——使用单行函数正则表达式函数
- 35.Oracle数据库SQL开发之 使用简单函数——使用单行函数转换函数
- 34.Oracle数据库SQL开发之 使用简单函数——使用单行函数数字函数
- 33.Oracle数据库SQL开发之 使用简单函数——使用单行函数字符函数
- 32.Oracle数据库SQL开发之 SQLPlus使用——断开数据库并退出SQLPLUS
- 31.Oracle数据库SQL开发之 SQLPlus使用——自动生成SQL语句
- 30.Oracle数据库SQL开发之 SQLPlus使用——从SQL获取帮助信息
- 29.Oracle数据库SQL开发之 SQLPlus使用——创建简单报表
- 28.Oracle数据库SQL开发之 SQLPlus使用——使用变量
- 27.Oracle数据库SQL开发之 SQLPlus使用——设置页面、行大小
- 26.Oracle数据库SQL开发之 SQLPlus使用——格式化列
- 25.Oracle数据库SQL开发之 SQLPlus使用——保存、检索并运行文件
- 24.Oracle数据库SQL开发之 SQLPlus使用——编辑SQL语句