Oracle Database In-Memory Option  (설명과 설정 방법)

Oracle Database In-Memory Option이란?

1.Dual Format

2.In-Memory Column Store

In-Memory 설정 방법

파라미터 설정

INMEMORY_SIZE

In-Memory 옵션의 Priority 속성

In-Memory 옵션의 Compression 속성

Test

1. In-Memory 설정을 위해 inmemory_size 값 설정
2. 100M 이하 설정 제약
3. 테이블스페이스 레벨에서 In-Memory 설정
4. 테이블 레벨에서 In-Memory 옵션 설정
5. Column 레벨에서 In-Memory 옵션 설정

참고)

6. In-Memory 옵션의 Compression 속성 설정

 

 

Oracle Database In-Memory Option이란?

Oracle Database In-Memory는 전통적인 Row Format 방식에 Column Format 방식을 추가로 지원해 OLTP, DW 업무가 혼재된 시스템에서 트랜잭션 처리와, 데이터 분석 등의 모든 업무 프로세스를 지원한다. Oracle은 두가지 Format 사용을 Dual Format 지원이라고 이야기 한다. In-Memory 기능은 오라클 12.1.0.2 버전부터 사용이 가능하다.

기존 애플리케이션의 변경 없이 분석 쿼리와 OLTP 트랜잭션 처리 속도를 모두 높일 수 있다고 한다. 옵티마이저는 자동으로 분석 쿼리의 경우 Column Format으로 OLTP의 경우 Row Format으로 사용하게 하여 업무 프로세스를 빠르게 수행할 수 있도록 해 준다.

오라클은 Dual Format 아키텍처를 사용한다고 해서 필요로 하는 메모리가 두배로 늘어난 것이 아니라 약 20% 정도의 추가 사용할 것이라고 예상하고 있다.

   1. Dual Format

