暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 12c新特性:IN-Memory Option - 列存与压缩

原创 eygle 2014-07-16
1446

在12c的In-Memory Option选件之中,数据在内存的独立区域中按照列式存储,数据是被压缩存放的,内存与列式压缩可以极大提升查询的性能,下图是IMO的示意图:


inmemorycolumnar.png


接下来我们来验证一下列存的压缩比率和查询性能。


首先查看IMO的内存分配情况,初始启动数据库,可以看到1MB Pool分配了大约3M的内存空间:


imoareaclean.jpg


接下来将一张数据表设置到内存中,并且通过查询加载:


keepinmemory.jpg


在加载过程中,内存使用增加,直至完成:


billpopulate.jpg


由此我们可以根据数据表的大小和内存分配空间,计算出内存列式压缩的比率。BILL表共使用内存大约300M:


SQL> select (313524224 + 720896 + 3145728)/1024/1024 MB from dual;


MB


----------


  302.6875


而该表在行式存储上占用了 952 MB:


SQL> select bytes/1024/1024 MB from DBA_segments where segment_name='BILL';


MB


----------


       952


这意味着使用列存,使得存储空间压缩到了原来的30%,这是一个计费的测试数据表,在使用IMO查询,全表扫描仅用了80ms就完成了查询:


inmemoryquery8.jpg


在以下测试中,我们创建一个非IMO对象,基于一个字段进行Distinct查询,在查询结果中,响应时间分别为1320 ms和70 ms,也有19倍的响应差距:


diskinodistinct.jpg


以下是执行计划及逻辑读等统计信息输出:


inmemquery8.png


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论