标签:
内存列式存储(IM column store)(此特性在12cr1(12.1.0.2)版本后开始可用)是系统全局区中一个可选的部分,表中的数据是以列的形式而不是行的形式存储在内存里面的,如下图所示.在针对某列作查询的应用场景中,列式存储能极大地提升语句的执行速度.
IM的列存储在SGA中一个新的静态池。传统的表数据是以行为单位存储,列作为行的一个个片断,列式存储是以一种新的列格式。每个列被存储为一个单独的结构。列存储区不取代缓冲区缓存,但作为一个补充,使数据可以存储在内存中的行和列格式。要使用列存储,初始化参数(inmemory_size)必须设置为非零值。
您可以在以下任何级别启用列式存储:
Column(列)
Table(表)
Materialized view(物化视图)
Tablespace(表空间)
Partition(分区)
如果是在表空间级启用列存储,所有在此表空间里的表和物化视图默认情况下启用会启用列式存储。可以在列存储的所有数据库对象的列或数据库对象的列的子集上启用。类似地,对于一个分区表或物化视图,列存储都可以在某些列或列的子集上启用。
使用列存储,可以显著提高对数据库对象上执行的以下类型操作的性能:
1.扫描大量行的查询,并将使用诸如下列运算符的筛选器:=,< >
2.从表或物化视图中选择一个小的列的查询,有大量的列,如从表中选择五列的查询,100列
3.将小的表连接到大表的查询
4.聚合类的查询
通常情况下,创建多列索引以提高分析和报表查询的性能。但这些索引可以降低数据操作语言(DML)语句的性能。当一个数据库对象启用列存储中时,用于分析或报表查询的索引可以被减少或删除,而不会影响查询性能。删除这些索引可以提高交易和数据加载操作的性能。
列式存储可以在以下ddl语句中使用INMEMORY 子句启用.
CREATE TABLE
ALTER TABLE
CREATE TABLESPACE
ALTER TABLESPACE
CREATE MATERIALIZED VIEW
ALTER MATERIALIZED VIEW
通常情况下,通过 v$im_segments视图查询那些已经启用了列存储的数据库对象:
SELECT OWNER, SEGMENT_NAME, INMEMORY_PRIORITY, INMEMORY_COMPRESSION FROM V$IM_SEGMENTS;
在列存储中,数据可以被压缩,和SQL查询执行直接对压缩的数据。
IM Column Store压缩方法
CREATE/ALTER Syntax | 描述 |
NO MEMCOMPRESS | 不压缩 |
MEMCOMPRESS FOR DML | 这种方法优化DML操作和压缩列存储数据(没有memCompress)。 |
MEMCOMPRESS FOR QUERY LOW |
此方法的结果是以最佳的查询性能。 |
MEMCOMPRESS FOR QUERY HIGH |
此方法的查询结果提供良好的查询性能。 |
MEMCOMPRESS FOR CAPACITY LOW |
使用此方法结果是良好的查询性能。 |
MEMCOMPRESS FOR CAPACITY HIGH | 该方法会导致查询结果的公平性。 该方法将我列存储数据的最多。 |
列存储数据选项
当您启用列存储的数据库对象时,您可以让数据库对象的数据填充在列存储(默认)中,或者您可以指定一个优先级级别来确定在队列中的数据库对象的优先级。Oracle SQL包括内存优先级小节提供人口队列的更多控制。例如,它可能是更重要的或不填充数据库对象的数据填充数据的其他数据库对象的重要。
列式存储的优先级选项
CREATE/ALTER 语法 | 描述 |
PRIORITY NONE |
|
PRIORITY LOW |
数据被放入列式存储区的优先级高于优先级:PRIORITY NONE。 |
PRIORITY MEDIUM | 数据被放入列式存储区的优先级高于优先级:NONE,PRIORITY LOW。 数据被放入列式存储区的优先级低于优先级:
HIGH , CRITICAL .。 |
PRIORITY HIGH | 数据被放入列式存储区的优先级高于优先级:NONE,LOW,MEDIUM。 数据被放入列式存储区的优先级低于优先级:
CRITICAL .。 |
PRIORITY CRITICAL | 系最高的优先级,数据将别最优先的数据放入列式存储区中. |
在数据库中启用列存储
在表中,表空间,或物化视图启用 列存储功能之前,必须在数据库级别启用IM列存储。
使数据库启用列存储,完成以下步骤:
确保数据库是在12.1.0或兼容性较高的水平。
1.inmemory_size初始化参数设置为非零值。
2.当你设置这个参数在服务器参数文件(二进制文件)使用ALTER SYSTEM语句,您必须指定范围= SPFILE。
3.最小设置为100m。
4.重新启动数据库。
标签:
原文地址:http://www.cnblogs.com/wangxingc/p/5598128.html