in_memory_01.png

      A. Row Format

  • Oracle database의 전통적인 방식으로 새로운 트랜잭션이나 레코드가 신규 Row 형태로 저장
  • OLTP 환경에 적합한 형태임.

 

      B. Column Format

  • 트랜잭션이나 레코드의 각 컬럼을 별도 컬럼 구조에 저장.
  • 분석 업무에 적합항며 적은 수의 컬럼과 많은 데이터 셋을 조회할 때 유리.
  • DML 작업의 경우 변경 컬럼이 다수개일 경우 각 컬럼에 대응하는 컬럼 구조에 변경을 해야하기 때문에 적합치 않음.

 

   2. In-Memory Column Store(IM Column Store)

  • 트랜잭션이나 레코드의 각 컬럼을 별도 컬럼 구조로 저장하는 메모리 영역을 말함.
  • SGA 내 In-Memory Area로 일컫어 지는 새로운 구성요소임.
  • Buffer Cache를 대체하는 것이 아니라, Row Format과 Column Format을 저장할 수 있도록 보조해 주는 역할을 함.
  • Static Pool이며 Static Parameter INMEMORY_SIZE 초기화 파라미터로 설정하며 재시작을 해야 변경값이 적용됨.
  • Static Pool이기 때문에 AMM(Automatic Memory Management, 즉 MEMORY_TARGET 값에 영향을 받지 않음.
  • 최소 100M 이상의 값을 가져야 함
  • In-Memory Area는 1M(IMCU Pool), 64K(SMU Pool) Pool로 나뉨(각 Pool 크기는 내부적으로 설정됨)
  • 1M Pool => Column Format의 실제 Data, 64K Pool => Object에 대한 Metadata
  • In-Memory Advisor을 이용하여 적정 사이즈를 산정할 수 있음.

In-Memory 설정 방법

파라미터 설정

INMEMORY_SIZE

Property Description
Parameter type Big integer
Syntax INMEMORY_SIZE = integer[K|M|G]
Default value 0
Modifiable ALTER SYSTEM
Range of values 0 to the amount of memory left in the SGA after other allocations
Basic No
Oracle RAC All instances should use the same value.

 

  • In-Memory Column Store(IM Column Store) 크기를 설정
  • Default 값은 0 이며 이는 In-Memory Option을 사용하지 않는다는 걸 의미함(최소 100M 이상이어야 함).
  • Static Parameter 이므로 적용하려면 재시작해야 함.
  • 최소 IM Column Store에 Column Format으로 사용할 대상 테이블의 합보다 커야하며 대상 테이블의 사이즈 증가도 고려해야 함.
  • PDB 별로 IM Column Size 최대값을 제한하기 우해 PDF 별로 값을 설정할 수 있음.
  • 각 PDB의 값의 합이 CDB 값과 같을 필요는 없으며 클수도 있음.
  • PDB에 값이 설정되어 있지 않다면 CDB 설정 값을 상속 받으며 PDB 하나에서 모든 값을 다 사용할 수도 있음.
  • IM Column Store는 IMCU(In-Memory Compression Units)로 구성된다.

 

In-Memory 옵션의 Priority 속성

Priority 값에 따라서 IM Column Store에 Load 되는 시점이 결정된다.

 

Priority Description
CRITICAL DB가 Open 되자 마자 IM Column Store에 Load 됨
HIGH CRITICAL 옵션의 Object가 Load 되고 난 후 남아 있는 공간에 Load 됨
MEDIUM CRITICAL, HIGH 옵션의 Object가 Load 되고 난 후 남아 있는 공간에 Load 됨
LOW CRITICAL, HIGH, MEDIUM 옵션의 Object가 Load 되고 난 후 남아 있는 공간에 Load 됨
NONE IM Column Store에 공간이 남아 있는 경우 Object가 최초 스캔된 후 Load 됨

 

제약사항(IM Column Store에 Load 되지 못함)

  • SYS 소유의 Object 이거나 SYSTEM, SYSAUX 테이블스페이스에 저장된 Object
  • IOT
  • Cluster 테이블
  • LONG 데이터 타입 컬럼
  • 별도 저장된 LOB
  • 64K 보다 작은 사이즈의 테이블(1M chunk의 낭비를 막기 위함)

 

In-Memory 옵션의 Compression 속성

쿼리의 성능과 공간 절약을 위해 사용 가능한 속성임

압축 비율은 최소 2배에서 최대 20배까지 될 수 있다고 함

 

Compression Level Description
NO MEMCOMPRESS 압축하지 않음
MEMCOMPRESS FOR DML DML 성능에 최적화를 위한 최소 압축
MEMCOMPRESS FOR QUERY LOW 기본값이며 쿼리 성능에 최적화를 위한 압축
MEMCOMPRESS FOR QUERY HIGH 공간 절약과 쿼리 성능에 최적화를 위한 압축
MEMCOMPRESS FOR CAPACITY LOW 공간 절약과 성능 중 공간 절약을 다소 상위에 둔 압축
MEMCOMPRESS FOR CAPACITY HIGH 공간 절약 최적화를 위한 압축

 

 

Test

1. In-Memory 설정을 위해 inmemory_size 값 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
-- default 설정되어 있지 않음
SQL> show parameter inmemory
NAME                                        TYPE        VALUE  
------------------------------------------- ----------- --------
inmemory_clause_default                     string
inmemory_force                              string      DEFAULT
inmemory_max_populate_servers               integer    
inmemory_query                              string      ENABLE
inmemory_size                               big integer
inmemory_trickle_repopulate_servers_percent integer     1
optimizer_inmemory_aware                    boolean     TRUE
-- Static 파라미터 여부 확인
SQL> ALTER SYSTEM SET INMEMORY_SIZE = 500M SCOPE=BOTH;
ALTER SYSTEM SET INMEMORY_SIZE = 500M SCOPE=BOTH
*
1행에 오류:
ORA-02097: 지정된 값이 부적당해서 매개변수를 수정할 없습니다
ORA-02095: 지정된 초기화 매개변수를 수정할 없습니다
SQL> ALTER SYSTEM SET INMEMORY_SIZE = 500M SCOPE=SPFILE;
시스템이 변경되었습니다.
-- 재시작 필요
SQL> SHUTDOWN IMMEDIATE
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> STARTUP
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 3221225472 bytes
Fixed Size                  3050800 bytes
Variable Size            1241514704 bytes
Database Buffers         1426063360 bytes
Redo Buffers               13725696 bytes
In -Memory Area            536870912 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SQL> SHOW PARAMETER INMEMORY
NAME                                        TYPE        VALUE
------------------------------------------- ----------- ---------
inmemory_clause_default                     string
inmemory_force                              string      DEFAULT
inmemory_max_populate_servers               integer     2
inmemory_query                              string      ENABLE
inmemory_size                               big integer 512M
inmemory_trickle_repopulate_servers_percent integer     1
optimizer_inmemory_aware                    boolean     TRUE
SQL> SHOW SGA
Total System Global Area 3221225472 bytes
Fixed Size                  3050800 bytes
Variable Size            1124074192 bytes
Database Buffers         1543503872 bytes
Redo Buffers               13725696 bytes
In -Memory Area            536870912 bytes
-- Container, Seed, PDB 설정된 모습
SQL> SELECT A.POOL, A.ALLOC_BYTES, A.USED_BYTES, A.POPULATE_STATUS, A.CON_ID, B. NAME
   2  FROM V$INMEMORY_AREA A, V$CONTAINERS B
   3  WHERE A.CON_ID = B.CON_ID;
POOL       ALLOC_BYTES USED_BYTES POPULATE_STATUS  CON_ID NAME
---------- ----------- ---------- ---------------- ------ ---------
1MB POOL     418381824          0 DONE                  1 CDB$ROOT
64KB POOL    100663296          0 DONE                  1 CDB$ROOT
1MB POOL     418381824          0 DONE                  2 PDB$SEED
64KB POOL    100663296          0 DONE                  2 PDB$SEED
1MB POOL     418381824          0 DONE                  3 PDBORCL
64KB POOL    100663296          0 DONE                  3 PDBORCL
6 행이 선택되었습니다.
SQL> SELECT * FROM V$SGA;
NAME                      VALUE     CON_ID
-------------------- ---------- ----------
Fixed Size              3050800          0
Variable Size        1124074192          0
Database Buffers     1543503872          0
Redo Buffers           13725696          0
In -Memory Area        536870912          0
SQL> SELECT CON_ID, NAME , VALUE FROM V$SGA;
     CON_ID NAME                      VALUE
---------- -------------------- ----------
          0 Fixed Size              3050800
          0 Variable Size        1124074192
          0 Database Buffers     1543503872
          0 Redo Buffers           13725696
          0 In -Memory Area        536870912

 

2. 100M 이하 설정 제약

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
-- 100M 이하 세팅 테스트
SQL> ALTER SYSTEM SET INMEMORY_SIZE = 50M SCOPE=SPFILE;
시스템이 변경되었습니다.
SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL> startup
ORA-64353: in -memory area size cannot be less than 100MB
SQL> CREATE PFILE FROM SPFILE;
파일이 생성되었습니다.
SQL> CREATE SPFILE FROM PFILE;
파일이 생성되었습니다.
SQL> startup
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 3221225472 bytes
Fixed Size                  3050800 bytes
Variable Size            1241514704 bytes
Database Buffers         1426063360 bytes
Redo Buffers               13725696 bytes
In -Memory Area            536870912 bytes
데이터베이스가 마운트되었습니다.
데이터베이스가 열렸습니다.
SQL> ALTER SESSION SET CONTAINER = PDBORCL;
세션이 변경되었습니다.
SQL> SELECT SYS_CONTEXT ( 'USERENV' , 'CON_NAME' ) FROM DUAL;
SYS_CONTEXT( 'USERENV' , 'CON_NAME' )
----------------------------------------
PDBORCL
SQL> show sga
Total System Global Area 3221225472 bytes
Fixed Size                  3050800 bytes
Variable Size            1124074192 bytes
Database Buffers         1543503872 bytes
Redo Buffers               13725696 bytes
In -Memory Area            536870912 bytes
SQL> select * from v$inmemory_area;
POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                     418381824          0 DONE                                3
64KB POOL                    100663296          0 DONE                                3
SQL>

 

3. 테이블스페이스 레벨에서 In-Memory 설정

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
--테스트 DB PDB OPEN 되어 있지 않아 OPEN 해줌
SQL> alter pluggable database open ;
플러그인할 있는 데이터베이스가 변경되었습니다.
-- In-Memory 옵션의 테이블스페이스 생성
SQL> CREATE TABLESPACE INMEMORY_TEST DEFAULT INMEMORY
   2  DATAFILE 'I:\APP\ORACLETEST\ORADATA\ORCL\ORCL\PDBORCL\INMEMORY_TEST.DBF' SIZE 200M;
테이블스페이스가 생성되었습니다.
SQL> CREATE USER IMTEST IDENTIFIED BY "imtest"
   2  DEFAULT TABLESPACE INMEMORY_TEST
   3  TEMPORARY TABLESPACE TEMP
   4  QUOTA UNLIMITED ON INMEMORY_TEST
   5  ACCOUNT UNLOCK;
사용자가 생성되었습니다.
SQL> GRANT DBA TO IMTEST;
권한이 부여되었습니다.
SQL> CREATE USER IMTEST IDENTIFIED BY "imtest"
   2  DEFAULT TABLESPACE INMEMORY_TEST
   3  TEMPORARY TABLESPACE TEMP
   4  QUOTA UNLIMITED ON INMEMORY_TEST
   5  ACCOUNT UNLOCK;
사용자가 생성되었습니다.
SQL> GRANT DBA TO IMTEST;
권한이 부여되었습니다.
SQL> CONN IMTEST/imtest@PDBORCL
연결되었습니다.
-- In-Memory 설정의 테이블스페이스인 INMEMORY_TEST에 테이블 생성
SQL> CREATE TABLE IM_TBS_LVL_CREATE
   2  TABLESPACE INMEMORY_TEST
   3  AS
   4  SELECT * FROM DBA_OBJECTS;
테이블이 생성되었습니다.
-- In-Memory Area 바로 Load 되는지 확인
SQL> SELECT * FROM V$INMEMORY_AREA;
POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                     418381824          0 DONE                                3
64KB POOL                    100663296          0 DONE                                3
-- Load 되어 있지 않아 Load 시키기 위해 테이블 조회함
SQL> SELECT COUNT (*) FROM IM_TBS_LVL_CREATE;
   COUNT (*)
----------
      91821
-- 다시 In-Memory Area Load 되어 있는지 여부 확인
SQL> SELECT * FROM V$INMEMORY_AREA;
POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                     418381824    4194304 DONE                                3
64KB POOL                    100663296     131072 DONE                                3
-- Load 되어 있는 것을 확인하고 그렇게 되었는지 확인
-- default INMEMORY_PRIORITY가 NONE 되어 있기 때문에 최초 Object
-- 스캔될 Load
SQL> COL TABLE_NAME FOR A20
SQL> SELECT TABLE_NAME, INMEMORY, INMEMORY_PRIORITY
   2  FROM USER_TABLES
   3  WHERE TABLE_NAME = 'IM_TBS_LVL_CREATE' ;
TABLE_NAME           INMEMORY INMEMORY_PRIORITY
-------------------- -------- -----------------
IM_TBS_LVL_CREATE    ENABLED  NONE
SQL>

 

4. 테이블 레벨에서 In-Memory 옵션 설정

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
-- 일반 테이블을 만들경우 In-Memory 영역에 Load 되지 않으며 영향이 없음
SQL> CREATE TABLE IMTEST.SALES
   2  TABLESPACE USERS
   3  AS
   4  SELECT * FROM SH.SALES;
테이블이 생성되었습니다.
SQL> SELECT COUNT (*) FROM SALES;
   COUNT (*)
----------
     918843
SQL> SELECT * FROM V$INMEMORY_AREA;
POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                     418381824    4194304 DONE                                3
64KB POOL                    100663296     131072 DONE                                3
-- 테이블 레벨에서 In-Memory 옵션 설정함
SQL> ALTER TABLE IMTEST.SALES INMEMORY;
테이블이 변경되었습니다.
-- 일반 테이블을 In-Memory 옵션으로 변경해도 바로 Load 되지 않음
SQL> SELECT * FROM V$INMEMORY_AREA;
POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                     418381824    4194304 DONE                                3
64KB POOL                    100663296     131072 DONE                                3
-- Scan 발생후 Load
SQL> SELECT COUNT (*) FROM SALES;
   COUNT (*)
----------
     918843
SQL> SELECT * FROM V$INMEMORY_AREA;
POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                     418381824   11534336 DONE                                3
64KB POOL                    100663296     327680 DONE                                3
-- In-Memory Area Load Object 리스트 확인
SQL> COL OWNER FOR A10
SQL> COL SEGMENT_NAME FOR A20
SQL> SELECT OWNER, SEGMENT_NAME, BYTES, BYTES/INMEMORY_SIZE COM_RATIO
   2  FROM V$IM_SEGMENTS;
OWNER      SEGMENT_NAME              BYTES  COM_RATIO
---------- -------------------- ---------- ----------
IMTEST     IM_TBS_LVL_CREATE      13631488 3.15151515
IMTEST     SALES                  37748736 5.00869565

 

5. Column 레벨에서 In-Memory 옵션 설정

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-- Column 레벨로 In-Memory 옵션 설정 사항 확인
SQL> SELECT OWNER, TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION
   2  FROM V$IM_COLUMN_LEVEL;
선택된 레코드가 없습니다.
-- Column 레벨에서 In-Memory 옵션 제외 대상 컬럼을 제외해줌
SQL> ALTER TABLE SALES NO INMEMORY(PROD_ID, AMOUNT_SOLD, CHANNEL_ID);
테이블이 변경되었습니다.
SQL> SELECT * FROM V$INMEMORY_AREA;
POOL                       ALLOC_BYTES USED_BYTES POPULATE_STATUS                CON_ID
-------------------------- ----------- ---------- -------------------------- ----------
1MB POOL                     418381824   11534336 DONE                                3
64KB POOL                    100663296     327680 DONE                                3
-- Column 레벨로 In-Memory 옵션 설정 사항 확인
SQL> COL OWNER FOR A10
SQL> COL SEGMENT_NAME FOR A20
SQL> SELECT OWNER, TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION
   2  FROM V$IM_COLUMN_LEVEL;
OWNER      TABLE_NAME           COLUMN_NAME                     INMEMORY_COMPRESSION
---------- -------------------- ------------------------------- --------------------------
IMTEST     SALES                PROD_ID                         NO INMEMORY
IMTEST     SALES                CUST_ID                         DEFAULT
IMTEST     SALES                TIME_ID                         DEFAULT
IMTEST     SALES                CHANNEL_ID                      NO INMEMORY
IMTEST     SALES                PROMO_ID                        DEFAULT
IMTEST     SALES                QUANTITY_SOLD                   DEFAULT
IMTEST     SALES                AMOUNT_SOLD                     NO INMEMORY
7 행이 선택되었습니다.
SQL>

 

참고) Column 레벨로 In-Memory 옵션을 지정할려고 했을 때 제외 방식이 아닌 경우 에러 발생함

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL> CREATE TABLE IMTEST.SALES
   2  TABLESPACE USERS
   3  AS
   4  SELECT * FROM SH.SALES;
