728x90
# RESOURCE MANAGER
l Resource manager란?
- 특정 세션이 오라클 서버의 리소스를 과도하게 사용하지 못하도록 제한을 거는 기능
l Resource manager 기능을 사용하기 위해서 설정해야할 내용
- resource consumer group : 리소스를 사용하고 있는 그룹
- resource plan : daytimeplan, nighttimeplan을 만듦
- daytimeplan - cpu 할당방식을 정한다
: oltp 80% cpu 사용
: batch 20% cpu 사용
l Resource Manager 로 제한할 수 있는 리소스의 종류
- CPU 사용량
- 병렬도 : 병렬작업할 수 있는 수
/*+ parallel(emp,20) */
- 활성 세션 수 : waiting 하고 있는 세션의 갯수
- 언두 생성
: rollback 할 수도 있기 때문에 undo에 넣어둔다. 대규모 데이터를 delete 시키면 다른 유저들이 작업을 못한다
: delete from sales;
- 작업 실행 시간
- idel 시간 : 특정 시간동안 아무것도 안하면 접속이 끊어진다
n Resource Manager 테스트
a) SYSTEM user로 접속하여 consumer group ONLINE_USERS 를 생성한다 SQL> conn system/oracle SQL> exec dbms_resource_manager.create_pending_area(); - Resource Manager를 설정 SQL> exec dbms_resource_manager.create_consumer_group('ONLINE_USERS','Users for Online'); - 컨서머 그룹을 생성 b) resource plan DAYTIME 을 다음과 같이 생성한 후 view를 통해 확인한다. A. SYS_GROUP : CPU_P1=100 B. ONLINE_USERS : CPU_P2=70, MAX_IDEL_BLOCKER_TIME=30 C. OTHER_GROUPS : CPU_P2=30, PARALLEL_DEGREE_P1=4 SQL> begin dbms_resource_manager.create_plan('DAYTIME','Plan for day'); end; / - DAYTIME 이라는 리소스 플랜 생성 SQL> begin dbms_resource_manager.create_plan_directive('DAYTIME', 'SYS_GROUP','1st Group Set', cpu_p1=>100); end; / - SYS 유저는 cpu를 100% 사용할 수 있도록 지시어 생성 - SYS 유저는 가장 우선순위를 높게 만듦 SQL> begin dbms_resource_manager.create_plan_directive('DAYTIME', 'ONLINE_USERS','2nd Group set', cpu_p2=>70,max_idle_blocker_time=>30); end; / - online_users 그룹은 cpu를 70%만 사용할 수 있도록 지시어 생성 - max_idle_blocker_time=>30 : 30초 후에 홀더를 자동으로 kill SQL> begin dbms_resource_manager.create_plan_directive('DAYTIME', 'OTHER_GROUPS','3rd Group', cpu_p2=>30,parallel_degree_limit_p1=>4); end; / - other 그룹은 cpu를 30% 사용할 수 있도록 지시어 생성 SQL> exec dbms_resource_manager.validate_pending_area(); - 설정한 리로스 매니저 성정이 유효할지 확인 SQL> exec dbms_resource_manager.submit_pending_area(); - 설정한 리소스 매니저 기능을 구현 SQL> select plan, group_or_subplan, cpu_p1, cpu_p2, parallel_degree_limit_p1 dop, max_idle_blocker_time block_t from dba_rsrc_plan_directives order by 1,2 / c) HR user를 consumer group ONLINE_USERS로 지정하고 default consumer group으로 지정한다. SQL> exec dbms_resource_manager_privs.grant_switch_consumer_group('HR', 'ONLINE_USERS', true); - online users 그룹에 HR 등록 SQL> exec dbms_resource_manager.set_initial_consumer_group('HR', 'ONLINE_USERS'); - online users 그룹에 HR 등록 SQL> select * from dba_rsrc_consumer_group_privs; GRANTEE GRANTED_GROUP GRA INI ------------------------------ ------------------------------ --- --- PUBLIC DEFAULT_CONSUMER_GROUP YES YES SYSTEM SYS_GROUP NO YES HR ONLINE_USERS NO YES PUBLIC LOW_GROUP NO NO e) 현재 instance에만 resource plan DAYTIME을 활성화 시키시오. SQL> alter system set resource_manager_plan=daytime scope=memory; - - 메모리에 바로 적용하겠다 5. 활성화된 Resource Plan에 대한 사용자에 대한 테스트를 수행한다. a) 새로운 HR session 2개를 생성한다. 이때 SYSTEM user session 에서 V$SESSION 를 조회하여 HR user의 2개의 세션에 대한 consumer group 를 확인한다. SQL> conn system/oracle SQL> select sid, serial#, blocking_session,resource_consumer_group from v$session where username = 'HR'; # HR 1st Session $ sqlplus hr/hr # HR 2nd Session $ sqlplus hr/hr # SYSTEM Session SQL> select sid, serial#, blocking_session,resource_consumer_group from v$session where username = 'HR'; SID SERIAL# BLOCKING_SESSION RESOURCE_CONSUMER_GROUP ---------- ---------- ---------------- -------------------------------- 136 4996 ONLINE_USERS 145 610 ONLINE_USERS a) HR 1st Session 에서 다음의 update문을 수행한다. Update employees set salary = 30000 where department_id = 20; b) HR 2nd Session에서 다음의 update 문을 수행한다. Update employees set salary = 2000 where department_id in ( 10,20); - 똑 같은 부서번호 20번으로 업데이트를 시키기 때문에 waiting 한다 - waiting 하다가 30초 후에 kill 된다 c) HR 1st session으로 인한 blocking time이 30초가 넘으면 HR 1st Session은 자동으로 종료되고 HR 2nd Session이 정상적으로 update가 수행되었음을 확인할 수 있다. 다음의 쿼리문을 조회하여 결과를 확인한다. select name, ACTIVE_SESSIONS, IDLE_BLKR_SESSIONS_KILLED from v$RSRC_CONSUMER_GROUP; # HR 1st Session SQL> Update employees set salary = 30000 where department_id = 20; # HR 2nd Session SQL> Update employees set salary = 2000 where department_id in ( 10,20); - WAITING (잠시 기다리면 세션이 정상적으로 update되었음을 확인할 수 있다. # SYSTEM Session SQL> select name, ACTIVE_SESSIONS, IDLE_BLKR_SESSIONS_KILLED from v$RSRC_CONSUMER_GROUP; NAME ACTIVE_SESSIONS IDLE_BLKR_SESSIONS_KILLED -------------------------------- --------------- ------------------------- SYS_GROUP 1 0 ONLINE_USERS 1 1 OTHER_GROUPS 0 0 e) HR 1st Session이 정상적으로 Killed되었음을 확인하고 HR 2nd Session은 rollback하고 세션들을 정리한다. # HR 1st Session SQL> Update employees set salary = 30000 where department_id = 20; SQL> select * from tab; ERROR at line 1: ORA-02396: exceeded maximum idle time, please connect again SQL> exit; # HR 2nd Session SQL> Update employees set salary = 2000 where department_id in ( 10,20); SQL> rollback; SQL> exit; |
'빅데이터과정 > WORKSHOP 2 ' 카테고리의 다른 글
#35_140801_TUNING_SUBQUERY TUNING (0) | 2014.08.01 |
---|---|
#31_140725_WSHOP2_SCHEDULER (0) | 2014.07.25 |
#31_140725_WSHOP2_RESUMABLE SPACE ALLOCATION (0) | 2014.07.25 |
#31_140725_WSHOP2_DB REORG (0) | 2014.07.25 |
#31_140725_WSHOP2_DATABASE REPLAY (0) | 2014.07.25 |