Professional Documents
Culture Documents
기술노트 92회 Resource - Manager
기술노트 92회 Resource - Manager
Author 박민정
Version 1.0
Contents .......................................................................................................................... 2
4. 제어 가능 요소 ............................................................................................................. 9
4.1. CPU...........................................................................................................................9
4.1.1. Management attribute ........................................................................................................ 9
4.1.2. Utilization Limit ................................................................................................................. 10
4.2. Parallel execution Server ........................................................................................ 10
4.2.1. Degree of parallelism limit ............................................................................................... 10
4.2.2. Parallel server limit ............................................................................................................ 10
4.2.3. Parallel Query timeout ...................................................................................................... 11
4.3. PGA (Program Global Area) .................................................................................... 12
4.4. 악성 Query ............................................................................................................. 12
4.4.1. Automatic Consumer Group Switching............................................................................ 12
4.4.2. Canceling SQL and Terminating Sessions ........................................................................ 12
4.4.3. Execution Time Limit ......................................................................................................... 12
4.5. Active session pool with Queuing........................................................................... 12
4.6. Undo pool .............................................................................................................. 12
4.7. Idle time limit ........................................................................................................ 13
5. Plan 작성 ................................................................................................................... 14
6. Reference................................................................................................................... 24
- 2 -
1. Resource Manager란?
Oracle Database Resource Manager (이하 Resource Manager) 는 system resource 및 dbms
resource 를 포함한 다중 부하(multiple workload)를 관리할 수 있는 기능입니다.
과도한 overhead
비효율적인 스케줄링
부적절한 자원배분
parallel executuin server 및 active session 같은 특정 리소스의 관리 실패
- 3 -
2. Resource manager의 구성 요소
Resource manager 는 아래 3 가지 요소로 구성되어 있습니다.
구성요소 설명
Resource consumer group Resource requirment 에 따라 분류되는 사용자 그룹
Resource plan Resource consumer group 에 적용되는 세부 플랜 모음.
Resource plan directive Resource consumer group 에 적용되는 세부 플랜.
- 4 -
SWITCH_CONSUMER_GROUP_FOR_SESS Changes the resource consumer group of a specific session
- 5 -
2.2. Resource plan directive
Resource plan 와 Resource plan directive 는 부모자식 관계이며, directive 는 하나의 consumer
group 을 가리킵니다. 당연히 여러 개의 directice 는 같은 group 에 동시에 적용될 수 없습니다.
- 6 -
[Subplan]
Directive plan 은 다른 resource plan 을 참조할 수 있는데, 이 경우 참조한 계획을 Subplan 이
라고 합니다. Subplan 은 directive 를 이용하여 consumer group 과, 다른 subplan 에 자원을 배
분합니다.
Top resource plan(active resource plan)은 자원을 ① consumer goup 에 대한 자원 할당 ②
subplan 에 대한 자원 할당, 이렇게 두가지 체계로 나눌 수 있습니다. 여기서 자원을 나눠받은
각 subplan 들은 또 일부의 자원을 다른 subplan 에 할당합니다. 이런식으로 계층적인 자원나눔
계획이 완성되는 것입니다.
resource subplan 은 resource plan 과 동일한 방법으로 작성합니다. 만약 subplan 으로만 사용계
획을 작성하려면 패키지 프로시저 DBMS_RESOURCE_MANAGER. CREATE_PLAN 에서 SUB_PLAN
인수를 사용합니다.
어떤 top level plan 이든 간에, 한번에 오로지 하나의 subplan 만 참조할 수 있습니다. Subplan
은 OTHER_GROUPS 에 대한 directive 는 필요하지 않으며, resource plan 으로 설정할 수 없습니
다.
이 Animal zoo plan 을 살펴보면 우선, 포유류 플랜과 조류 플랜, 파충류 플랜에 CPU 를 각각
50%, 30%, 20% 할당합니다.
포유류 플랜에 할당되어 있는 50%의 CPU 를 또 반씩 나누어서 고양이 그룹과 토끼 그룹에 할
당합니다. (결과적으로는 각 25%씩 할당 받음) 또한 파충류 플랜에 할당되어 있는 20%의 CPU
를 반씩 나누어서 거북이 그룹과 뱀 그룹에 할당합니다. Plan 은 loop 가 불가능 하여 다른
plan 의 group 에 간섭할 수 없습니다.
- 7 -
3. Resource manager 관리자 권한
Resource Manager 를 사용하기 위해서는 반드시 ADMINISTER_RESOURCE_MANAGER 권한이
필요합니다. Resource Manager 는 DBMS_RESOURCE_MANAGERPL/SQL package 안의 모든
procedure 의 실행권한을 가지고 있어야 합니다.
ADMIN 옵션을 가지고 있는 관리자는 DBMS_RESOURCE_MANAGER_PRIVS PL/SQL package 를
이용하여, 다른 user role 에게 관리자 권한을 줄 수 있습니다. 연관된 package procedure 는 아
래와 같습니다.
Procedure Description
GRANT_SYSTEM_PRIVILLEGE 사용자나 role 에게 ADMINISTRATER_RESOURCE_MANAGER
시스템 권한을 부여
REVOKE_SYSTEM_PRIVILEGE 사용자나 role 에게 ADMINISTRATER_RESOURCE_MANAGER
시스템 권한을 박탈
BEGIN
DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE(
GRANTEE_NAME => 'PINNTO',
PRIVILEGE_NAME => 'ADMINISTER_RESOURCE_MANAGER', -- ⓑ
ADMIN_OPTION => FALSE); -- ⓐ
END;
/
- 8 -
4. 제어 가능 요소
4.1. CPU
Resource manager 는 consumer group 간에 CPU 를 제한할당하거나, 사용하지 않는 여유분을
재분배하는 방법으로 CPU resource 를 관리합니다.
이러한 우선순위는 MGMT_Pn attribute 를 사용하여(n 은 1~8 사이의 정수) 지정할 수 있습니다.
예를 들어 MGMG_P1 directive attribute 로 level 1 의 resource 할당을, MGMG_P2 로 level 2 의
resource 할당을 지정하는 식입니다.
Degree of Parallelism Limit 및 Parallel Server Limit 같은 parallel statement directive attributes
를 사용하여 parallel statement queuing 를 제어하는 것도 가능합니다.
- 9 -
4.1.2. Utilization Limit
UTILIZATION LIMIT attribute 를 사용하여 consumer group 의 CPU 사용율 상한을 지정할 수 있
습니다. (이 limit 이 적용된 경우 plan 안에서의 재분배는 무시됩니다)
LOW_GROUP 이 CPU 의 90%를 사용한다고 가정했을 때, 사용자는 이 LOW_GROUP 이 속한
application 의 중요도가 낮다고 생각하여 최대 허용치를 지정하고 싶을 수 있습니다.
UTILIZATION LIMIT attribute 설정은 선택사항이며, 지정하지 않을 경우 default 는 no limit 입니
다.
만약 Management attribute 50% 인 level 2 의 Consumer group A 가 있다고 가정해봅니다.
level 1 의 consumer group 들이 CPU 를 사용하지 않는 상황에, 같은 level 2 의 다른 group 들
도 cpu 를 사용하지 않는 경우라면 이 A 는 제한 없이 resource 를 사용할 수 있습니다. 그러나
UTILIZATION LIMIT 가 30%로 지정되어있다면 아무리 유휴 CPU 가 있어도 전체의 75%까지밖
에 사용할 수 없습니다. 우선순위가 낮은 group 이 모든 CPU 를 사용하지 않도록 제한하는 것
입니다.
- 10 -
면 당연히 하나의 parallel statement queue(FIFO Queue)로 관리될 것입니다.
consumer group 에 대한 active 상태인 parallel execution server 수와 parallel 구문의 parallel
degree 의 합이 active parallel execution servers 의 target 수를 초과하는 경우.
(target 수는 PARALLEL_SERVER_LIMIT/100 * PARALLEL_SERVERS_TARGET 로 계산)
모든 세션에 대하여 parallel execution server 의 사용이 모니터링 되기는 하지만, parallel
execution server directive attribute 는 PARALLEL_DEGREE_POLICY=AUTO 로 설정된 경우에
- 11 -
한하여 ACTIVE 상태의 세션에만 영향을 미칩니다. 만약 MANUAL 로 설정된 경우, 이 세션
의 parallel 구문은 queue 에 넣지 않지만 PARALLEL_SERVER_LIMIT 의 한도를 결정하는 카
운트에는 포함이 되고, 이 limit 을 초과하더라도 queue 에 포함되는 것은 아닙니다.
4.4. 악성 Query
Resource Manager 는 성능에 영향을 주는 session 과 call 을 관리하기 위해서, 지정된 양
의 CPU 와 물리적 혹은 논리적 I/O, elapsed time 등에 대해 핸들링 할 수 있습니다. cpu
사용이 적은 consumer group 으로 session 및 call 을 switch 시켜 allocate 하거나, 아예
terminate 해버리는 방법을 사용합니다.
- 12 -
un-commit 트랜젝션의 총량을 제어한다고 볼 수 있습니다. 만약 이 한도를 초과하여 수행되는
DML 은 terminate 됩니다. Undo pool 에서 undo space 가 분리되기 전까지는 이 consumer
group 에 속한 다른 구성원은 추가적인 data 조작을 할 수 없습니다.
- 13 -
5. Plan 작성
5.1. Resource plan 생성
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_SIMPLE_PLAN(
END;
BEGIN
DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE(
GRANTEE_NAME => 'MAMMALIA',
PRIVILEGE_NAME => 'ADMINISTER_RESOURCE_MANAGER',
ADMIN_OPTION => FALSE);
DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE(
GRANTEE_NAME => 'BIRDS',
PRIVILEGE_NAME => 'ADMINISTER_RESOURCE_MANAGER',
ADMIN_OPTION => FALSE);
DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE(
GRANTEE_NAME => 'REPTILE',
PRIVILEGE_NAME => 'ADMINISTER_RESOURCE_MANAGER',
ADMIN_OPTION => FALSE);
END;
- 15 -
1 pending area 생성 BEGIN
DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA ();
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
- 16 -
[속성 분류]
Attribute Type Description
ORACLE_USER Oracle 의 user name
구분자
MODULE_NAME DBMS_APPLICATION_INFO.SET_MODULE 혹은
중인 application module.
- DBMS_APPLICATION_INFO.SET_MODULE
Run-
- DBMS_APPLICATION_INFO.SET_ACTION
time
SERVICE_MODULE Service 와 module 명을 결합한 속성.
(service_name.module_name)
(service_name.module_name.action_name)
- 17 -
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING
(DBMS_RESOURCE_MANAGER. SERVICE_MODULE,
‘ANIMAL.RABBIT.exe', 'RABBIT_GROUP'),
-- 같은 service 내에서 다른 module 명으로 mapping 3
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING
(DBMS_RESOURCE_MANAGER. SERVICE_MODULE,
‘ANIMAL.Turtle.exe', 'TURTLE_GROUP');
END;
/
- 18 -
COMMENT => Allocate CPU to cat and rabbit group');
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE
(PLAN => ‘MAMMALIA_PLAN’,
GROUP_OR_SUBPLAN => 'CAT_GROUP_PLAN',
COMMENT => ‘plan for cat',
MGMT_P1 => 50);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE
(PLAN => ‘MAMMALIA_PLAN’,
GROUP_OR_SUBPLAN => 'RABBIT_GROUP_PLAN',
COMMENT => ‘plan for rabbit',
MGMT_P1 => 50);
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
PLAN => ‘BIRDS_PLAN’,
MGMT_MTH => 'RATIO',
COMMENT => Allocate CPU to birds app group');
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => ‘BIRDS_PLAN’,
GROUP_OR_SUBPLAN => 'BIRD_GROUP_PLAN',
COMMENT => ‘plan for bird',
MGMT_P1 => 30);
DBMS_RESOURCE_MANAGER.CREATE_PLAN (
PLAN => ‘BIRDS_PLAN’,
MGMT_MTH => 'RATIO',
COMMENT => Allocate CPU to birds app group');
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
PLAN => 'SERVICE_LEVEL_PLAN',
GROUP_OR_SUBPLAN => 'BRONZE_CG',
COMMENT => 'Bronze service level customers',
MGMT_P1 => 2);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE
(PLAN => 'SERVICE_LEVEL_PLAN',
GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
COMMENT => 'Lowest priority sessions',
MGMT_P1 => 1);
- 19 -
END;
6 Pending Area 를 활성화 BEGIN
(validate). DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
END;
/
7 Pending Area 를 BEGIN
submit. DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/
- 20 -
5.2. 시나리오
지금까지의 내용을 참조하여 하나의 시나리오를 만들어 보겠습니다.
우리가 구현할 DWPLAN resource plan 의 개괄적인 정보는 아래 표와 같습니다.
요구사항
Oracle Service Program
업무명 업무분류 UNDO
USER 명 명 (module)명 CPU PGA IDLE Threashold
pool
Reptile KILL
Snake
SNAKE SNAKE JDBC Client ⑤20% ⑥10M ⑦10M
app
OTHER_GROUP
service_name.
TURTLE_GROUP ‘SERVICE_NAME’.‘SERVICE_MODULE’ ③④ ANIMAL . JDBC Client
service_module
Additional requirements
- 21 -
Step Description Commands
생성 dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.create_consumer_group(
dbms_resource_manager.create_consumer_group(
consumer_group=> 'BIRD_GROUP',
dbms_resource_manager.create_consumer_group(
consumer_group=> 'TURTLE_GROUP',
dbms_resource_manager.create_consumer_group(
consumer_group=> 'SNAKE_GROUP',
2 Plan 생성 및 dbms_resource_manager.create_plan(
directive 생성 plan=>'DWPLAN',
dbms_resource_manager.create_plan_directive(
plan => 'DWPLAN',
comment => 'DWPLAN for BIRD_GROUP',
group_or_subplan => 'BIRD_GROUP',
max_idle_time => 60);
dbms_resource_manager.create_plan_directive(
plan => 'DWPLAN',
comment => 'DWPLAN for TURTLE_GROUP',
group_or_subplan => 'TURTLE_GROUP',
mgmt_p2 => 30,
max_est_exec_time => 300,
switch_group => 'kill_session',
switch_time => 30);
dbms_resource_manager.create_plan_directive(
plan => 'DWPLAN',
comment => 'DWPLAN for SNAKE_GROUP',
group_or_subplan => 'SNAKE_GROUP',
mgmt_p3 => 20,
- 22 -
undo_pool => 1024,
session_pga_limit => 10 );
3 유저에게 dbms_resource_manager_privs.grant_switch_consumer_group(
grant_option =>TRUE);
dbms_resource_manager_privs.grant_switch_consumer_group(
grantee_name =>'BIRD',
consumer_group =>'BIRD_GROUP',
grant_option =>TRUE);
dbms_resource_manager.set_initial_consumer_group('MAMMALIA','MAMMALIA_GROUP');
dbms_resource_manager.set_initial_consumer_group('BIRD','BIRD_GROUP');
mapping. dbms_resource_manager.oracle_user,
'MAMMALIA',
'MAMMALIA_GROUP');
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
dbms_resource_manager.oracle_user,
'BIRD',
'BIRD_GROUP');
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
dbms_resource_manager.service_name,
'SNAKE',
'SNAKE_GROUP');
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
dbms_resource_manager.service_module,
'TURTLE_GROUP');
dbms_resource_manager.validate_pending_area();
dbms_resource_manager.submit_pending_area();
END;
- 23 -
6. Reference
$ORACLE_HOME/rdbms/admin/dbmsrmand.sql
https://docs.oracle.com/en/database/oracle/oracle-
database/12.2/arpls/DBMS_RESOURCE_MANAGER.html#GUID-9876C289-99E4-416B-
AB6F-D8318642053E
<끝>
- 24 -