테이블이 생성되었습니다.
SQL> ALTER TABLE SALES INMEMORY(PROD_ID);
ALTER TABLE SALES INMEMORY(PROD_ID)
*
1행에 오류:
ORA-64361: INMEMORY 절은 인메모리 테이블에 대해서만 지정할 있습니다.
SQL> ALTER TABLE SALES INMEMORY NO INMEMORY(PROD_ID, AMOUNT_SOLD, CHANNEL_ID);
테이블이 변경되었습니다.
SQL>

 

6. In-Memory 옵션의 Compression 속성 설정

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
-- Compression Level 별로 테이블 생성
SQL> CREATE TABLE IM_COMPRESS_TEST1
   2  TABLESPACE INMEMORY_TEST
   3  INMEMORY NO MEMCOMPRESS
   4  AS
   5  SELECT * FROM DBA_OBJECTS;
테이블이 생성되었습니다.
SQL> CREATE TABLE IM_COMPRESS_TEST2
   2  TABLESPACE INMEMORY_TEST
   3  INMEMORY MEMCOMPRESS FOR DML
   4  AS
   5  SELECT * FROM DBA_OBJECTS;
테이블이 생성되었습니다.
SQL> CREATE TABLE IM_COMPRESS_TEST3
   2  TABLESPACE INMEMORY_TEST
   3  INMEMORY MEMCOMPRESS FOR QUERY LOW
   4  AS
   5  SELECT * FROM DBA_OBJECTS;
테이블이 생성되었습니다.
SQL> CREATE TABLE IM_COMPRESS_TEST4
   2  TABLESPACE INMEMORY_TEST
   3  INMEMORY MEMCOMPRESS FOR QUERY HIGH
   4  AS
   5  SELECT * FROM DBA_OBJECTS;
테이블이 생성되었습니다.
SQL> CREATE TABLE IM_COMPRESS_TEST5
   2  TABLESPACE INMEMORY_TEST
   3  INMEMORY MEMCOMPRESS FOR CAPACITY LOW
   4  AS
   5  SELECT * FROM DBA_OBJECTS;
테이블이 생성되었습니다.
SQL> CREATE TABLE IM_COMPRESS_TEST6
   2  TABLESPACE INMEMORY_TEST
   3  INMEMORY MEMCOMPRESS FOR CAPACITY HIGH
   4  AS
   5  SELECT * FROM DBA_OBJECTS;
테이블이 생성되었습니다.
-- In-Memory Area Load 위해 조회함
SQL> SELECT COUNT (*) CNT FROM IM_COMPRESS_TEST1 UNION ALL
   2  SELECT COUNT (*) FROM IM_COMPRESS_TEST2 UNION ALL
   3  SELECT COUNT (*) FROM IM_COMPRESS_TEST3 UNION ALL
   4  SELECT COUNT (*) FROM IM_COMPRESS_TEST4 UNION ALL
   5  SELECT COUNT (*) FROM IM_COMPRESS_TEST5 UNION ALL
   6  SELECT COUNT (*) FROM IM_COMPRESS_TEST6;
        CNT
