Oracle 12c In Memeory新特性 Storage index

2900阅读 0评论2015-12-27 oracle狂热分子
分类:Oracle

                                          Oracle 12c In Memeory新特性 Storage index

   Storage index(下文简称SI),是在exadata平台上的一个特性,通过在内存中维护一块存储区域的最大和最小值.
在扫描时可以下推到cell来执行,从而减少了需要IO的次数,在in memory特性中,每个in memory compress unit也维
护了一个最大值和最小值,这样在在扫描时,可以直接根据最大值和最小值跳过某些不需要的IMCU.

创建一个表,并设置IM属性
SQL> create table t_si inmemory as select 10 id from dual connect by level<1000000;

Table created.

Insert一个和其他的值不一样的数值
SQL> insert into t_si values(11);

1 row created.

SQL> commit;

查看当前的IMCU的状态
SQL> select objd,imcu_addr from v$im_header;

      OBJD IMCU_ADDR
---------- ----------------
     91799 00000000604FFFE8
     91799 0000000061400000


SQL> select objd,head_piece_address,utl_raw.cast_to_number(minimum_value),utl_raw.cast_to_number(t.MAXIMUM_VALUE)
 from v$im_col_cu t
  2  ;

      OBJD HEAD_PIECE_ADDRE UTL_RAW.CAST_TO_NUMBER(MINIMUM_VALUE)
---------- ---------------- -------------------------------------
UTL_RAW.CAST_TO_NUMBER(T.MAXIMUM_VALUE)
---------------------------------------
     91799 00000000604FFFE8           10
         10

     91799 0000000061400000           10
         10

     91799 0000000061500000           11
         11

通过查询v$im_col_cu得到当前有三个IMCU,并且可以看出当前的每个IMCU的最大值和最小值.


比如该查询;
SQL> select count(id) from t_si where id>10;

 COUNT(ID)
----------
  1


................
IM scan CUs pruned                 2
................

由于大于10的IMCU只有1个,因此通过查询v$sesstat可以看到,总共3个IMCU,有2个IMCU被pruned了,
此需扫描1个IMCU即可

再看这个例子

SQL>select count(id) from t_si where id=10

...............
IM scan CUs pruned             ,          1
.................


等于10的IMCU有2个,因此通过查询v$sesstat可以看到,总共3个IMCU,有1个IMCU被pruned了.

上一篇:在RedHat 7中关闭transparent_hugepage
下一篇:CBO连接的成本计算