◆ 인메모리 공간 할당/사용율 조회 스크립트
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, 1, 1) i,
pool,
round(alloc_bytes/1024/1024/1024, 3) alloc_gbytes,
round(used_bytes/1024/1024/1024, 3) used_gbytes,
decode(alloc_bytes, 0, 0, round(used_bytes/alloc_bytes*100, 3)) "USED%",
populate_status
from gv$inmemory_area
order by 1, 2;
|
실행결과 :
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/1024, 3) 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 1, 2;
|
실행결과 :
◆ 인메모리 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, 1, 1) i,
count(*) cnt, max(v.populate_status) status,
round(sum(v.bytes_not_populated)/1024/1024/1024, 3) gbytes_not_populated,
round(sum(v.bytes)/1024/1024/1024, 3) 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, 1, 1)
order by 1, 2, 3;
|
실행결과 :
◆ 인메모리 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 컬럼이 인메모리 제외설정이 된 상태인 것을 확인할 수 있습니다.
'IT관련' 카테고리의 다른 글
Oracle RAC ASM 에 있는 파라메타파일 오류로 Startup 안되는 경우 (ORA-00821, ORA-01078, ORA-01565, ORA-27037) (0) | 2023.01.18 |
---|---|
오라클 에러 정보 (ORA-00604) - 내부 SQL 처리에러, 다음 에러를 봐야하는 (0) | 2023.01.05 |
오라클 In-memory (인메모리) 기능 사용방법 (0) | 2022.12.21 |
오라클 Varchar2 타입 길이제한 4000 에서 32K 확장 (max_string_size 설정) (0) | 2022.11.10 |
오라클 Heatmap 정보 조회 및 Clear 하는 방법 (0) | 2022.11.09 |