resource manager的幾個功能
1.保護某個session分配到的最小的CPU資源,而不管系統的壓力和用戶的數量。
2.針對不同的用戶和應用分配不同不理的CPU時間。
3.限制用戶組成員的任何操作的並行深度。
4.管理並行隊列中並行的執行順序,緊急應用的並行可以優先於其它優先級低的並行。
5.限制group中用戶可以使用的並行的數量,這樣確保所有的並行資源分配到一個group中。
6.創建active session pool。Active session pool 由同一個group中用戶session被允許併發active的最大數量組成。
附加的session可以超過這個限制執行,當job 隊列中斷後,可以指定超時時間。
7.管理runaway session。1.修改group可以消耗的CPU資源的比率值。2.檢測session或者call是否超過了指定CPU或者I/O限制。然後斷開session或者call,或者切換到小的CPU值。
8.阻止優化器估算其運行時間超過指定限制的操作。
9.限制session 可以被空閒的時間
10.根據工作量的改變允許數據庫使用不同的resource plan。可以動態的修改這些resource plan。也可以在Scheduler中使用resource plan.
resource manager有如下三個元素
1.resource consumer group
是一個用戶session 的集合,其根據session需要的進程進行歸類,當一個session 創建之後,它就自動根據用戶指定的規則映射到對應的consumergroup。
DBA 也可以手工的切換session 到不同的consumer group。 簡言之,就是使用PL/SQL包來切換session 到指定的consumer group
因爲Resource Manager 僅分配資源到一個consumer group,當一個session變成consumer group中的一員時,它的資源分配就由該consumer group 決定
在數據字典裏一直存在3個特定的consumer groups,它們不能修改和刪除:SYS_GROUP OTHER_GROUP
2.resource plan directive
Resource Manager 根據當前active resource plan的ResourcePlan directive的設置分配資源到consumer groups,resource plan和resource plan directives 是父子關係,每個resource plan directives 只對應一個consumer group。
每個指令都有一些方法,其用來限制資源分配到某個consumer group。
3.resource plan
每個指令都有一些方法,其用來限制資源分配到某個consumer group。
注意:
當前active resource plan 不會強制分配直到CPU使用率達到100%,如果CPU 使用率在100%以下,那麼數據庫不會強制分配資源。
當強制分配時,其他consumer 不用的allocation都可以被其他的consumergroups使用
subplan
resource plan directive 可以參考另一個resource plan,這種情況下,這plan就叫作subplan。Subplan自己包含指令用來分配資源到consumer groups和其他的subplans。每個subplan 分配的資源都是其consumer groups 和subplans的一部分,可以創建任意多個subplans。
subplan不能循環引用
權限
管理Resource Manager必須需要ADMINISTER_RESOURCE_MANAGER權限,在DBA的role裏已經包含了這個權限。
賦予、收回權限必須用DBMS_RESOURCE_MANAGER_PRIVS包來執行
BEGIN
DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE(
GRANTEE_NAME => 'HR',
PRIVILEGE_NAME => 'ADMINISTER_RESOURCE_MANAGER',
ADMIN_OPTION => FALSE);
END;
/
11g R2多出的新功能
1.ParallelTarget Percentage
如果一個consumer group 使用了所有的並行,那麼當其他consumergroup的高優先級的並行就沒有parallel server 來分配,可以通過限制特定consumer group的並行數來避免這個問題。
2.Parallel Queue Timeout
當使用並行隊列時,如果數據庫沒有足夠的資源來執行並行,那麼並行就會進入隊列,直到有資源時才變成可用。 但是存在一種情況,就是並行等待了很長的時間才執行,可以設置並行在隊列中的最長等待時間來避免這種問題