為什么要使用Oracle資源管理器 Oracle資源管理器簡介 Oracle資源管理器(Oracle Database Resource Manager,以下簡稱DBRM)管理數(shù)據(jù)庫資源,為不同的會話分配不同的數(shù)據(jù)庫資源。資源管理器有三個部件組成:資源用戶組(Resource consumer group )、資源規(guī)劃(Resource plan )及資源計劃指令(Resource plan directives) 。具體描述參見下表
子資源計劃 資源指令除了給組分配資源,還可以為其他資源計劃分配資源,被分配資源的計劃成為子計劃。下圖是一個包含子計劃的資源計劃的例子。
資源管理器的默認設(shè)置 默認的三個系統(tǒng)資源計劃:internal_plan、internal_quiesce,system_plan。其中internal_plan、internal_quiesce只是一個空殼,里面沒有任何資源計劃,可以通過對這兩個資源計劃進行修改來滿足我們的需求。而system_plan只對cpu進行了限制。 默認的三個用戶組 sys_group:作為sys和system用戶的默認用戶組。 other_group:如果當(dāng)前用戶不屬于當(dāng)前資源計劃中的任何用戶組,則會被納入other_group.任何資源計劃都必須包含other_group。 low_group:表示該用戶對資源的請求級別是最低的。默認沒有用戶進入該用戶組。 任何一個數(shù)據(jù)庫用戶都必須納入到一個用戶組中,該用戶組被叫做初始用戶組(initial consumer group)。如果沒有顯示的指定初始用戶組,那么該用戶的初始用戶組為default_consumer_group。 Oracle資源管理 創(chuàng)建資源用戶組
其中Scheduling Policy表示在同一用戶組中的用戶之間如何分配CPU Round Robin:在用戶組成員之間平均分配CPU Run to Completion:運行時間最長的用戶優(yōu)先獲得CPU 進行初始化用戶組的設(shè)置
用戶組與資源的映射關(guān)系 資源管理器提供了6種映射資源用戶的方法。這6種映射方法分別是,指定通過某個特定操作系統(tǒng)用戶登錄到數(shù)據(jù)庫所產(chǎn)生的session屬于某個用戶組;指定某個特定的客戶端計算機名稱登錄的數(shù)據(jù)庫所產(chǎn)生的session屬于某個用戶組;指定某個應(yīng)用程序登錄到數(shù)據(jù)庫所產(chǎn)生的session屬于某個用戶組。指定通過某個服務(wù)名登錄到數(shù)據(jù)庫所產(chǎn)生的session屬于某個用戶組;指定通過特定模塊登錄到數(shù)據(jù)庫所產(chǎn)生的session屬于某個用戶組;指定通過特定模塊并執(zhí)行特定動作登錄到數(shù)據(jù)庫所產(chǎn)生的session屬于某個用戶組。
用戶組與資源映射的優(yōu)先級 由于我們可以設(shè)置登錄操作系統(tǒng)的用戶所對應(yīng)的用戶組(比如oracle用戶對應(yīng)OS_GRP),同時設(shè)置登錄數(shù)據(jù)庫的用戶對應(yīng)的用戶組(比如用戶HR屬于OLTP_GRP)。因此,就存在一個問題:如果兩者的設(shè)置矛盾怎么辦?在資源管理器中通過指定映射關(guān)系的優(yōu)先級來解決這個問題
創(chuàng)建資源計劃
Active this plan:激活該資源計劃。 我們也可以在sqlplus里激活該資源計劃 SQL> alter system set resource_manager_plan='MY_DAY_PLAN';
SQL> show parameter resource_manager_plan Automatic Plan Switch Enabled:表示該計劃激活后可以被其他的時間窗(window)激活其他計劃。 在資源計劃中我們一共可以設(shè)置8個CPU使用的優(yōu)先級,級別1為最高,級別8為最低。注意,在不同級別中CPU的總額不能超過100%。同時,只有在CPU使用率達到100%的時候,這里指定的不同級別所使用的CPU百分值才會生效。也就是說,即使系統(tǒng)完全空閑時,那么other_group的用戶登錄系統(tǒng)一樣也可以使用100%的CPU。而如果當(dāng)other_group用戶在執(zhí)行操作過程中sys_group組用戶登錄數(shù)據(jù)庫,造成系統(tǒng)CPU滿負荷運轉(zhuǎn)。那么Oracle會優(yōu)先為sys_group組分配CPU,只有當(dāng)sys_group執(zhí)行完畢后才會為other_group組成員分配CPU。 換句話說,LEVEL 3所能獲得的全部資源就是LEVEL 2所未能使用的那部分資源。 需要強調(diào)的一點是OTHER_GROUPS這個資源用戶組。任何一個資源計劃必須要包括這個OTHER_GROUPS用戶組,如果你的資源計劃沒有包括這個用戶組,那么將會得到一個ORA-07453的錯誤,要求你必須添加此用戶組。這個用戶組的作用就是作為一個候選項,當(dāng)一個沒有匹配到任何資源用戶組的SESSION連接到數(shù)據(jù)庫的時候會自動的匹配到OTHER_GROUPS下面,按照OTHER_GROUPS的資源限定執(zhí)行SQL。 使用DBMS_RESOURCE_MANAGER包創(chuàng)建的sql如下
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN=>'MY_DAY_PLAN',GROUP_OR_SUBPLAN => ' SYS_GROUP ',COMMENT => ' ',CPU_P1 => 100); 驗證資源計劃是否對CPU進行分配 思路,讓BATCH_GRP和OLTP_GRP分別運行dead.sql腳本,該腳本為死循環(huán)的開方腳本,可消耗系統(tǒng)cpu而不是消耗系統(tǒng)內(nèi)存。 dead.sql腳本如下 [oracle@dg1 ~]$ cat dead.sql SQL> conn hr/hr; SQL> show user; 兩個會話同時執(zhí)行dead.sql SQL> @/home/oracle/dead.sql
可以看到BATCH_GRP用戶組消耗了1795.99秒的CPU時間,可以看到OLTP_GRP用戶組消耗了7125.53秒的CPU時間,同時圖餅也顯示BATCH_GRP消耗20%的CPU資源,OLTP_GRP消耗80%的CPU資源。 |
|