TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-20 |
제목 | DATABASE RESOURCE MANAGER ( ORACLE 8I NEW FEATURE ) | ||
---|---|---|---|
DATABASE RESOURCE MANAGER ( ORACLE 8I NEW FEATURE )
=================================================== SCOPE ----- 8i~10g Standard Edition 에서는 Database Resource Manager 를 지원하지 않는다. Explanation ----------- Database Resource Manager란 OS에서 제공하는 자원 (예 : CPU 자원 )에 대해 DB 차원에서 계획을 세워, 세부 관리를 할 수 있도록 해 주는 서비스이다. 예를 들어 주간에 batch 작업을 처리하더라도, OLTP 업무에는 지장을 주지 않아야 할 경우 batch 작업에 CPU 자원을 적게 할당해 주는 것이 바람직 하며, Resource Manager를 활용하여 CPU 자원을 batch 작업과 OLTP 업무에 서로 다르게 할당해 줄 수 있다. ( Oracle 8.1.6 까지는 Resouurce Manager에서 CPU 자원에 대해서만 관리만 가능하다 ) 1. 용어 1) Resource Consumer Group 사용자 session들의 집합. Resource에 대한 요구사항에 따라 나뉘어진 그룹. 2) Resource Plan Consumer Group에 자원을 할당 해 주기 위한 resource plan directive들을 포함. 3) Resource Allocation Method Resource Manager에서 자원을 할당해 주는 방법/정책. 4) Resource Plan Directive Resource Plan에 대해 자원을 할당해 주는 세부 내역. 2. Resource Consumer Group * 기본 group [ 사용자가 삭제, 수정할 수 없는 group ] OTHER_GROUPS : active plan schema에 속하지 않는 consumer group의 모든 session DEFAULT_CONSUMER_GROUP : consumer group을 지정하지 않은 모든 session.(default) [ 기본적으로 제공되나 사용자가 삭제하거나 변경할 수 있는 group ] SYS_GROUP : SYSTEM_PLAN에 대한 high priority consumer group SYSTEM, SYS user에 할당한다. LOW_GROUP : SYSTEM_PLAN에 대한 low priority consumer group 3. Resource Plan Consumer group에 속하는 session들은 해당 group에 대한 resource plan에 따라 자원 할당이 결정되며, 자원 할당에 대한 세부 사항은 resource plan에 대한 resource plan directive에서 지정된다. Resource plan은 subplan을 둘 수 있다. 4. Resource Allocation Method Round-robin Method : Consumer group 내에서 session들에 대한 CPU 할당 Emphasis Method : Consumer group에 할당되는 CPU Absolute Method : Parallel degree 한계 ( 예 : Parallel Query에서의 degree ) 5. Resource Plan Directive Resource Plan Directive에 지정된 내용들은 resource plan에 따라 consumer group에 자원을 할당할 때 반영된다. 6. 구현 예제 MYDB PLAN +-> MAILDB PLAN +-> POSTMAN GROUP (40% Level 1) | (30% Level 1) | | +-> USERS GROUP (80% Level 2) | | | +-> MAILMAINT GROUP (20% Level 2) | | | +-> OTHER GROUP (100% Level 3) | +-> BUGDB PLAN +-> ONLINE GROUP (80% Level 1) (70% Level 1) | +-> BATCH GROUP (20% Level 1) | +-> BUGMAINT GROUP (100% Level 2) | +-> OTHER GROUP (100% Level 3) 위 예에서 MYDB PLAN에는 2개의 subplan ( MAILDB PLAN, BUGDB PLAN )이 있으며 각각 30%와 70%의 CPU 자원을 할당하였다. Level 1, Level 2, Level 3 는 우선순위 레벨을 의미하며, 하나의 resource plan에서 동일한 level의 합이 100%를 넘지 못한다. ( Level 은 1부터 8까지 지정할 수 있으며 level 1이 가장 우선순위가 높으며 level 8이 가장 우선순위가 낮다 ) 예를 들어 전체 CPU 자원의 70%를 할당 받은 BUGDB PLAN은 다시 ONLINE GROUP과 BATCH GROUP을 두고 있는데, 이 둘의 Level이 모두 1이며 두개의 percentage의 합이 100%이다. 하지만, 즉, level 1인 ONLINE GROUP 에 90%를 할당하였다면, level 1인 BATCH GROUP에는 10% 이상을 할당할 수 없다. Example -------- * 구현을 위한 코드 BEGIN ---------------------------------------------------------------------- /* PLAN schema 작업 영역 생성 */ DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA(); ---------------------------------------------------------------------- /* BUGDB PLAN, MAILDB PLAN, MYDB PLAN 생성 */ DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'bugdb_plan', COMMENT => 'Resource plan/method for bug users sessions'); DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'maildb_plan', COMMENT => 'Resource plan/method for mail users sessions'); DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'mydb_plan', COMMENT => 'Resource plan/method for bug and mail users sessions'); ---------------------------------------------------------------------- /* CONSUMER GROUP 생성 */ DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Bug_Online_group', COMMENT => 'Resource consumer group/method for online bug users sessions'); DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Bug_Batch_group', COMMENT => 'Resource consumer group/method for bug users sessions who run batch jobs'); DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Bug_Maintenance_group', COMMENT => 'Resource consumer group/method for users sessions who maintain the bug db'); DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Mail_users_group', COMMENT => 'Resource consumer group/method for mail users sessions'); DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Mail_Postman_group', COMMENT => 'Resource consumer group/method for mail postman'); DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Mail_Maintenance_group', COMMENT => 'Resource consumer group/method for users sessions who maintain the mail db'); ---------------------------------------------------------------------- /* BUGDB PLAN에 대한 DIRECTIVE 생성 */ DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'bugdb_plan', GROUP_OR_SUBPLAN => 'Bug_Online_group', COMMENT => 'online bug users sessions at level 1', CPU_P1 => 80, CPU_P2=> 0, PARALLEL_DEGREE_LIMIT_P1 => 8); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'bugdb_plan', GROUP_OR_SUBPLAN => 'Bug_Batch_group', COMMENT => 'batch bug users sessions at level 1', CPU_P1 => 20, CPU_P2 => 0, PARALLEL_DEGREE_LIMIT_P1 => 2); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'bugdb_plan', GROUP_OR_SUBPLAN => 'Bug_Maintenance_group',COMMENT => 'bug maintenance users sessions at level 2', CPU_P1 => 0, CPU_P2 => 100, PARALLEL_DEGREE_LIMIT_P1 => 3); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'bugdb_plan', GROUP_OR_SUBPLAN => 'OTHER_GROUPS', COMMENT => 'all other users sessions at level 3', CPU_P1 => 0, CPU_P2 => 0, CPU_P3 => 100); (참고) CPU_P1 : cpu allocation for level 1 ---------------------------------------------------------------------- /* MAILDB PLAN에 대한 DIRECTIVE 생성 */ DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'maildb_plan', GROUP_OR_SUBPLAN => 'Mail_Postman_group',COMMENT => 'mail postman at level 1', CPU_P1 => 40, CPU_P2 => 0, PARALLEL_DEGREE_LIMIT_P1 => 4); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'maildb_plan', GROUP_OR_SUBPLAN => 'Mail_users_group', COMMENT => 'mail users sessions at level 2', CPU_P1 => 0, CPU_P2 => 80, PARALLEL_DEGREE_LIMIT_P1 => 4); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'maildb_plan', GROUP_OR_SUBPLAN => 'Mail_Maintenance_group',COMMENT => 'mail maintenance users sessions at level 2', CPU_P1 => 0, CPU_P2 => 20, PARALLEL_DEGREE_LIMIT_P1 => 2); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'maildb_plan', GROUP_OR_SUBPLAN => 'OTHER_GROUPS', COMMENT => 'all other users sessions at level 3', CPU_P1 => 0, CPU_P2 => 0, CPU_P3 => 100); ---------------------------------------------------------------------- /* MYDB PLAN에 대한 DIRECTIVE 생성 */ DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'mydb_plan', GROUP_OR_SUBPLAN => 'maildb_plan', COMMENT=> 'all mail users sessions at level 1', CPU_P1 => 30); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'mydb_plan', GROUP_OR_SUBPLAN => 'bugdb_plan', COMMENT => 'all bug users sessions at level 1', CPU_P1 => 70); ---------------------------------------------------------------------- /* PLAN schema 작업 내용을 저장 */ DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA(); DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA(); end; 7. CONSUMER GROUP에 사용자나 세션을 할당하는 방법 먼저 인스턴스에서 사용할 TOP Level resource plan 을 지정한다. initSID.ora에 RESOURCE_MANAGER_PLAN = MRDB_PLAN 지정이나 아래와 같이 session level에 ALTER SYSTEM command를 사용하여 지정한다. ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = MYDB_PLAN; 그리고 SCOTT 계정에 BUG_ONLINE_GROUP과 BUB_BATCH_GROUP 에 속할 수 있는 권한을 부여 DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP ('SCOTT', 'BUG_ONLINE_GROUP', TRUE); DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP ('SCOTT', 'BUG_BATCH_GROUP', TRUE); * DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP( user in varchar2, consumer_group in varchar2); 예) DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP('SCOTT', 'BUG_ONLINE_GROUP'); SCOTT 계정을 BUG_BATCH_GROUP에 할당 * DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS ( session_id IN NUMBER, session_serial IN NUMBER, consumer_group IN VARCHAR2); 예) DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS( 11, 2, 'BUG_ONLINE_GROUP'); * DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_USER ( user IN VARCHAR2, consumer_group IN VARCHAR2); 예) DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_USER('SCOTT', 'BUG_BATCH_GROUP'); 8. 관련된 Dictionary DBA_RSRC_PLANS : Resource plan과 status DBA_RSRC_PLAN_DIRECTIVES : Resource plan directives와 status DBA_RSRC_CONSUMER_GROUPS : Consumer group과 status DBA_RSRC_CONSUMER_GROUP_PRIVS : 사용자에게 부여된 Consumer group DBA_USERS : INITIAL_RSRC_CONSUMER_GROUP라는 새로운 column이 추가 V$SESSION : RESOURCE_CONSUMER_GROUP라는 새로운 column이 추가 V$RSRC_PLAN : 새로운 view로 active resource plan을 보여준다 V$RSRC_CONSUMER_GROUP : 새로운 view로 consumer group의 active session 을 보여준다. Reference Ducumment --------------------- |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |