프린트 하기

OS환경 : Oracle Linux 7.6 (64bit)

 

DB 환경 : Oracle Database 19.8.0.0

 

방법 : 오라클 19c Oracle Database In-Memory BASE_LEVEL 기능

Oracle DB 19.8 버전부터 In-Memory BASE_LEVEL 기능을 사용할 수 있게됨

 

 

Oracle In-Memory 란?

이 백서 또는 http://www.koreaoug.org/c12/935 참조

 

 

Oracle In-Memory Base Level 란?

이 기능을 사용하면 Oracle Database In-Memory 옵션을 구매하지 않고도 

Oracle Database In-Memory 기능을 실험 할 수 있음

 

 

In-Memory 기능에 대한 설명은 오라클 블로그 게시물을 참조하면됨

Oracle Database In-Memory 기본 수준 기능

 

 

In-Memory 기능은 몇 가지 제한 사항이 존재함

- INMEMORY_SIZE 값은 CDB (물론 비 CDB도)에 대해 16GB를 초과 할 수 없음

- Oracle RAC 환경이있는 경우 각 인스턴스에 대해 16GB 로 설정할 수 있음

- 모든 개체에 대해 설정되고 열이 자동으로 투명하게 QUERY LOW로 설정되므로 압축 수준에 영향을 주지 않음

- COMPATIBLE 이 Oracle 12.1.0 이상이어야함

  (그 이하일 경우 IN-MEMORY 테이블을 조회하려고 할 때 ORA-922 에러발생함)

- 세부사항은 아래의 자세한 라이선스 정보를 참조

 

 

 

라이센스 확인

Oracle Database 19c License Guide 에서 database In-Memory Base Level 을 검색

 

 

사용 방법

db 버전 확인(19.8 이상이어야함)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> set lines 200 pages 1000
SQL> select * from v$version;
 
BANNER
--------------------------------------------------------------------------------
BANNER_FULL
-------------------------------------------------------------------------------------------
BANNER_LEGACY                                         CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production              0
 

 

 


inmemory 파라미터 설정

서버 메모리가 4g 여서 sga를 2g로 inmemory를 1g 로 할당함

 

1
2
3
4
5
SQL> 
alter system set sga_target=2g scope=spfile;
alter system set inmemory_force=base_level scope=spfile;
alter system set inmemory_size=1g scope=spfile;
startup force
 

 

 

 

테스트용 유저 생성

 

1
2
3
4
5
6
7
SQL> create user imsi identified by imsi account unlock quota unlimited on users;
 
User created.
 
SQL> grant resource, connect, dba to imsi;
 
Grant succeeded.
 

 

 

 

샘플 테이블 생성

 

1
2
3
4
5
6
7
8
9
10
SQL> conn imsi/imsi
Connected.
 
SQL> create table table1 as select * from dba_objects;
 
Table created.
 
SQL> create table table2 as select * from dba_objects;
 
Table created.
 

 

 

 

table1 테이블 inmemory 속성으로 변경

 

1
2
3
SQL> alter table table1 inmemory priority high;
 
Table altered.
 

 

 

 

해당 테이블이 메모리에 올라가있는지 확인

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL>
set lines 200 pages 1000
col owner for a20
col table_name for a20
 
select owner, table_name,
inmemory,
inmemory_priority,
inmemory_distribute,
inmemory_compression,
inmemory_duplicate  
from   dba_tables
where  owner like 'IMSI'
order by table_name;
 
OWNER             TABLE_NAME       INMEMORY INMEMORY INMEMORY_DISTRI INMEMORY_COMPRESS INMEMORY_DUPL
-------------------- -------------------- -------- -------- --------------- ----------------- -------------
IMSI             TABLE1          ENABLED  HIGH     AUTO        FOR QUERY LOW     NO DUPLICATE
IMSI             TABLE2          DISABLED

 

 

해당 테이블 inmemory 할당 세그먼트 확인

1
2
3
4
5
6
7
8
SQL>
col owner for a20
col segment_name for a20
select owner, segment_name,inmemory_size,bytes_not_populated from v$im_segments;
 
OWNER             SEGMENT_NAME      INMEMORY_SIZE BYTES_NOT_POPULATED
-------------------- -------------------- ------------- -------------------
IMSI             TABLE1            1310720           0

 

 

참조 : https://mikedietrichde.com/2020/07/20/oracle-database-in-memory-base_level-feature-available-since-19-8-0/

https://blogs.oracle.com/in-memory/oracle-database-in-memory-base-level-feature

https://blogs.oracle.com/in-memory/base-level-198-ru

 

https://positivemh.tistory.com/551

https://positivemh.tistory.com/540

https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/INMEMORY_SIZE.html#GUID-B5BEB6BF-5308-485F-920D-CBB584DDDE8F

https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/INMEMORY_FORCE.html#GUID-1CAEDEBC-AE38-428D-B07E-6718A7225548