본문 바로가기

IT관련

오라클 Heatmap, ADO, ILM 기능 테스트 핸즈온 - Storage Tiering

오라클 ILM 에는 Compression Tiering 과 Storage Tiering 2가지가 있습니다. 여기에서는 Storage Tiering 을 핸즈온해보겠습니다.

 

작업 절차는 다음과 같습니다.

 

1) DB 파라메타 변경

2) 테스트할 테이블스페이스 및 샘플 테이블 생성

3) ADO Policy 생성

4) ADO Policy 를 수동으로 강제 적용

5) ADO Policy 삭제

 

실제 운영에 적용하는 상황이라면 1), 3) 번만 있으면 됩니다.

운영DB에는 테이블이 이미 있으니 2)번은 필요없고, ADO Policy 는 만들어두면 알아서 자동적용(Triggering) 되기 때문에 수동으로 강제 적용할 필요가 없는 일이고, ADO Policy 를 삭제할 일도 없겠죠.. 그냥 쭉 가는 거니까..

 

 

1) DB 파라메타 변경

 

heat_map 이라는 파라메타를 변경해줘야 합니다. 디폴트로 off 로 되어 있습니다.

 

/*
   sys 유저에서 실행
*/
SQL> 
alter system set heat_map=on scope=both;
exec dbms_ilm_admin.set_heat_map_start(sysdate);

 

2) 테스트할 테이블스페이스 및 샘플 테이블 생성

 

테이블스페이스 2개 TS1, TS2 를 만들고, 앞에서 만든 employee 테이블을 CTAS 로 복사해서 employee2 테이블을 만듭니다. 이때, employee2 테이블은 TS1 테이블스페이스에 생성합니다.

 

/*
   sys 유저에서 실행 (Tablespace 생성)
*/
create tablespace TS1 datafile '/u01/app/oracle/oradata/ORA12R2/datafile/ts1.dbf' size 1M;
create tablespace TS2 datafile '/u01/app/oracle/oradata/ORA12R2/datafile/ts2.dbf' size 1M;
grant unlimited tablespace to scott;

/*
   scott 유저에서 실행 (테이블 생성)
*/
create table scott.EMPLOYEE2
tablespace TS1
as select * from scott.EMPLOYEE;


3) ADO Policy 생성

 

이제, Storage Tiering을 위한 ADO 정책을 만들어보겠습니다.

 


/*
   sys 유저에서 실행
*/
begin
  dbms_ilm_admin.customize_ilm(DBMS_ILM_ADMIN.TBS_PERCENT_USED, 70);
  dbms_ilm_admin.customize_ilm(DBMS_ILM_ADMIN.TBS_PERCENT_FREE, 50);
end;
/

/*
   scott 유저에서 실행
*/
alter table scott.EMPLOYEE2 ilm add policy tier to TS2;
  -- EMPLOYEE2 테이블이 위치한 테이블스페이스가 70%에 도달하면 ADO에 의해 테이블스페이스 Move가 일어남.

 

Compression Tiering 과 달리 실행조건을 add policy 뒤에 달지않고, 테이블스페이스 전체에 적용됩니다.

테이블스페이스 공간이 70% 까지 차면, Triggering 되도록 조건을 만들었습니다.

50% 까지 여유공간이 생길때까지 이 옮기는 작업은 계속됩니다.

 

EMPLOYEE2 테이블이 있는 TS1 테이블스페이스 공간이 70% 까지 차기만 하면, TS2 테이블스페이스로 Move 가 일어날 겁니다.

 

딕셔너리뷰에서 아래와 같이 확인할 수 있습니다.

 


/*
   sys 유저에서 실행
*/
col name for a30
select * from dba_ilmparameters;

NAME                                VALUE
------------------------------ ----------
ENABLED                                 1
RETENTION TIME                         30
JOB LIMIT                               2
EXECUTION MODE                          2
EXECUTION INTERVAL                     15
TBS PERCENT USED                       70      <---- 이 부분이 중요!
TBS PERCENT FREE                       50
POLICY TIME                             0

 

 

4) ADO Policy 를 수동으로 강제 적용

 

