在之前的一篇文章中,我们看了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之后才讲,不过先讲,在后面的时候的,可以方便查看。
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_AREA。
每个视图的作用,可以查看官方手册,都讲的很清楚。 我们看几个常用的。
先创建CNDBA的表,然后在inmemory:
SQL> create table cndba as select * from dba_objects; Table created. SQL> alter table cndba inmemory; Table altered.
通过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视图,该视图能够显示列的信息:
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 管理
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 验证属性
根据优先级属性的特点,当设置为非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
通过实验,可以得出结论,这里的优先级,仅对重启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 管理
可以在创建表空间的时候指定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 QUERY,PRIORITY NONE)来创建表空间:
SQL> create tablespace ahdba datafile 'ahdba1.dbf' size 10m online default inmemory; Tablespace created.
--查看IM策略:
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的进一步说明。
版权声明:本文为博主原创文章,未经博主允许不得转载。