ITPub博客

首页 > 数据库 > Oracle > oracle12C新特性in-memory

oracle12C新特性in-memory

原创 Oracle 作者:pooldb 时间:2014-12-22 11:54:51 0 删除 编辑
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

INMEMORY_SIZE定义了in-memory的大小,default为0MB,INMEMORY_FORCE,定义default的行为
default表示只在ddl定义下才会放到in-memory area中,off表示在关闭in-memory area。INMEMORY_CLAUSE_DEFAULT
定义了在新建表的时候,是否自动加入到in-memory area,压缩等属性.optimizer_inmemory_aware表示optimizer是否对
inmemory支持.

inmemory_size 是一个静态参数,更改需要重启实例生效.

提供给in memory并不需要有双倍内存,而是划分一块单独的内存区域给im-memeory功能使
用.这块内存区域是在存放在SGA之中,先称为in-memory area,in-memory 内存区域越大越好,这样有更多
数据存放在内存中,in-memory area可以由AMM或是ASMM来管理,实质是无非多了一块区域.

默认情况下对像只有在ddl定义才会被放到in-memory area区域中.可以通过inmemory_clause_default来修改
行为,比如手动把表放到in-memory area中

SQL> create table t1(a int,b int);

Table created.

SQL> alter table t1 inmemory;

Table altered.

 

取消表在inmemory中存放
SQL> alter table t1 no inmemory;                             

Table altered.


还可以在栏位级定义哪一栏放到 in-memory area中

SQL> alter table t1 inmemory;

Table altered.

SQL>  alter table t1 inmemory (a) no inmemory (b);

Table altered.

先定义整个表存放在in memory中,才能再定义某个栏位存放在in memory中.

整张表放到in-memory里,除object_name之外

SQL> alter table c##frank.t1 no inmemory(object_name);

Table altered.



in-memory是列式存放,而传统的buffecache是行式存放,性能远低于列式存放。
in-memory特性的出现使得oracle的查询性能获得大幅度的提升。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30074459/viewspace-1375828/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-12-22

  • 博文量
    404
  • 访问量
    296519