2014年6月,在Oracle 12c的12.1.0.2版本中,Oracle正式发布和引入了基于内存和列式计算的In-Memory Option (以下简称IMO),这距离Larry在2013年OOW上发布这一特性已经过去了近10个月。

2014年7月22日,Oracle正式提供了12.1.0.2版本的数据库产品。

下图是IMO特性的原理图,通过在内存中开辟一块独立的区域,Oracle将指定的表或者分区以列式内存存储,但是在存储上,仍然以一份行式存储,这就需要额外的内存空间。

inmemorycolumn.png

IMO特性的优势:
1、查询操作扫描大量的行,并使用操作符进行数据过滤,操作符诸如:=、<、>、IN等;
2、查询操作选择少量的列,而查询对象表或物化视图中包含了大量的列,比如:某个表包含100个列,而仅查询其中5个列;
3、查询操作进行小表与大表的联立(Join);
4、查询要求进行数据聚集操作。

IMO特性的劣势:
1、进行复杂谓词的查询;
2、查询操作选择大量的数据列;
3、查询返回大量的数据行;
4、查询要求进行大表复杂的联立(Join)。

从如下测试来看,IMO特性给查询性能带来了非常大的优势。然而,一味只看到逻辑读带来的优势是不对的,如下例所示:
1、40万倍性能提升不成立
2、列式存储的IM逻辑读独立统计
3、列式存储的逻辑读包括IMCU的扫描和IM行扫描
4、性能提升倍数用执行时间来进行比较更为合理

SQL> select min(test_id), max(test_id), min(org_id), max(org_id) from alex.alex_test;

12cIMO_01

12cIMO_02

Trackback

no comment untill now

Add your comment now

切换到手机版