签到成功

知道了

CNDBA社区CNDBA社区

Oracle 12c In-Memory Column Store 操作示例

2016-09-06 12:06 3100 0 原创 Oracle 18c
作者: dave



在之前的一篇文章中,我们看了IM column store的理论说明,参考:

http://www.cndba.cn/dave/article/233

 

这篇我们来看具体操作。

 

 

1         启用IM Column Store 特性

 

在对具体对象启用IM Column Store之前,必须先启用数据库的特性。 启用很简单,设置INMEMORY_SIZE参数即可。 该参数是一个静态参数,修改之后,需要重启实例才能生效。

 

SQL> show parameter INMEMORY_SIZE
 
NAME                                        TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_size                                big integer 0
SQL>
 
SQL> alter system set inmemory_size=200m scope=spfile;
System altered.
 
SQL> startup force;
ORACLE instance started.
 
Total System Global Area 1627389952 bytes
Fixed Size              2924976 bytes
Variable Size                956304976 bytes
Database Buffers      436207616 bytes
Redo Buffers                13848576 bytes
In-Memory Area                  218103808 bytes
Database mounted.
Database opened.

 

注意这里,在我们启用之后,可以直接使用在SGA中看到In-Memory Area的大小信息。

 

SQL> show sga
 
Total System Global Area 1627389952 bytes
Fixed Size              2924976 bytes
Variable Size                973082192 bytes
Database Buffers      419430400 bytes
Redo Buffers                13848576 bytes
In-Memory Area                  218103808 bytes
SQL>

 

另外就是该参数,最小100M,我们这里设置了200M,确认一下:

 

SQL> show parameter INMEMORY_SIZE
 
NAME                                        TYPE        VALUE
------------------------------------ ----------- ------------------------------
inmemory_size                                big integer 208M
SQL>

 

现在可以测试IM Column store特性了。

 

 

2         监控IM Column Store

 

其实这个应该在对象启用IM之后才讲,不过先讲,在后面的时候的,可以方便查看。http://www.cndba.cn/cndba/dave/article/234

 

SQL> set lin 120
SQL> col object_name for a30
SQL> select object_name,object_type,status from dba_objects where object_name like 'V$IM%' ;
 
OBJECT_NAME                         OBJECT_TYPE           STATUS
------------------------------ ----------------------- -------
V$IM_COLUMN_LEVEL          SYNONYM                  VALID
V$IM_COL_CU                         SYNONYM                  VALID
V$IM_HEADER                         SYNONYM                  VALID
V$IM_SEGMENTS                    SYNONYM                  VALID
V$IM_SEGMENTS_DETAIL              SYNONYM                  VALID
V$IM_SEG_EXT_MAP             SYNONYM                  VALID
V$IM_SMU_CHUNK                         SYNONYM                  VALID
V$IM_SMU_HEAD                   SYNONYM                  VALID
V$IM_TBS_EXT_MAP             SYNONYM                  VALID
V$IM_USER_SEGMENTS        SYNONYM                  VALID
 
10 rows selected.

 

当然,还有一个视图:V$INMEMORY_AREAhttp://www.cndba.cn/cndba/dave/article/234

 

每个视图的作用,可以查看官方手册,都讲的很清楚。 我们看几个常用的。

 

先创建CNDBA的表,然后在inmemory

SQL> create table cndba as select * from dba_objects;
Table created.
 
SQL> alter table cndba inmemory;
Table altered.

 

http://www.cndba.cn/cndba/dave/article/234

 

通过v$im_segments v$im_user_segments 视图可以查看当前在im column store中的对象:

 

SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
no rows selected

 

 

这里没有返回,根据我们上节理论的说明,默认的策略,是当对象第一次使用的时候,才会加载到IM中。

 

这个我们可以通过dba_tables 视图来确认,在12c中,该视图多了几个与IM 有关的列:

 

SQL> desc dba_tables;
……
INMEMORY                                                                           VARCHAR2(8)
INMEMORY_PRIORITY                                                                VARCHAR2(8)
INMEMORY_DISTRIBUTE                                                                    VARCHAR2(15)
INMEMORY_COMPRESSION                                                               VARCHAR2(17)
INMEMORY_DUPLICATE                                                             VARCHAR2(13)
 
