Resource Manager DB2019. 2. 9. 23:22
□ RM(Resource Manager)이란?
○ 정의
비효율적인 OS 관리로 초래된 문제들(자원의 부적절한 할당, 비효율적인 스케쥴링 등)을 해결하기 위해 Oracle DB server가 자원 관리 결정을 더 잘 하도록 하는 것
○ RM 기능
- 사용자 수나 시스템 부하에 관계없이 사용자에게 자원처리 최소량 보증
- 각각 다른 사용자나 응용프로그램에 CPU time 비율을 할당하여 가용 자원 분배. DW에서는 Batch job보다ROLAP 응용프로그램에 높은 비율이 주어짐
- 사용자 그룹(DB사용자를 리소스 그룹별로 그루핑)이 수행하는 작업의 병행성 수준을 제한
- Active Session Pool(동시에 활성화 되는 세션의 최대치로 구성) 생성. 최대치를 넘어서는 세션은 대기하며,해당 세션에 대해 소멸시간 설정가능
- 관리자 정의 기준에 따라 사용자를 다른 그룹으로 자동 전환 가능(특정 사용자 그룹이 지정된 시간보다 긴 세션을 수행할 경우, 해당 세션을 다른 사용자 그룹으로 옮길 수 있음)
- Optimizer가 추정한 특정 작업(규정된 시간제한을 넘어서는 작업)의 수행 방지
- Undo Pool 생성(한 그룹의 사용자들이 이용하는 undo 스페이스의 양으로 구성)
- session idle time의 양을 제한
- 자원할당을 위한 특정 메서드를 사용하기 위해 instance를 설정instance의 재시작이나 종료 없이 daytime이나 nighttime 설정으로 메서드 변경 가능)
- long-running session 이나 long-running SQL statement 취소를 허용
○ RM 요소
Element | Description |
Resource consumer group | 자원 처리 요청에 의거 그루핑된 사용자 session |
Resource plan | Resource consumer grouop에 어떻게 자원을 할당할 것인지 구체화 |
Resource allocation method | 데이터베이스 RM이 자원을 할당할 때 사용하는 메서드/정책. 데이터베이스는 가용한 자원할당 메서드를 제공하고 관리자가 어떤 것을 사용할지 선택 |
Resource plan directive | Resource consumer group과 특정 plan을 연관시키고Resource consumer group에게 어떻게 자원을 할당시킬지 정하는데 사용 |
○ Resource Plan 이해
- 기본형태
(출처: http://docs.oracle.com/cd/B19306_01/server.102/b14231/dbrm.htm#i1007556)
하나의 플랜에 따라 각 Resource consumer group이 할당받는 CPU자원이 다름. 만약 SALES group이 자원을 사용하지 않으면 다른 group이 자원을 사용하도록 허용해야함.
- Subplan이 있는 형태
하나의 플랜 아래 Subplan을 두는 것이 가능하며, 이 플랜에 Resource consumer grouop을 세분하할 수 있음. Subplan이나 Resource consumer grouop은 하나 이상의 부모(플랜)을 가질 수 있음. ex) 위 그림에서GREAT_BREAD 플랜이 DAY plan과 NIGHT plan으로 나누어졌을 경우 두 플랜 모두 SALES_TEAM Subplan을 멤버로 두는 것이 가능
* 위 그림에는 없으나 항상 Default로 OTHER_GROUPS가 설정되어 있어야 함
○ DBMS_RESOURCE_MANAGER 패키지
데이터베이스 RM을 관리할 수 있는 시스템 권한(ADMINISTER_RESOURCE_MANAGER)이 있어야 함. 주로 DBA가 ADMIN 옵션으로 해당 권한을 가지고 있음. 권한 획득 후에는 DBMS_RESOURCE_MANAGER 패키지에 있는 프로시져 사용 가능
Procedure | Description |
CREATE_SIMPLE_PLAN | Creates a simple resource plan, containing up to eight consumer groups, in one step. This is the quickest way to get started when you use this package. |
CREATE_PLAN | Creates a resource plan and specifies its allocation methods. |
UPDATE_PLAN | Updates a resource plan. |
DELETE_PLAN | Deletes a resource plan and its directives. |
DELETE_PLAN_CASCADE | Deletes a resource plan and all of its descendents. |
CREATE_CONSUMER_GROUP | Creates a resource consumer group. |
UPDATE_CONSUMER_GROUP | Updates a consumer group. |
DELETE_CONSUMER_GROUP | Deletes a consumer group. |
CREATE_PLAN_DIRECTIVE | Specifies the resource plan directives that allocate resources to resource consumer groups or subplans in a plan. |
UPDATE_PLAN_DIRECTIVE | Updates plan directives |
DELETE_PLAN_DIRECTIVE | Deletes plan directives |
CREATE_PENDING_AREA | Creates a pending area (scratch area) within which changes can be made to a plan schema |
VALIDATE_PENDING_AREA | Validates the pending changes to a plan schema |
CLEAR_PENDING_AREA | Clears all pending changes from the pending area |
SUBMIT_PENDING_AREA | Submits all changes for a plan schema |
SET_INITIAL_CONSUMER_GROUP | Sets the initial consumer group for a user. This procedure has been deprecated. The database recommends that you use the SET_CONSUMER_GROUP_MAPPING procedure to specify the initial consumer group. |
SWITCH_CONSUMER_GROUP_FOR_SESS | Switches the consumer group of a specific session |
SWITCH_CONSUMER_GROUP_FOR_USER | Switches the consumer group of all sessions belonging to a specific user |
SET_CONSUMER_GROUP_MAPPING | Maps sessions to consumer groups |
SET_CONSUMER_GROUP_MAPPING_PRI | Establishes session attribute mapping priorities |
* 플랜 정보 보는 법
- Viewing plan information:
select plan, comments from dba_rsrc_plans;
- Viewing current consumer group for sessions:
select sid, serial#, resource_consumer_group from v$session;
- Viewing the currently active plans:
alert system set resource_manager_plan = 플랜명;
select name, IS_TOP_PLAN from v$rsrc_plan;
- Viewing consumer group Granted to user or role:
select * from dba-rsrc_consumer_group_privs;
- Viewing directive:
select plan, max_est_exec_time, comments, type from dba_rsrc_plan_directives;
○ Pending Area
현재 수행중인 어플리케이션에 영향을 주지 않고 플랜을 만들거나 변경하거나 삭제할 수 있도록 하는 staging area. pending area에서 변경을 한 뒤에는 변경사항을 데이터사전에 적용하기 위해서 pending arear를validate하고 submit해야 함(pending area 없이 플랜을 생성하거나 변경, 삭제 하는 경우 에러 메시지 리턴).
clear_pending_area 프로시져를 통해 pending area로부터 모든 변경사항을 비우고, pending area를 비활성화시킬 수 있으며, 해당 프로시져 다음에는 반드시 다른 변경 시도를 위해서 pending area를 생성해야 함.
○ DBMS_SCHEDULER 패키지
PL/SQL 프로그램에서 호출될 수 있는 스케쥴링 프로시져 패키지. subprogram 중 window를 통해 플랜들을 각각 다른 시간에 자동으로 활성화되게 할 수 있음.
- CREATE_WINDOW Procedure 사용법:
DBMS_SCHEDULER.CREATE_WINDOW (
window_name IN VARCHAR2(윈도우 명),
resource_plan IN VARCHAR2(리소스 플랜명),
start_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL(시작시간),
repeat_interval IN VARCHAR2(반복 간격, Calendaring Syntax로 작성),
end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL(종료 시간),
duration IN INTERVAL DAY TO SECOND(지속시간, numtodsinterval로 설정),
window_priority IN VARCHAR2(두 window가 겹칠 때 우선순위) DEFAULT 'LOW',
comments IN VARCHAR2 DEFAULT NULL);
* Calendaring Syntax:
(http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sched.htm#BABFBCEF)
* numtodsinterval: numtodsinterval(n, 'interval unit') 형태로 사용
'interval unit'에는 'DAY', 'HOUR', 'MINUTE', 'SECOND' 가능
- DROP_WINDOW Procedure 사용법:
DBMS_SCHEDULER.DROP_WINDOW (
window_name IN VARCHAR2(윈도우 명),
force IN BOOLEAN(윈도우 활성에 관계없이 실행 여부) DEFAULT FALSE);
* 윈도우 정보 보는 법
- Viewing window and resource plan information:
select * from dba_schedular_windows;
'DB' 카테고리의 다른 글
DataWarehouse 란? (0) | 2019.03.07 |
---|---|
파티셔닝 (0) | 2019.02.09 |
PL/SQL 조건, 반복 제어문 (0) | 2017.08.05 |
PL/SQL 구조와 변수 (0) | 2017.08.03 |
PL/SQL 시작하기 (0) | 2017.07.18 |