내용 목차
본 장에서는 DBMS_RESOURCE_MANAGER 패키지의 기본 개념과 패키지 내의 프러시저를 사용하는 방법을 설명한다.
Tibero에서는 DBMS_RESOURCE_MANAGER를 이용해서 업무의 성격에 따라 그룹을 나누어 자원을 분배할 수 있다. 예를 들어 자원이 제한된 상황에서 OLTP 업무와 batch 업무를 동시에 진행하고 싶을 때, batch 업무에 쓰이는 자원을 OLTP 업무로 몰아주어서 OLTP 업무의 효율성을 높일 수 있다.
DBMS_RESOURCE_MANAGER은 CPU 자원과 같이 업무를 수행하는 데에 필요한 자원을 업무 성격에 따라 원하는대로 효율적으로 재분배하는 기능을 제공하는 패키지이다. DBMS_RESOURCE_MANAGER 패키지 내의 프러시저를 이용하여, RESOURCE PLAN을 데이터베이스에 추가하고 자원 재분배 방식을 원하는대로 설정해서 적용할 수 있다.
다음은 DBMS_RESOURCE_MANAGER 패키지의 특징이다.
USE_RESOURCE_MANAGER 파라미터가 Y로 설정되어 있어야 패키지가 제대로 동작한다.
DBMS_SCHEDULER 패키지의 사용할 때 DBA 권한이 필요하며, 추가된 RSRC PLAN은 오직 PLAN의 소유자만 실행하거나 변경할 수 있다.
자원 재분배 방식을 결정하는 CONSUMER GROUP, CONSUMER GROUP MAPPING, RSRC PLAN DIRECTIVE를 추가할 수 있다.
현재 데이터베이스에 추가된 RSRC PLAN, CONSUMER GROUP, RSRC PLAN DIRECTIVE 등의 정보는 다음 뷰를 통해 확인이 가능하다.
RSRC PLAN 변경 히스토리가 PLAN 이름 및 TIME 정보와 함께 기록되어 AUDIT 뷰를 통해 확인이 가능하다.
DBA_RSRC_PLANS DBA_RSRC_CONSUMER_GROUPS DBA_RSRC_PLAN_DIRECTIVES DBA_RSRC_AUDIT
적용되어 있는 ACTIVE PLAN 관련 RSRC PLAN, CONSUMER GROUP, SESSION 등의 정보는 다음 뷰를 통해 확인이 가능하다.
V$SESSION V$RSRC_PLAN V$RSRC_CONSUMER_GROUPS V$RSRC_SESSION_INFO
여러 개의 RSRC PLAN, CONSUMER GROUP, RSRC PLAN DIRECTIVE를 추가할 수 있으며 그 중 하나의 PLAN을 적용할 수 있다.
아무런 RSRC PLAN이 적용되지 않았을 때는 하나의 DEFAULT CONSUMER GROUP을 가진 DEFAULT RESOURCE PLAN이 적용되어 있다
PLAN 적용 시 어떤 CONSUMER GROUP에도 속하지 않는 세션들은 전부 DEFAULT CONSUMER GROUP에 속하게 된다.
DEFAULT CONSUMER GROUP의 최소 자원 보장을 위해 모든 CONSUMER GROUP에 할당된 CPU의 합이 100 미만이어야 한다.
본 절에서는 DBMS_RESOURCE_MANAGER 패키지에서 제공하는 프러시저를 알파벳 순으로 설명한다.
새로운 CONSUMER GROUP을 생성하는 프러시저이다.
CREATE_CONSUMER_GROUP 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP ( consumer_group IN VARCHAR2, category IN VARCHAR2, comments IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
consumer_group | 생성할 CONSUMER GROUP의 이름이다. 이미 생성된 다른 CONSUMER GROUP 이름과 겹치지 않아야 한다. |
category | CONSUMER GROUP이 속하는 CATEGORY를 지정하기 위한 파라미터이다. |
comments | CONSUMER GROUP의 목적 등을 부가적으로 서술하기 위한 파라미터이다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( consumer_group => 'group s', category => 'default', comments => 'consumer group for sys users'); END; /
새로운 RESOURCE PLAN을 생성하는 프러시저이다.
CREATE_PLAN 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.CREATE_PLAN ( plan IN VARCHAR2, comments IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
plan | 생성할 RESOURCE PLAN의 이름이다. 이미 생성된 다른 PLAN 이름과 겹치지 않아야 한다. |
comments | RESOURCE PLAN의 목적 등을 부가적으로 서술하기 위한 파라미터이다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN( plan => 'plan t', comments => 'resource plan for tibero'); END; /
새로운 RESOURCE PLAN DIRECTIVE를 생성하는 프러시저이다.
CREATE_PLAN_DIRECTIVE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE ( plan IN VARCHAR2, group_or_subplan IN VARCHAR2, comments IN VARCHAR2, mgmt_p1 IN NUMBER DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
plan | PLAN DIRECTIVE가 적용되어야 하는 대상 RESOURCE PLAN의 이름이다. |
group_or_subplan | PLAN DIRECTIVE가 적용되어야 하는 대상 CONSUMER GROUP 혹은 SUBPLAN의 이름이다. |
comments | PLAN DIRECTIVE의 목적 등을 부가적으로 서술하기 위한 파라미터이다. |
mgmt_p1 | PLAN DIRECTIVE에서 목표로 하는 CPU 자원의 사용률을 백분율로 나타낸 값이다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE( plan => 'plan t', group_or_subplan => 'group s', comments => 'plan directive for sys users', mgmt_p1 => 60); END; /
8개 이하의 CONSUMER GROUP과 목표 CPU 사용량을 주어서 바로 간단한 RESOURCE PLAN을 생성하는 프러시저이다.
CREATE_SIMPLE_PLAN 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.CREATE_SIMPLE_PLAN ( simple_plan IN VARCHAR2 DEFAULT NULL, consumer_group1 IN VARCHAR DEFAULT NULL, consumer_group2 IN VARCHAR DEFAULT NULL, consumer_group3 IN VARCHAR DEFAULT NULL, consumer_group4 IN VARCHAR DEFAULT NULL, consumer_group5 IN VARCHAR DEFAULT NULL, consumer_group6 IN VARCHAR DEFAULT NULL, consumer_group7 IN VARCHAR DEFAULT NULL, consumer_group8 IN VARCHAR DEFAULT NULL, group1_percent IN NUMBER DEFAULT NULL, group2_percent IN NUMBER DEFAULT NULL, group3_percent IN NUMBER DEFAULT NULL, group4_percent IN NUMBER DEFAULT NULL, group5_percent IN NUMBER DEFAULT NULL, group6_percent IN NUMBER DEFAULT NULL, group7_percent IN NUMBER DEFAULT NULL, group8_percent IN NUMBER DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
simple_plan | 생성할 RESOURCE PLAN의 이름이다. 이미 생성된 다른 PLAN 이름과 겹치지 않아야 한다. |
consumer_group1 | 생성할 1번째 CONSUMER GROUP의 이름이다. 이미 생성된 다른 CONSUMER GROUP 이름과 겹치지 않아야 한다. |
consumer_group2 | 생성할 2번째 CONSUMER GROUP의 이름이다. 이미 생성된 다른 CONSUMER GROUP 이름과 겹치지 않아야 한다. |
consumer_group3 | 생성할 3번째 CONSUMER GROUP의 이름이다. 이미 생성된 다른 CONSUMER GROUP 이름과 겹치지 않아야 한다. |
consumer_group4 | 생성할 4번째 CONSUMER GROUP의 이름이다. 이미 생성된 다른 CONSUMER GROUP 이름과 겹치지 않아야 한다. |
consumer_group5 | 생성할 5번째 CONSUMER GROUP의 이름이다. 이미 생성된 다른 CONSUMER GROUP 이름과 겹치지 않아야 한다. |
consumer_group6 | 생성할 6번째 CONSUMER GROUP의 이름이다. 이미 생성된 다른 CONSUMER GROUP 이름과 겹치지 않아야 한다. |
consumer_group7 | 생성할 7번째 CONSUMER GROUP의 이름이다. 이미 생성된 다른 CONSUMER GROUP 이름과 겹치지 않아야 한다. |
consumer_group8 | 생성할 8번째 CONSUMER GROUP의 이름이다. 이미 생성된 다른 CONSUMER GROUP 이름과 겹치지 않아야 한다. |
group1_percent | 1번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다. |
group2_percent | 2번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다. |
group3_percent | 3번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다. |
group4_percent | 4번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다. |
group5_percent | 5번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다. |
group6_percent | 6번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다. |
group7_percent | 7번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다. |
group8_percent | 8번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.CREATE_SIMPLE_PLAN( simple_plan => 'plan s', consumer_group 1 => 'group 1', consumer_group 2 => 'group 2', consumer_group 3 => 'group 3', consumer_group 4 => 'group 4', consumer_group 5 => 'group 5', consumer_group 6 => 'group 6', consumer_group 7 => 'group 7', consumer_group 8 => 'group 8', group1_percent => '20', group1_percent => '20', group1_percent => '10', group1_percent => '10', group1_percent => '10', group1_percent => '10', group1_percent => '10', group1_percent => '10'); END; /
기존에 생성된 CONSUMER GROUP을 삭제할 때 사용하는 프러시저이다.
DELETE_CONSUMER_GROUP 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP ( consumer_group IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
consumer_group | 삭제할 CONSUMER GROUP의 이름이다. 대상 CONSUMER GROUP이 존재해야 한다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP( consumer_group => 'group s'); END; /
기존에 생성된 RESOURCE PLAN을 삭제할 때 사용하는 프러시저이다.
DELETE_PLAN 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.DELETE_PLAN ( plan IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
plan | 삭제할 RESOURCE PLAN의 이름이다. 대상 RESOURCE PLAN이 존재해야 한다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.DELETE_PLAN( plan => 'plan t'); END; /
기존에 생성된 PLAN DIRECTIVE를 삭제할 때 사용하는 프러시저이다.
DELETE_PLAN_DIRECTIVE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE ( plan IN VARCHAR2, group_or_subplan IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
plan | 삭제할 PLAN DIRECTIVE가 대상으로 하는 RESOURCE PLAN의 이름이다. |
group_or_subplan | 삭제할 PLAN DIRECTIVE가 대상으로 하는 CONSUMER GROUP 혹은 SUBPLAN의 이름이다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE( plan => 'plan t', group_or_subplan => 'group s'); END; /
기존에 생성된 CONSUMER GROUP에 세션을 지정하는 MAPPING RULE을 만들 때 사용하는 프러시저이다.
SET_CONSUMER_GROUP_MAPPING 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING ( attribute IN VARCHAR2, value IN VARCHAR2, consumer_group IN VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
attribute | 어떤 항목을 기준으로 세션을 CONSUMER GROUP으로 MAPPING 할 것인지를 지정한다. |
value | 어떤 값을 기준으로 세션을 CONSUMER GROUP으로 MAPPING 할 것인지를 지정한다. |
consumer_group | 생성할 MAPPING RULE이 대상으로 하는 CONSUMER_GROUP의 이름이다. |
지원되는 attribute
attribute | 설명 |
---|---|
MODULE_NAME_ACTION | 세션에 지정된 module name과 action 항목이 같은 session을 지정된 CONSUMER GROUP으로 MAPPING한다 |
MODULE_NAME | 세션에 지정된 module name 항목이 같은 session을 지정된 CONSUMER GROUP으로 MAPPING한다 |
DATABASE_USER | 세션에 지정된 database user 항목이 같은 session을 지정된 CONSUMER GROUP으로 MAPPING한다 |
CLIENT_PROGRAM | 세션에 지정된 program 항목이 같은 session을 지정된 CONSUMER GROUP으로 MAPPING한다 |
CLIENT_OS_USER | 세션에 지정된 os user 항목이 같은 session을 지정된 CONSUMER GROUP으로 MAPPING한다 |
CLIENT_MACHINE | 세션에 지정된 machine 항목이 같은 session을 지정된 CONSUMER GROUP으로 MAPPING한다 |
CLIENT_ID | 세션에 지정된 client identifier 항목이 같은 session을 지정된 CONSUMER GROUP으로 MAPPING한다 |
예제
BEGIN DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING( attribute => 'database_user', value => 'sys', consumer_group => 'group s'); END; /
기존에 생성된 RESOURCE PLAN을 데이터베이스에 적용할 때 사용하는 프러시저이다.
SWITCH_PLAN 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.SWITCH_PLAN ( switch_plan IN VARCAHR2 );
파라미터
파라미터 | 설명 |
---|---|
switch_plan | 적용할 RESOURCE PLAN의 이름이다. 대상 RESOURCE PLAN이 존재해야 한다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.SWITCH_PLAN( switch_plan => 'plan t'); END; /
기존에 생성된 CONSUMER GROUP의 정보를 변경할 때 사용하는 프러시저이다.
UPDATE_CONSUMER_GROUP 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.UPDATE_CONSUMER_GROUP ( consumer_group IN VARCHAR2, new_category IN VARCHAR2 DEFAULT NULL, new_comments IN VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
consumer_group | 변경할 CONSUMER GROUP의 이름이다. 대상 CONSUMER GROUP이 존재해야 한다. |
new_category | CONSUMER GROUP이 속하는 CATEGORY를 지정하기 위한 파라미터이다. |
new_comments | CONSUMER GROUP의 목적 등을 부가적으로 서술하기 위한 파라미터이다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.UPDATE_CONSUMER_GROUP( consumer_group => 'group s', new_cateogry => 'default', new_comments => 'consumer group for sys users'); END; /
기존에 생성된 RESOURCE _PLAN의 정보를 변경할 때 사용하는 프러시저이다.
UPDATE_PLAN 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.UPDATE_PLAN ( plan IN VARCHAR2, new_comments IN VARCHAR2 DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
plan | 변경할 RESOURCE PLAN의 이름이다. 대상 RESOURCE PLAN이 존재해야 한다. |
new_comments | RESOURCE PLAN의 목적 등을 부가적으로 서술하기 위한 파라미터이다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.UPDATE_PLAN( plan => 'plan t', new_comments => 'resource plan for tibero'); END; /
기존에 생성된 PLAN_DIRECTIVE의 정보를 변경할 때 사용하는 프러시저이다.
UPDATE_PLAN_DIRECTIVE 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE ( plan IN VARCHAR2, group_or_subplan IN VARCHAR2, new_comments IN VARCHAR2 DEFAULT NULL, mgmt_p1 IN NUMBER DEFAULT NULL );
파라미터
파라미터 | 설명 |
---|---|
plan | 변경할 PLAN DIRECTIVE가 대상으로 하는 RESOURCE PLAN의 이름이다. |
group_or_subplan | 변경할 PLAN DIRECTIVE가 대상으로 하는 CONSUMER_GROUP 또는 SUBPLAN의 이름이다. |
new_comments | PLAN DIRECTIVE의 목적 등을 부가적으로 서술하기 위한 파라미터이다. |
mgmt_p1 | PLAN DIRECTIVE에서 목표로 하는 CPU 자원의 사용률을 백분율로 나타낸 값이다. |
예제
BEGIN DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE( plan => 'plan t', group_or_subplan => 'group s', new_comments => 'plan directive for sys users', mgmt_p1 => 60); END; /