제27장 DBMS_RESOURCE_MANAGER

내용 목차

27.1. 개요
27.2. 프러시저
27.2.1. CREATE_CONSUMER_GROUP
27.2.2. CREATE_PLAN
27.2.3. CREATE_PLAN_DIRECTIVE
27.2.4. CREATE_SIMPLE_PLAN
27.2.5. DELETE_CONSUMER_GROUP
27.2.6. DELETE_PLAN
27.2.7. DELETE_PLAN_DIRECTIVE
27.2.8. SET_CONSUMER_GROUP_MAPPING
27.2.9. SWITCH_PLAN
27.2.10. UPDATE_CONSUMER_GROUP
27.2.11. UPDATE_PLAN
27.2.12. UPDATE_PLAN_DIRECTIVE

본 장에서는 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 패키지에서 제공하는 프러시저를 알파벳 순으로 설명한다.

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_percent1번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다.
    group2_percent2번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다.
    group3_percent3번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다.
    group4_percent4번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다.
    group5_percent5번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다.
    group6_percent6번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다.
    group7_percent7번째 CONSUMER GROUP에게 지정할 목표 CPU 자원 사용량을 백분율로 나타낸 값이다.
    group8_percent8번째 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에 세션을 지정하는 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; 
    /