SQL> col table_name for a10
SQL> select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name='CNDBA';
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR QUERY LOW     NO DUPLICATE
 
 
当然,v$im_segments 视图也有这几个段。
 
SQL> desc v$im_segments
 Name                                                                         Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 OWNER                                                                                VARCHAR2(128)
 SEGMENT_NAME                                                                       VARCHAR2(128)
 PARTITION_NAME                                                                    VARCHAR2(128)
 SEGMENT_TYPE                                                                          VARCHAR2(18)
 TABLESPACE_NAME                                                                   VARCHAR2(30)
 INMEMORY_SIZE                                                                       NUMBER
 BYTES                                                                                   NUMBER
 BYTES_NOT_POPULATED                                                                  NUMBER
 POPULATE_STATUS                                                                     VARCHAR2(9)
 INMEMORY_PRIORITY                                                             VARCHAR2(8)
 INMEMORY_DISTRIBUTE                                                                 VARCHAR2(15)
 INMEMORY_DUPLICATE                                                                   VARCHAR2(13)
 INMEMORY_COMPRESSION                                                            VARCHAR2(17)
 CON_ID                                                                              NUMBER
 
手工扫描一下CNDBA: 
SQL> select count(1) from cndba;
 
  COUNT(1)
----------
     90955
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
no rows selected

 

这里还是为空,想了一会,终于明白咋回事,我们这个CNDBA 表是在系统用户下创建的。验证:

SQL> col owner for a15
SQL> select owner,tablespace_name from dba_tables where table_name='CNDBA';
 
OWNER             TABLESPACE_NAME
--------------- ------------------------------
SYS            SYSTEM

 

所以,不能加载到IM 所以先了解这么多,后面在整实验环境的时候,在测试。

 

当然v$IM_COLUMN_LEVEL视图,该视图能够显示列的信息:

 http://www.cndba.cn/cndba/dave/article/234

SQL> desc v$IM_COLUMN_LEVEL
 Name                                                                         Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 INST_ID                                                                      NUMBER
 OWNER                                                                                VARCHAR2(31)
 OBJ_NUM                                                                           NUMBER
 TABLE_NAME                                                                              VARCHAR2(31)
 SEGMENT_COLUMN_ID                                                                    NUMBER
 COLUMN_NAME                                                                        VARCHAR2(31)
 INMEMORY_COMPRESSION                                                            VARCHAR2(26)
 CON_ID                                                                              NUMBER

 

 

3         准备测试环境

 

这里我们单独创建一个PDB,然后创建独立的用户,和表空间,进行测试。

 

SQL> create pluggable database im admin user cndba identified by cndba file_name_convert=('pdbseed','im');
Pluggable database created.
 
SQL> show pdbs
 
    CON_ID CON_NAME                            OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
          2 PDB$SEED                       READ ONLY  NO
          3 PDB1                      READ WRITE NO
          4 IM                                      MOUNTED
 
SQL> alter pluggable database im open;
Pluggable database altered.
 
SQL> show pdbs
 
    CON_ID CON_NAME                            OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
          2 PDB$SEED                       READ ONLY  NO
          3 PDB1                      READ WRITE NO
          4 IM                                      READ WRITE NO
SQL>
 
QL> select file_name from dba_data_files;
 
FILE_NAME
------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/dave/im/system01.dbf
/u01/app/oracle/oradata/dave/im/sysaux01.dbf
 
SQL> create tablespace im datafile '/u01/app/oracle/oradata/dave/im/im.dbf' size 100m;
Tablespace created.
 
SQL> create user im identified by im default tablespace im;
User created.
 
SQL> grant connect,resource,dba to im;
Grant succeeded.

环境ok,准备测试。

 

4         表级的IM 管理

 http://www.cndba.cn/cndba/dave/article/234

4.1        创建表时指定IM

SQL> conn im/im@im
Connected.
SQL> show con_name
 
CON_NAME
------------------------------
IM
 
SQL> create table cndba inmemory as select * from dba_objects;
Table created.
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
no rows selected
 
SQL> select count(1) from cndba;
 
  COUNT(1)
----------
     90937
 
SQL> col segment_name for a15
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
OWNER             SEGMENT_NAME     ORIG_SIZE IN_MEM_SIZE COMP_RATIO
--------------- --------------- ---------- ----------- ----------
IM             CNDBA                13631488     4325376 3.15151515

 

这次正常显示了。

 

4.2        使用alter 来修改

 

SQL> create table anqing as select * from dba_objects;
Table created.
 
SQL> alter table anqing inmemory;
 
Table altered.
 
SQL> select count(1) from anqing;
 
  COUNT(1)
----------
     90938
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
OWNER             SEGMENT_NAME     ORIG_SIZE IN_MEM_SIZE COMP_RATIO
--------------- --------------- ---------- ----------- ----------
IM             ANQING              13631488     4325376 3.15151515
IM             CNDBA                13631488     4325376 3.15151515

 

 

4.3        修改IM属性

 

根据上篇理论的说明,在单实例情况下,IM 对象有2个属性:压缩级别和加载的优先级。

优先级默认为NONE,即在第一次扫描的时候才会加载。

默认的压缩级别是FOR QUERY LOW,提供最大的查询性能。

 

查询当前的默认值:

SQL> select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name in ('CNDBA','ANQING');
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR QUERY LOW     NO DUPLICATE
ANQING      ENABLED  NONE     AUTO       FOR QUERY LOW     NO DUPLICATE
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
OWNER             SEGMENT_NAME     ORIG_SIZE IN_MEM_SIZE COMP_RATIO
--------------- --------------- ---------- ----------- ----------
IM             ANQING              13631488     4325376 3.15151515
IM             CNDBA                13631488     4325376 3.15151515

 

4.3.1      修改压缩级别

 

SQL> alter table cndba inmemory memcompress for capacity high;
 
Table altered.
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
OWNER             SEGMENT_NAME     ORIG_SIZE IN_MEM_SIZE COMP_RATIO
--------------- --------------- ---------- ----------- ----------
IM             ANQING              13631488     4325376 3.15151515
 
注意这里我们修改之后,对象就从IM中移除了,但查询dba_tables 视图,还是可以看到状态:
SQL> select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name in ('CNDBA','ANQING');
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR CAPACITY HIGH NO DUPLICATE
ANQING      ENABLED  NONE     AUTO       FOR QUERY LOW     NO DUPLICATE
 
手工扫描一次:
SQL> select count(1) from cndba;
 
  COUNT(1)
----------
     90937
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
OWNER             SEGMENT_NAME     ORIG_SIZE IN_MEM_SIZE COMP_RATIO
--------------- --------------- ---------- ----------- ----------
IM             ANQING              13631488     4325376 3.15151515
IM             CNDBA                13631488     1179648 11.5555556

 

我们看到压缩的对比了,因为这2个对象,是从同一张表里复制出来的。

 

4.3.2      修改加载优先级

 

 

SQL> alter table anqing inmemory priority high;
 
Table altered.
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
OWNER             SEGMENT_NAME     ORIG_SIZE IN_MEM_SIZE COMP_RATIO
--------------- --------------- ---------- ----------- ----------
IM             CNDBA                13631488     1179648 11.5555556
 
SQL> select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name in ('CNDBA','ANQING');
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR CAPACITY HIGH NO DUPLICATE
ANQING      ENABLED  HIGH     AUTO        FOR QUERY LOW     NO DUPLICATE
 
同样修改之后,anqing 表也从IM中移除了。由此,我们也可以得出结论,任何属性的修改,都会导致对象从IM中移除。 等待下一次加载。
 
SQL> select count(1) from anqing;
 
  COUNT(1)
----------
     90938
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
OWNER             SEGMENT_NAME     ORIG_SIZE IN_MEM_SIZE COMP_RATIO
--------------- --------------- ---------- ----------- ----------
IM             ANQING              13631488     4325376 3.15151515
IM             CNDBA                13631488     1179648 11.5555556

 

 

4.3.3      同时修改2个属性

 

还是以anqing 这个表为例:

 

SQL> alter table anqing inmemory memcompress for capacity low priority low;
 
Table altered.
 
SQL> select count(1) from anqing;
 
  COUNT(1)
----------
     90938
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
OWNER             SEGMENT_NAME     ORIG_SIZE IN_MEM_SIZE COMP_RATIO
--------------- --------------- ---------- ----------- ----------
IM             ANQING              13631488     2228224 6.11764706
IM             CNDBA                13631488     1179648 11.5555556
 
