当前位置: 首页 > 技术与资源 > 技术分享 > 正文

Oracle 12C InMemory使用

2016-02-16 10:26:13

作者:刘运彬新炬网络高级技术专家。


1
inmemory简介
 

 

Inmemory是oracle在12c推出的内存数据库查询 ,可以以列存储的格式,在内存缓存表/表分区,并且提供2--10倍的压缩。比如一个表100G,在内存中按照列压缩,耗费内存20G--30G左右。对于OLAP分析型应用,典型的只需要分析最近几个月数据,可以缓存最近几个月数据在内存,而且耗费内存并不多。这大大的提升了ORACLE查询性能。在12c中,如果使用了IN MEMORY OPTION,甚至不需要添加额外的索引,对于某些需要优化的SQL不需要额外的改写,也能获得较高的查询性能。

 

Inmemory将在ORACLE SGA中划分出单独的区域,用于保存整表/分区或者部分列数据,在数据库上只需保留一份存储,当数据表加入inmemory后,oracle会自动选择行查询或者列查询,其架构如下:

 

 

2
启用inmemory
 

 

2.1确认oracle已启用im区

 

Inmemory作为oracle 12C的一个组件,在安装时会自动安装,如安装正确,如下查询可检查:

 

 

与inmemory相关的数据库参数如下:

 

 

要求inmemory_size值必须大于0,inmemory和buffer cache是不同的区域,所以同一个表在sga中可能按行和列的格式分别保存一份。当表加入inmemory区域后,可查询im区域的使用情况。

 

 

2.2将对象加入im区

 

由于内存空间的限制,我们只能将最常用的表分区或者部分列加入im区,避免内存浪费。

 

 

当表假如inmemory后,可查询表属性如下:

 

 

手工将表加入IM区后,ORACLE默认给其NONE的加载级别,即当IM区有空间并且在第一次查询的时候会将对象存入IM区。

 

ORACLE定义IM区加载级别有如下几个:

 

 

表加载限制:所有sys的表以及存放在SYSTEM/SYSAUX表空间的表,索引组织表和聚簇表不支持加载,数据类型为LONG或者LOBS的列将不会被加载。

 

由于内存空间的限制,ORACLE会对加载到IM区的对象进行压缩,压缩级别有NO MEMCOMPRESS、MEMCOMPRESS FOR DML(最小压缩,提升DML性能)、MEMCOMPRESS FOR QUERY LOW(默认压缩级别,提升查询性能)等等。

 

3
 Inmemory对数据库性能的提升
 

 

数据表在inmemory中是按列存储的,当查询选择性较低的列时,在普通情况下是无法使用索引的。如果使用immory,表扫描性能将大大提升。

 

例:普通全表扫描,语句产生大量逻辑读。

 

 

Inmemory扫描:

 

 

由上可看出语句扫描cost和一致性读都大大下降。

 

4、 In-Memory Advisor工具介绍。

 

Oracle 提供in-memory advisor工具协助用户分析数据库负载和性能,协助用户确认inmemory_size的大小和确定哪些数据库表需要添加到im区域中。

 

该工具支持11203以上数据库版本,并且可支持普通数据库和多租户数据库。在官网下载该工具后可执行@instimadv自动进行安装。

 

工具安装完成后执行imadvisor_analyze_and_report.sql会自动生成分析报告和修改相关对象的DDL语句。

上一篇:Docker容器技术研究
下一篇:业务服务质量监控方案:拦截和跟踪浏览器中的HTTP请求