oracle resource manager的使用

本人發的第一篇博客,實在不高興慢慢寫了,就轉載了,這篇轉載的寫得還是很清楚的,基本把官方文檔都準確地翻譯出來了,反正自己也是用了很久了。

轉載自:http://blog.chinaunix.net/uid-26190993-id-3586933.html

Oracle Database Resource Manager,以下簡稱DBRM

         Resource Manager 提供了一種優化數據資源分配的有效辦法,相對於在OS層面進行資源分配,Resource Manager 擁有更精細的控制粒度,以及更小的資源消耗,並且解決了一些OS層面無法解決的資源分配問題。

一,基本概

. Simple View Of Resource Plan 



Resource consumer group 
(資源用戶組)
A group of sessions that are grouped together based on resource requirements. The Resource Manager allocates resources to resource consumer groups, not to individual sessions.
資源管理器將資源統一分配給資源用戶組,而不是某一個具體的會話,當會話建立時會根據自身屬性映射到不同的用戶組,並從中申請系統資源

Resource plan (資源計劃)
A container for directives that specify how resources are allocated to resource consumer groups. You specify how the database allocates resources by activating a specific resource plan.
一個數據庫可以有多個Resource Plan,但是同一時刻只能有一個Plan狀態爲Active(由初始化參數 resource_manager_plan 決定),關聯多個 Resource Plan directive 

Resource plan directive (資源計劃指令)
Associates a resource consumer group with a particular plan and specifies how resources are to be allocated to that resource consumer group.
創建一個計劃指令後就決定了系統資源如何分配給一個資源用戶組

二,如何創建一個資源計劃

1. 
Create Pending Area
All changes to the plan schema must be done within a pending area. The pending area can be thought of as a "scratch" area for plan schema changes.
所有關於 Resource Manager 組件創建和更改都必須在 Pending Area 中完成,文檔說可以理解爲一個“草稿區” 

  1. SQL> exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA


  2. PL/SQL procedure successfully completed.


2. Create A Resource Planing

創建資源計劃時需要注意的一點是如果 sub_plan 參數指定爲 TRUE,那麼這個計劃只能作爲子計劃使用,並且不需要爲 OTHER_GROUPS 創建 Plan Directive

  1. SQL> BEGIN

  2.   2 DBMS_RESOURCE_MANAGER.CREATE_PLAN(

  3.   3 plan => 'PLAN1',

  4.   4 comment => 'Test Plan...',

  5.   5 sub_plan => FALSE);                   --默認值即爲 FALSE

  6.   6 END;

  7.   7 /


  8. PL/SQL procedure successfully completed.


3. Create Consumer Groups

根據實際需求創建所需要的用戶組,需要注意的是雖然這一步並沒有創建 OTHER_GROUPS 用戶組,但是後面必須爲 OTHER_GROUPS 用戶組創建相對應的 
Plan Directive

  1. SQL> BEGIN

  2.   2 DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(

  3.   3 consumer_group => 'GROUP_OLTP',

  4.   4 comment => 'Group of OLTP USERS...',

  5.   5 mgmt_mth => 'ROUND-ROBIN');            --該用戶組內各會話的CPU資源採取輪詢的分配方法

  6.   6 END;

  7.   7 /


  8. PL/SQL procedure successfully completed.


  9. SQL> BEGIN

  10.   2 DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(

  11.   3 consumer_group => 'GROUP_OLAP',

  12.   4 comment => 'Group of OLAP USERS...',

  13.   5 mgmt_mth => 'ROUND-ROBIN');

  14.   6 END;

  15.   7 /


  16. PL/SQL procedure successfully completed.


4. Map 
Sessions To Consumer Groups
根據會話的登錄和運行屬性建立該會話和資源用戶組的映射關係,可以使用過程 SET_INITIAL_CONSUMER_GROUP 通過“Username”設置用戶的初始用戶資源組,該過程在11gR1被棄用後,改爲使用過程 SET_CONSUMER_GROUP_MAPPING 通過“Session Attribute”來映射用戶組,這裏所說的會話屬性包括: oracle_user,client_os_user,client_program,client_machine,module_name ...
當會話的多個屬性映射發生衝突時,會根據每個屬性的優先級來決定最終映射關係,使用這個過程來調整屬性的優先級:SET_CONSUMER_GROUP_MAPPING_PRI

  1. SQL> BEGIN

  2.   2 DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(

  3.   3 attribute => 'CLIENT_MACHINE',

  4.   4 value => 'ASM',                    --將從“ASM”客戶機發起的會話映射到“GROUP_OLAP”用戶組

  5.   5 consumer_group => 'GROUP_OLAP');

  6.   6 END;

  7.   7 /


  8. PL/SQL procedure successfully completed.


  9. SQL> BEGIN

  10.   2 DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(

  11.   3 attribute => 'CLIENT_MACHINE',

  12.   4 value => 'WORKGROUP\XIAO',         --將從“WORKGROUP\XIAO”客戶機發起的會話映射到“GROUP_OLTP”用戶組

  13.   5 consumer_group => 'GROUP_OLTP');

  14.   6 END;

  15.   7 /


  16. PL/SQL procedure successfully completed.


5. Create Resource Plan Directives