SQL> select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name in ('CNDBA','ANQING');
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR CAPACITY HIGH NO DUPLICATE
ANQING      ENABLED  LOW      AUTO       FOR CAPACITY LOW  NO DUPLICATE

 

4.3.4      验证属性

 http://www.cndba.cn/cndba/dave/article/234

根据优先级属性的特点,当设置为非NONE时,会在实例启动时自动加载。

 

4.3.4.1         重启PDB

 

SQL> alter pluggable database im close;
 
Pluggable database altered.
 
SQL> show pdbs
 
    CON_ID CON_NAME                            OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
          2 PDB$SEED                       READ ONLY  NO
          3 PDB1                      READ WRITE NO
          4 IM                                      MOUNTED
SQL> alter pluggable database im open;
 
Pluggable database altered.
 
SQL> show pdbs
 
    CON_ID CON_NAME                            OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
          2 PDB$SEED                       READ ONLY  NO
          3 PDB1                      READ WRITE NO
          4 IM                                      READ WRITE NO
 
SQL> alter session set container=im;
 
Session altered.
 
SQL> show user
USER is "SYS"
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
no rows selected
 
SQL> conn im/im@im
Connected.
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
no rows selected
 
SQL> select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name in ('CNDBA','ANQING');
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR CAPACITY HIGH NO DUPLICATE
ANQING      ENABLED  LOW      AUTO       FOR CAPACITY LOW  NO DUPLICATE
 
SQL>

 

我们看到重启PDB,没有效果。

 

4.3.4.2         重启CDB

 

SQL> alter session set container=CDB$ROOT;
 
Session altered.
 
SQL> startup force;
ORACLE instance started.
 
Total System Global Area 1627389952 bytes
Fixed Size              2924976 bytes
Variable Size                956304976 bytes
Database Buffers      436207616 bytes
Redo Buffers                13848576 bytes
In-Memory Area                  218103808 bytes
Database mounted.
Database opened.
SQL> show pdbs
 
    CON_ID CON_NAME                            OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
          2 PDB$SEED                       READ ONLY  NO
          3 PDB1                      MOUNTED
          4 IM                                      MOUNTED
SQL> alter pluggable database im open;
 
Pluggable database altered.
 
SQL> show pdbs
 
    CON_ID CON_NAME                            OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
          2 PDB$SEED                       READ ONLY  NO
          3 PDB1                      MOUNTED
          4 IM                                      READ WRITE NO
SQL> alter session set container=im;
 
Session altered.
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
no rows selected

 

--切换到im用户,可以正常查询到:

SQL> conn im/im@im;
Connected.
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
OWNER             SEGMENT_NAME     ORIG_SIZE IN_MEM_SIZE COMP_RATIO
--------------- --------------- ---------- ----------- ----------
IM             ANQING              13631488     2228224 6.11764706
 
SQL> select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name in ('CNDBA','ANQING');
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR CAPACITY HIGH NO DUPLICATE
ANQING      ENABLED  LOW      AUTO       FOR CAPACITY LOW  NO DUPLICATE

 http://www.cndba.cn/cndba/dave/article/234

通过实验,可以得出结论,这里的优先级,仅对重启CDB有效。

 

 

4.4        对表中的不同列采取不同的IM策略

 

 

4.4.1      创建表的时候指定IM策略

 

SQL> create table huaining
( c1 number,
c2 number,
c3 varchar2(10),
c4 clob )
inmemory memcompress for query
no inmemory(c4)
inmemory memcompress for capacity high(c2);
 
Table created.
 
SQL> select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name in ('CNDBA','ANQING','HUAINING');
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR CAPACITY HIGH NO DUPLICATE
ANQING      ENABLED  LOW      AUTO       FOR CAPACITY LOW  NO DUPLICATE
HUAINING   ENABLED  NONE     AUTO              FOR QUERY LOW     NO DUPLICATE

 

--查看列的IM情况:

SQL> set pages 200
SQL> col column_name for a10
SQL> select * from v$im_column_level;
 
   INST_ID OWNER              OBJ_NUM TABLE_NAME SEGMENT_COLUMN_ID COLUMN_NAM INMEMORY_COMPRESSION        CON_ID
