7.Oracle深度学习笔记——内存架构之SGA IM Column Store

7.Oracle深度学习笔记——内存架构之SGA IM Column Store

欢迎转载,转载请标明出处:         http://blog.csdn.net/notbaron/article/details/50597341

从12.1.0.2开始,内存列存储是可选项。在SGA中分配一块空间用于列格式存储表、分区实现快速扫描。不是BUFFER CACHE的替代,而是一个补充。

         相同的数据可以同时存储在BUFFERCACHE和内存列存储空间中。默认,只有指定为INMEMORY的DDL才会存储在IM 列存储中。

         数据库会保证列格式的数据和BUFFERCACHE的数据交易的一致性。不用用户担心。

1.  IM列存储好处

主要使用地方:

n  使用操作符=,< ,>和IN 来扫描很多行

n  从一个表中查询一组子列,例如从100列中选择其中5列

n  通过转换小维度表的谓词来过滤大的事实表的连接

商务应用,热点分析查询,数据库仓库复杂可以收益很多。而纯粹的OLTP数据库交易获益很少。

         IM 列存储也提供了一下优点:

l  所有存在的数据库特点都支持,包括HA

l  不需要改变应用

l  配置简单(只需要配置初始化参数INMEMORY_SIZE)

l  压缩优化来提升查询性能

l  需要很少的索引,物化视图,和OLAP 矩阵

2.  两种内存格式(列和行)

获取数据的时候,可以从IM列存储也可以从BUFFERCACHE中获取。

数据同时保存在两种格式下。

         IM支持磁盘上存储的各种表格式,也不会 影响UNDO,REDO等。

         数据库执行DML修改,可以无视IM 列存储。

         数据库使用给内部机制跟踪改变,确保IM列存储和当前数据块保持一致。

3.  IM 列填充

IM 列存储中的数据可以在启动时候填充也可以在访问时候填充。根据是否使用RAC算法存在一些差异。

         默认,在RAC中,内存表分布在数据块实例中。 默认NODUPLICATE 语句表示一个对象已有一个副本。

         DUPLICTE ALL语句表示每个内存表在每个实例中都有存在

         DUPLICATE 语句表示存在两本副本。

4.  列压缩

IM 列存储使用特殊的压缩格式来优化访问速度。主要有以下两点:

l  压缩格式可以降低每列需要处理的内存总量,SQL可以直接执行在压缩列上

l  数据库使用SIMD 向量指令在一个CPU时钟周期中处理一组列值。在一个VECTOR上存储很多值,可以最大的利用SIMD处理性能

可以在CREATE和ALTER语句的子句中使用MEMCOMPRESS语句来选择不同的压缩方式。

默认压缩选择MEMCOMPRESS FORQUERY LOW,提供了最快读,不需要解压数据。

其他压缩,例如FOR QUERY HIGH和FOR CAPACITY,使用不同的压缩等级,有些需要解压。

         在存储一个表到IM列表的时候,可以使用

DBMS_COMPRESSION.GET_COMPRESSION_RATIO来报告压缩比例,来评估需要的空间。

         IM 列压缩和 混合列压缩有点相近。 都需要处理一组列。主要区别是, IM列存储的列向量针对内存存储优化过,而混合压缩的列向量为磁盘存储优化过。

5.  IM列存储的扫描优化

列格式使得查询只要扫描需要的例。

如果使用BUFFER CACHE,典型的数据库先要扫描索引找到需要的ROWID,然后从磁盘获取该行到BUFFER CACHE,然后抛弃不要的列值。使用IM列存储,可以直接扫描需要的列。

 

 

 

        

 

 

 

 

 

 

 

 

你可能感兴趣的:(Oracle)