먼저, Policy를 적용하기 전에 아래의 스크립트로 현재 상태의 TS1 테이블스페이스의 여유공간을 확인하고, EMPLOYEE2 테이블의 Tablespace를 확인합니다.

 


/*
   sys 유저에서 실행 (TS1 Tablespace '전체공간', '사용공간', 'Pct(%)', 'EMPLOYEE2 테이블의 Tabelspace명' 정보를 조회)
*/
select a.Total_KB "Total_KB(TS1)", 
       (a.Total_KB - b.Free_KB) "Used_KB(TS1)", 
       round((1-b.Free_KB/a.Total_KB)*100,2) "Pct(%)(TS1)", 
       c.tablespace_name "Tablespace(EMPLOYEE2)"
from ( select round(sum(bytes)/1024) as Total_KB from dba_data_files where tablespace_name = 'TS1' ) a,
     ( select round(sum(bytes)/1024) as Free_KB from dba_free_space where tablespace_name = 'TS1' ) b,
     ( select tablespace_name from dba_segments where segment_name = 'EMPLOYEE2' ) c
;

 

아래처럼 나옵니다. TS1 테이블스페이스는 우리가 앞에서 만든 것처럼 전체 공간은 1MB 이고,

EMPLOYEE2 테이블을 만들었기 때문에 320KB 를 사용중입니다. 그래서 사용률은 31.25% 이네요.

EMPLOYEE2 테이블이 위치한 테이블스페이스는 현재 TS1 입니다.

 

 

아래의 스크립트로 TS1 테이블스페이스의 공간을 채웁니다.

우리가 설정한 임계치 70% 까지는 채워줘야 뭐 정책이 Triggering 되는말든 하겠죠...?

 


/*
   scott 유저에서 실행
*/
create table DUMMY1 
tablespace TS1 storage (initial 100K next 100K)
as select * from EMPLOYEE2;

insert into DUMMY1 select * from EMPLOYEE2;

 

위 스크립트를 실행하면 TS1 테이블스페이스를 약 75% 정도 채우게됩니다.

그러면, 우리가 설정한 70% 임계치를 넘게되어 Policy 가 실행될 수 있는 조건이 갖춰지게 되는 겁니다.

 

 

위와같이 TS1 테이블스페이스의 공간이 75% 까지 찼네요.. 이제 Policy 실행 요건이 충족되었습니다.

 

하루정도 기다리면 정책 적용이 되겠지만... 우린 기다릴만한 인내심이 없으니 아래 스크립트를 실행해서 강제적용하겠습니다.

 


/*
   scott 유저에서 실행
*/
DECLARE 
   v_executionid number;
BEGIN
   dbms_ilm.execute_ILM (ILM_SCOPE      => dbms_ilm.SCOPE_SCHEMA, 
                         execution_mode => dbms_ilm.ilm_execution_offline, 
                         task_id        => v_executionid);
END;
/

 

위 스크립트는 scott 유저에 있는 모든 테이블에 대한 Policy를 강제로 실행시키는 명령입니다.

 

수동으로 Policy를 강제 적용하게 되면 아래처럼 EMPLOYEE2 테이블의 테이블스페이스가 TS1 -> TS2 로 바껴있는 것을 확인할 수 있습니다.

 

 

5) ADO Policy 삭제

 

아래와 같이 내가 테스트한 정책을 지워주면 되겠습니다.

 


/*
   scott 유저에서 실행
*/
alter table EMPLOYEE2 ilm delete_all;
      -- EMPLOYEE2 테이블의 전체 Policy 삭제

drop table EMPLOYEE2;
drop table DUMMY1;
      -- 테스트 테이블과 더미 테이블 삭제

 

 

※ 이전글 참고)

   - 오라클 Heatmap, ADO, ILM 기능 설명

   - 오라클 Heatmap, ADO, ILM 기능 샘플 커맨드 예제

   - 테이블 압축방식 체크 스크립트

   - 오라클 Heatmap, ADO, ILM 기능 테스트 핸즈온 - Compression Tiering

   - 오라클 Heatmap, ADO, ILM 기능관련 딕셔너리 조회 스크립트 모음