---------- --------------- ---------- ---------- ----------------- ---------- -------------------------- ----------
          1 IM                          91816 HUAINING                        1 C1              DEFAULT                                     4
          1 IM                          91816 HUAINING                        2 C2              FOR CAPACITY HIGH             4
          1 IM                          91816 HUAINING                        3 C3              DEFAULT                                     4
          1 IM                          91816 HUAINING                        4 C4              NO INMEMORY                        4

 

4.4.2      使用alter 修改IM策略

 

SQL> alter table huaining
   inmemory memcompress for query high(c1)
   inmemory memcompress for capacity low(c2)
   no inmemory (c3);
 
Table altered.
 
SQL> select * from v$im_column_level;
 
   INST_ID OWNER              OBJ_NUM TABLE_NAME SEGMENT_COLUMN_ID COLUMN_NAM INMEMORY_COMPRESSION        CON_ID
---------- --------------- ---------- ---------- ----------------- ---------- -------------------------- ----------
          1 IM                          91816 HUAINING                        1 C1              FOR QUERY HIGH                             4
          1 IM                          91816 HUAINING                        2 C2              FOR CAPACITY LOW                         4
          1 IM                          91816 HUAINING                        3 C3              NO INMEMORY                        4
          1 IM                          91816 HUAINING                        4 C4              NO INMEMORY                        4
 
SQL> select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name in ('CNDBA','ANQING','HUAINING');
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR CAPACITY HIGH NO DUPLICATE
ANQING      ENABLED  LOW      AUTO       FOR CAPACITY LOW  NO DUPLICATE
HUAINING   ENABLED  NONE     AUTO              FOR QUERY LOW     NO DUPLICATE
 
SQL>

 

 

 

4.5        取消对象IM

 

对于已经启用IM特定的对象,也可以取消:

 

SQL> select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name in ('CNDBA','ANQING','HUAINING');
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR CAPACITY HIGH NO DUPLICATE
ANQING      ENABLED  LOW      AUTO       FOR CAPACITY LOW  NO DUPLICATE
HUAINING   ENABLED  NONE     AUTO              FOR QUERY LOW     NO DUPLICATE
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
OWNER             SEGMENT_NAME     ORIG_SIZE IN_MEM_SIZE COMP_RATIO
--------------- --------------- ---------- ----------- ----------
IM             ANQING              13631488     2228224 6.11764706
 
SQL> alter table anqing no inmemory;
 
Table altered.
 
SQL> select v.owner, v.segment_name,v.bytes orig_size,v.inmemory_size in_mem_size,v.bytes / v.inmemory_size comp_ratio from v$im_segments v;
 
no rows selected
 
SQL>select table_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from dba_tables where table_name in ('CNDBA','ANQING','HUAINING');
 
TABLE_NAME INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
---------- -------- -------- --------------- ----------------- -------------
CNDBA        ENABLED  NONE     AUTO       FOR CAPACITY HIGH NO DUPLICATE
ANQING      DISABLED
HUAINING   ENABLED  NONE     AUTO              FOR QUERY LOW     NO DUPLICATE

 

5         表空间级的IM 管理

 http://www.cndba.cn/cndba/dave/article/234

可以在创建表空间的时候指定INMEMORY选项,来启用IM功能,也可以使用ALTER TABLESPACE来启用创建时没有启用IM的表空间。在表空间启用IM column store的情况下, 其上所有的表和物化视图都默认启用IM

 

         当表空间启用IM的时,也可以对表或者物化视图指定不同的IM策略。这样这些独立的表就会按照自己指定的IM策略在运行,而不是使用表空间默认的策略。

 

当然,取消IM功能也类似,在CREATE TABLESPACE 或者 ALTER TABLESPACE的时候指定NO IMMEMORY选项即可。

 

IM属性,可以通过dba_tablespaces视图查看:

 

SQL> desc dba_tablespaces;
 Name                                                                                 Null?         Type
 ----------------------------------------------------------------------- -------- ------------------------------------------------
 TABLESPACE_NAME                                                                NOT NULL VARCHAR2(30)
……
DEF_INMEMORY                                                                                  VARCHAR2(8)
 DEF_INMEMORY_PRIORITY                                                                    VARCHAR2(8)
 DEF_INMEMORY_DISTRIBUTE                                                               VARCHAR2(15)
 DEF_INMEMORY_COMPRESSION                                                                   VARCHAR2(17)
 DEF_INMEMORY_DUPLICATE                                                                VARCHAR2(13)

 