----------
      91823
      91824
      91825
      91826
      91827
      91828
6 행이 선택되었습니다.
-- 압축 비율과 사이즈를 확인함
SQL> select owner, segment_name, bytes, bytes/inmemory_size com_ratio
   2  from v$im_segments
   3  order by segment_name;
OWNER      SEGMENT_NAME              BYTES  COM_RATIO
---------- -------------------- ---------- ----------
IN_TEST    IM_COMPRESS_TEST1      13631488 1.16853933
IN_TEST    IM_COMPRESS_TEST2      13631488 1.28395062
IN_TEST    IM_COMPRESS_TEST3      13631488 3.15151515
IN_TEST    IM_COMPRESS_TEST4      13631488       4.16
IN_TEST    IM_COMPRESS_TEST5      13631488 6.11764706
IN_TEST    IM_COMPRESS_TEST6      13631488 6.11764706
IN_TEST    IM_TBS_LVL_CREATE      13631488 3.15151515
IN_TEST    SALES                  37748736 5.00869565
8 행이 선택되었습니다.
-- Compression Level 확인
SQL> select table_name, inmemory, inmemory_priority, inmemory_compression
   2  from user_tables
   3  order by table_name;
TABLE_NAME           INMEMORY INMEMORY INMEMORY_COMPRESS
-------------------- -------- -------- -----------------
IM_COMPRESS_TEST1    ENABLED  NONE     NO MEMCOMPRESS
IM_COMPRESS_TEST2    ENABLED  NONE     FOR DML
IM_COMPRESS_TEST3    ENABLED  NONE     FOR QUERY LOW
IM_COMPRESS_TEST4    ENABLED  NONE     FOR QUERY HIGH
IM_COMPRESS_TEST5    ENABLED  NONE     FOR CAPACITY LOW
IM_COMPRESS_TEST6    ENABLED  NONE     FOR CAPACITY HIGH
IM_TBS_LVL_CREATE    ENABLED  CRITICAL FOR QUERY LOW
SALES                ENABLED  NONE     FOR QUERY LOW
8 행이 선택되었습니다.
SQL>

 

 

 

 

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다