Oracle Resource Manager

一、資源管理器(DRM)由三個要素組成:
資源消費羣(resource consumer group)
資源計劃(resource plan)
資源計劃指令(resource plan directive)
執行與DRM有關的操作,必須具有 administer_resource_manager 系統權限。

二、資源消費羣
一個用戶可以隸屬於多個消費羣,但一個會話同一時間只能隸屬於一個消費羣。
ORACLE 已經預定義了4個消費羣:
 
default_consumer_group :未分配消費羣的用戶和會話。
other_groups :當前的資源計劃中沒有明確指定資源分配所有消費羣。任何一個資源計劃中都必須包含此羣。
sys_group 和 low_group :用於執行系統計劃的消費羣。
 
1、創建、更新、刪除消費羣()
 
創建:exec dbms_resource_manager.create_cosumer_group('羣名','註釋');
 
更新:exec dbms_resource_manager.update_consumer_group('羣名','註釋');
 
刪除:exec dbms_resource_manager.delete_consumer_group('羣名');
執行此命令後,隸屬於此羣的用戶和會話將自動轉到 default_consumer_group.
 
 
2、將用戶會話分配給消費羣(消費羣映射)
可以基於會話的屬性將會話動態分配給消費羣,成爲消費羣映射。
 
(1)設定映射:


dbms_resource_manager.set_consumer_group_mapping(
attribute => oracle_user,
value => 'user1',
consumer_group => 'low_group');
 
如上,當會話的oracle用戶屬性值爲user1時,就將之分配給消費羣low_group。
 
(2)設定映射優先權:
由於可能會出現某會話的兩個屬性分別滿足兩個不同的映射規則,那麼該服從哪個規則呢?——可以設定各個屬性的優先權,服從優先級高的屬性。
dbms_resource_manager.set_mapping_priority(
oracle_user => 1,
client_os_user => 2);
 
(3)動態轉換會話的消費羣
 基於會話的唯一標識轉換消費羣:(會話唯一標識由 session_id 和 session_serial 共同組成,這兩個參數的值在 v$session 視圖中)。
BEGIN
  DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS ('17', '12345',
   'HIGH_PRIORITY');
END;
/
 
基於會話所屬的用戶轉換消費羣:(將用戶下的所有會話轉換消費羣)

BEGIN
  DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_USER ('HR',
    'LOW_GROUP'); 
END;
/

用戶轉換自己當前會話的消費羣:(使用 dbms_session 包)

SET serveroutput on
DECLARE
    old_group varchar2(30);
BEGIN
  DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP('BATCH_GROUP', old_group, FALSE);
END;
/
轉換自己當前會話的消費羣需要特定權限:
dbms_resource_manager_privs.grant_switch_consumer_group(
grantee_name => 'user1',
consumer_group => 'low_group',
grant_option => 'false');
撤銷此權限:
dbms_resource_manager_privs.revoke_switch_consumer_group(
grantee_name => 'user1',
consumer_group => 'low_group');

 

三、資源計劃
分爲簡單資源計劃和複雜資源計劃。
 
1、簡單資源計劃
有如下特點:
(1)三要素在一個過程中定義。
(2)只能分配cpu資源。
(3)只能使用emphasis方式分配cpu資源(即百分比)。
(4)分配的消費羣最大數爲8個。
 
創建:
dbms_resource_manager.create_simple_plan(
simple_plan => '計劃名',
consumer_group1 => '消費羣1',
group1_cpu => 50,
consumer_group2 => '消費羣2',
group2_cpu => 50);
 
 
2、複雜資源計劃
特點:
(1)三要素必須單獨創建。
(2)可以嵌套子計劃。
 
創建:
dbms_resource_manager.create_plan(
plan => '計劃名',
comment => '註釋');

如:創建一個名爲DAYTIME的資源計劃

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PLAN(
   PLAN    => 'DAYTIME',
   COMMENT => 'More resources for OLTP applications');
END;
/

3、修改資源計劃:
dbms_resource_manager.update_plan(
plan => '計劃名',
new_屬性 => '新值');

如:

BEGIN
  DBMS_RESOURCE_MANAGER.UPDATE_PLAN(
   PLAN => 'DAYTIME',
   NEW_COMMENT => '50% more resources for OLTP applications');
END;
/

4、刪除資源計劃:
dbms_resource_manager.delete_plan('計劃名');

dbms_resource_manager.delete_plan_cascade('計劃名');
加上cascade參數,刪除計劃內的要素。

如:

BEGIN
  DBMS_RESOURCE_MANAGER.DELETE_PLAN(PLAN => 'great_bread');
END;
/

 

四、計劃指令 
創建:
dbms_resource_manager.create_plan_directive(
plan => '計劃名',
group_or_subplan => '消費羣或子計劃',
資源限制參數);

如:創建一個用於OLTP羣,如果超過10000的I / O請求或超過2500字節的數據轉移資源計劃到LOW_GROUP。會話調用完成後返回到其原始組

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
   PLAN                => 'DAYTIME',
   GROUP_OR_SUBPLAN    => 'OLTP',
   COMMENT             => 'OLTP group',
   MGMT_P1             => 75,
   SWITCH_GROUP        => 'LOW_GROUP',
   SWITCH_IO_REQS      => 10000,
   SWITCH_IO_MEGABYTES => 2500,
   SWITCH_FOR_CALL     => TRUE);
END;
/

注:可以爲子計劃創建指令,但只能分配cpu資源。
 
更新:
dbms_resource_manager.update_plan_directive(
兩個必需參數,
new_屬性 => '新值');

如:

BEGIN
  DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
         PLAN             => 'SIMPLE_PLAN1',
         GROUP_OR_SUBPLAN => 'MYGROUP1',
         NEW_COMMENT      => 'Higher priority'
        );
  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/


刪除:
dbms_resource_manager.delete_plan_directive(
兩個必需參數);
 

參考官網:http://docs.oracle.com/cd/E11882_01/server.112/e25494/dbrm.htm#ADMIN11842

發佈了46 篇原創文章 · 獲贊 30 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章