使用默认IM策略(MEMCOMPRESS FOR QUERYPRIORITY NONE)来创建表空间:

SQL> create tablespace ahdba  datafile 'ahdba1.dbf' size 10m online default inmemory;
Tablespace created.

 http://www.cndba.cn/cndba/dave/article/234

--查看IM策略:

http://www.cndba.cn/cndba/dave/article/234

SQL>select tablespace_name,def_inmemory,def_inmemory_priority,def_inmemory_distribute,def_inmemory_compression from dba_tablespaces;
 
TABLESPACE_NAME               DEF_INME DEF_INME DEF_INMEMORY_DI DEF_INMEMORY_COMP
------------------------------ -------- -------- --------------- -----------------
SYSTEM                             DISABLED
SYSAUX                              DISABLED
TEMP                                 DISABLED
IM                              DISABLED
AHDBA                              ENABLED   NONE        AUTO                FOR QUERY LOW

 

使用ALTER TABLESPACE 修改IM策略:

SQL> alter tablespace ahdba default inmemory memcompress for capacity high priority low;
 
Tablespace altered.
 
SQL> select tablespace_name,def_inmemory,def_inmemory_priority,def_inmemory_distribute,def_inmemory_compression from dba_tablespaces;
 
TABLESPACE_NAME               DEF_INME DEF_INME DEF_INMEMORY_DI DEF_INMEMORY_COMP
------------------------------ -------- -------- --------------- -----------------
SYSTEM                             DISABLED
SYSAUX                              DISABLED
TEMP                                 DISABLED
IM                              DISABLED
AHDBA                              ENABLED   LOW  AUTO                FOR CAPACITY HIGH

 

取消IM策略:

SQL> alter tablespace ahdba default no inmemory;
 
Tablespace altered.
 
SQL> select tablespace_name,def_inmemory,def_inmemory_priority,def_inmemory_distribute,def_inmemory_compression from dba_tablespaces;
 
TABLESPACE_NAME               DEF_INME DEF_INME DEF_INMEMORY_DI DEF_INMEMORY_COMP
------------------------------ -------- -------- --------------- -----------------
SYSTEM                             DISABLED
SYSAUX                              DISABLED
TEMP                                 DISABLED
IM                              DISABLED
AHDBA                              DISABLED

 

6         物化视图级的IM 管理

 

同表空间一样,也可以对物化视图启用IM功能,可以在CREATE MATERIALIZED VIEW 或者 ALTER MATERIALIZED VIEW 时加上INMEMORY启用,加NO INMEMORY 表示取消。

 

 

--创建MV时指定IM:
SQL> create materialized view mv_dave inmemory as select * from cndba;
Materialized view created.
 
 
SQL> select segment_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from user_segments where segment_name='MV_DAVE';
 
SEGMENT_NAME    INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
--------------- -------- -------- --------------- ----------------- -------------
MV_DAVE       ENABLED  NONE     AUTO              FOR QUERY LOW     NO DUPLICATE
 
--修改MV的IM属性:
SQL> alter materialized view mv_dave inmemory priority high;
 
Materialized view altered.
 
SQL> select segment_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from user_segments where segment_name='MV_DAVE';
 
SEGMENT_NAME    INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
--------------- -------- -------- --------------- ----------------- -------------
MV_DAVE       ENABLED  HIGH      AUTO              FOR QUERY LOW     NO DUPLICATE
 
 
--取消IM:
 
SQL> alter materialized view mv_dave no inmemory;
 
Materialized view altered.
 
SQL> select segment_name,inmemory,inmemory_priority,inmemory_distribute,inmemory_compression,inmemory_duplicate  from user_segments where segment_name='MV_DAVE';
 
SEGMENT_NAME    INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
--------------- -------- -------- --------------- ----------------- -------------
MV_DAVE       DISABLED

 

 

 

至此关于IM 的实验结束,下篇我们看IM的进一步说明。

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2283
    原创
  • 3
    翻译
  • 579
    转载
  • 196
    评论
  • 访问:8184176次
  • 积分:4428
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