針對會話映射到的每一個用戶組創建資源計劃指令,可以看做是數據庫資源管理的控制核心,這裏可以控制的資源種類比較多:CPU使用、最大活躍會話數、會話並行度、會話最大空閒時間,Undo使用大小等

  1. SQL> BEGIN

  2.   2 DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(

  3.   3 plan => 'PLAN1',                                        --將該Plan Directive 關聯到 PLAN "Plan1"

  4.   4 group_or_subplan => 'GROUP_OLAP',                       --可以指定用戶組,也可以指定Sub Plan,和上一個參數構成了 Plan Diretive 的唯一屬性

  5.   5 comment => 'Directives for OLAP consumer group...',

  6.   6 active_sess_pool_p1 => 5,                               --最大活躍會話數,達到該限制後其他會話進入 Inactive session queue

  7.   7 queueing_p1 => 10,                                      --在 Inactive session queue 的等待超時時間

  8.   8 parallel_degree_limit_p1 => 2,                          --最大並行度

  9.   9 switch_group => 'KILL_SESSION',                         --在滿足指定條件後,對會話所採取的操作

  10.  10 switch_time => 3,                                       --執行時間限制,會話操作執行時間超過該值後,即被採取上一步的相應操作(second)

  11.  11 switch_estimate => FALSE,                               --如果設置爲 TRUE,在操作執行前Oracle先估算執行時間以決定是否對其切換用戶組

  12.  12 max_est_exec_time => 5,                                 --最大估算執行時間,優化器對操作時間進行估算,如果超過該值則直接返回“ORA-07455”

  13.  13 undo_pool => NULL,                                      --uncommited undo segments 限制(KB)

  14.  14 max_idle_time => 300,                                   --會話最大空閒時間

  15.  15 max_idle_blocker_time => 3,                             --Blocker會話的最大空閒時間

  16.  16 mgmt_p1 => 30,                                          --CPU使用限制(Level 1)

  17.  17 mgmt_p2 => 0);                                          --CPU使用限制(Level 2)

  18.  18 END;

  19.  19 /


  20. PL/SQL procedure successfully completed.


  21. SQL> BEGIN

  22.   2 DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(

  23.   3 plan => 'PLAN1',

  24.   4 group_or_subplan => 'GROUP_OLTP',                       --爲“GROUP_OLTP”用戶組創建指令計劃

  25.   5 comment => 'Directives for OLTP consumer group...',

  26.   6 active_sess_pool_p1 => 10,

  27.   7 switch_group => 'CANCEL_SQL',

  28.   8 switch_time => 3,max_idle_time => 3,

  29.   9 mgmt_p1 => 60,

  30.  10 mgmt_p2 => 0);

  31.  11 END;

  32.  12 /


  33. PL/SQL procedure successfully completed.


  34. SQL> BEGIN

  35.   2 DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(

  36.   3 plan => 'PLAN1',

  37.   4 group_or_subplan => 'OTHER_GROUPS',                     --爲沒有映射到以上用戶組中的會話創建 Plan Directive

  38.   5 comment => 'Directives for the other users group...',

  39.   6 parallel_degree_limit_p1 => 1,

  40.   7 mgmt_p1 => 0,

  41.   8 mgmt_p2 => 100);                                        --CPU使用限制(Level 2 的100%,即 Level 1 分配剩下的10%)

  42.   9 END;

  43.  10 /


  44. PL/SQL procedure successfully completed.


6. Validate & Submit Resource Plan
在對資源管理元素的創建及更改完成後執行校驗並提交,如果出現邏輯上的錯誤會導致報錯,比如:
  . 沒有定義 OTHER_GROUPS 用戶組的 Plan Directive
  . 一個 Plan 中各個 Plan Directive 的 mgmt_p1 或者 mgmt_p2 之和大於 100%
等一些其他的錯誤

  1. SQL> exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA()


  2. PL/SQL procedure successfully completed.


  3. SQL> exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA()


  4. PL/SQL procedure successfully completed.


7. View The Database Resource Manager Elements 

可以通過動態性能視圖和數據字典查看,也可以通過EM的圖形界面來查看

Consumer Groups:


Consumer Groups Mapping:


Resource Plan Directives:


至此,資源管理計劃已經創建完成,修改初始化參數 resource_manager_plan 以啓用新的資源管理計劃,或者直接在EM控制檯中將該計劃的狀態改爲“Active

附(動態性能視圖及數據字典
DBA_RSRC_CATEGORIES
DBA_RSRC_CONSUMER_GROUP_PRIVS
DBA_RSRC_CONSUMER_GROUPS
DBA_RSRC_GROUP_MAPPINGS
DBA_RSRC_IO_CALIBRATE
DBA_RSRC_MANAGER_SYSTEM_PRIVS
DBA_RSRC_MAPPING_PRIORITY
DBA_RSRC_PLAN_DIRECTIVES
DBA_RSRC_PLANS
V$RSRC_CONS_GROUP_HISTORY 
V$RSRC_CONSUMER_GROUP 
V$RSRC_CONSUMER_GROUP_CPU_MTH 
V$RSRC_PLAN 
V$RSRC_PLAN_CPU_MTH 
V$RSRC_PLAN_HISTORY 
V$RSRC_SESSION_INFO 
V$RSRCMGRMETRIC 
V$RSRCMGRMETRIC_HISTORY
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章