본문 바로가기

IT관련

오라클 In-memory (인메모리) 관련 유용한 스크립트 모음

 

◆ 인메모리 공간 할당/사용율 조회 스크립트

SGA 내에 할당된 In-Memory Column Store 크기 및 사용현황을 조회합니다.

 

 
$ cat imarea.sql
col i               format a1
col pool            format a9
col alloc_gbytes    format 999,999.999
col used_gbytes     format 999,999.999
col "USED%"         format 999.999
col populate_status format a15
 
select substr(inst_id, 11) i,
       pool,
       round(alloc_bytes/1024/1024/10243) alloc_gbytes,
       round(used_bytes/1024/1024/10243) used_gbytes,
       decode(alloc_bytes, 00, round(used_bytes/alloc_bytes*1003)) "USED%",
       populate_status
from   gv$inmemory_area
order by 12;
 

 

실행결과 :

 

1MB POOL : IMCU (In-Memory Compression Unit). 

                      압축된 형태로 실제 데이터가 메모리에 로딩되는 영역.

64KB POOL : SMU (Snapshot Metadata Unit).

                      IMCU와 연관된 메타데이터와 트랜잭션 정보가 저장됨.

                      DML로 데이터가 변경된 경우 그 정보가 SMU 내에 저장되고, IMCU 에 있는 해당 row 는 Invalid 가 됨.

 

 

◆ 인메모리 Table 설정 확인 스크립트

인메모리 설정된 테이블/파티션들에 대한 관련 설정 정보를 확인합니다.

 

 
$ cat imtab.sql
set linesize 200
col owner format a6
col segment_name format a28
col parts format 9,999
col gbytes format 9,999.999
col blocks format 99,999,999
 
select owner, segment_name,
       count(*) parts,
       round(sum(bytes)/1024/1024/10243) gbytes,
       sum(blocks) blocks,
       max(inmemory) inmemory,
       max(inmemory_distribute)  distribute,
       max(inmemory_duplicate)   duplicate,
       max(inmemory_compression) memcompress,
       max(inmemory_priority)    priority
from   dba_segments
where  inmemory='ENABLED'
group by owner, segment_name
order by 12;
 

 

실행결과 :

 

 

◆ 인메모리 Table 메모리 Population 상태 확인 스크립트

메모리에 적재중이거나 이미 적재된 테이블/파티션들의 정보를 조회합니다.

 

 
$ cat imseg.sql
set linesize 200
column owner format a10
column name format a30
column i format a1
column cnt format 9,999
column status format a9
column gbytes_not_populated format 999.999
column orig_size format 999.999
column in_mem_size format 999.999
column comp_ratio format 999.999
 
break on owner on name
 
SELECT v.owner, v.segment_name name,
       substr(inst_id, 11) i,
       count(*) cnt, max(v.populate_status) status,
       round(sum(v.bytes_not_populated)/1024/1024/10243) gbytes_not_populated,
       round(sum(v.bytes)/1024/1024/10243)         orig_size,
       round(sum(v.inmemory_size/1024/1024/1024), 3) in_mem_size ,
       round(sum(v.bytes)/sum(v.inmemory_size), 3)   comp_ratio
FROM   gv$im_segments v
group by v.owner, v.segment_name, substr(inst_id, 11)
order by 123;
 

 

실행결과 :

 

 

◆ 인메모리 Table 컬럼별 설정 상태 확인 스크립트

컬럼별로 In-memory 제외 설정을 할 수 있고, 이 제외여부를 확인할 수 있는 스크립트입니다.

 

 
$ cat imcol.sql
set linesize 200
set pagesize 1000
col owner format a10
col table_name format a30
col id format 999
col column_name format a30
col inmemory_compression format a13
break on owner on table_name
 
select owner, table_name, segment_column_id as id, column_name, inmemory_compression
from   v$im_column_level
order by owner, table_name, segment_column_id;
 

 

실행결과 :

 

Lineorder 테이블의 경우 LO_QUANTITY ~ LO_SHIPMODE 컬럼이 인메모리 제외설정이 된 상태인 것을 확인할 수 있습니다.