Oracle 資源管理(resource manager)

gholay發表於2014-03-02
假如管理一下具有如下問題的產品資料庫:
後臺批作業佔用了大量的資源,將會阻礙了其他要同時執行的更重要的作業。
如要排程大型作業,但不能預計它們何時才能完成。
作業的優先次序沒有得到區分,而致使重要的作業不能預先完成。
某些使用者使用過量的CPU時間,從而導致總體資源缺乏,這時,不得不結束其會話。
有些使用者在操作中使用非常高的並行度,這會降低系統的整體效能。
所有這些問題都源於DBA不能夠在競爭中有效地分配有限的資源,這時,很可能會收到憤怒的客戶電話。
針對於這些問題,我們可以使用 Oracle database resource manager 來進行管理。
下面我們以例子的形式來介紹Oracle資源管理(resource manager)的使用。

一、授權
對於DBA,已經具有執行dbms_resource_manager程式包下的所有過程的許可權,但對於其他使用者,需要授予名為
administer_resource_manager的系統許可權,以便使用Oracle resource manager。如下:
SQL> begin
  2     dbms_resource_manager_privs.grant_system_privilege(
  3     grantee_name=>'djp01',
  4     privilege_name=>'administer_resource_manager',
  5     admin_option=>true);
  6  end;
  7  /

PL/SQL procedure successfully completed.

SQL>
SQL> begin
  2     dbms_resource_manager_privs.grant_system_privilege(
  3     grantee_name=>'imadmin',
  4     privilege_name=>'administer_resource_manager',
  5     admin_option=>true);
  6  end;
  7  /

PL/SQL procedure successfully completed.

SQL>
說明:我們利用dbms_resource_manager_privs.包中的gratn_system_privilege過程為使用者djp01和imadmin授予administer_resource_manager許可權。

二、建立未決區
未決區是建立與資源消費組,資源計劃,資源指示的臨時工作區。建立如下:
SQL> exec dbms_resource_manager.create_pending_area;

PL/SQL procedure successfully completed.

SQL>

三、建立資源消費組
資源消費組用來根據資源需求將類似的使用者放到一起。例子如下:
SQL> begin
  2     dbms_resource_manager.create_consumer_group(
  3     consumer_group=>'app',
  4     comment=>'app user');
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL> 
SQL> begin
  2     dbms_resource_manager.create_consumer_group(
  3     consumer_group=>'admin',
  4     comment=>'user admin system');
  5  end;
  6  /

PL/SQL procedure successfully completed.

SQL>
說明:consuber_group用來指定資源消費組名,connent用來給資源消費組新增註釋。還有一些預設的引數,如CPU_MTH,該引數有兩個值為:run_to_completion和round_robin(預設)。run_to_completion方法為優先排程那些佔用較長時間的會話,
round_robin是使用一個迴圈排程系統。對於上述,我們使用預設的CPU排程方法建立消費組app和admin。我們可以用如下的資料字典檢視:
SQL> select consumer_group,cpu_method,mgmt_method
  2  from dba_rsrc_consumer_groups
  3  where consumer_group in (upper('app'),upper('admin'))
  4  /

CONSUMER_GROUP
------------------------------------------------------------
CPU_METHOD
------------------------------------------------------------
MGMT_METHOD
------------------------------------------------------------
ADMIN
ROUND-ROBIN
ROUND-ROBIN

APP
ROUND-ROBIN
ROUND-ROBIN


SQL>

四、建立資源計劃:
資源計劃包含各資源消費組之間資源分配的指示。例子如下:
SQL> begin
  2     dbms_resource_manager.create_plan(
  3     plan=>'membership_plan',
  4     cpu_mth=>'ratio',
  5     comment=>'new membership resource plan');
  6  end;
  7  /

PL/SQL procedure successfully completed.

SQL>
說明:plan用來指定資源計劃的名稱,CPU_mth指定資源消費組之間分配CPU的方法,預設為emphasisI(百分比),另一個值為ratio(比率)。connect新增註釋。還有一些其他預設的引數:active_sess_pool_mth此引數確定資源組中活動會話數目的限制;到11g版本,唯一一個值為active_sess_pool_absolute方法。parallel_degree_limit_mth此引數確定某個特定操作的並行度,到11g版本,唯一一個值為parallel_degree_limit_absolute。sub_plan此引數確定是否子計劃,預設為false。queueing_mth此引數確定排隊會話將執行的順序,可以選項為fifo_timeout。

五、建立資源計劃指示
資源計劃指示(resource plan directive)用來把資源計劃分配到資源消費組中。例子如下:
SQL> begin
  2     dbms_resource_manager.create_plan_directive(
  3     plan=>'membership_plan',
  4     group_or_subplan=>'app',
  5     comment=>'app grooup',
  6     cpu_p1=>100);
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL> begin
  2     dbms_resource_manager.create_plan_directive(
  3     plan=>'membership_plan',
  4     group_or_subplan=>'admin',
  5     comment=>'admin group',
  6     cpu_p2=>70);
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL>
說明:plan用於指定資源計劃,group_or_subplan用於指定資源消費組或子計劃,connent用於新增註釋。
cpu_pn此引數指定可在消費組或子計劃中分配CPU資源。可以使用多層CPU資源分配,以區分出CPU的優先順序。如,保證僅在層次一需求後還剩的CPU時,層次二才能獲得CPU資源。 ACTIVE_SESS_POOL_P1此引數用來設定活動會話開啟的最大數目。 PARALLEL_DEGREE_LIMIT_P1此引數用來設定並行度的限制,MAX_IDLE_TIME此引數用來設定單個會話空間的最大時間。 SWITCH_GROUP此引數指定會話可根據特定的切換條件進行切換的消費組。兩個切換組為cancel_sql 和kill_session。與
SWITCH_GROUP有關引數的設定,SWITCH_IO_MEGABYTES此引數指定會話在資料庫在採取措施前可以傳送的IO位元組資料。 SWITCH_IO_REQS指定可執行的IO數目。SWITCH_FOR_CALL如果設定為true,Oracle將完成頂層後被切換以原來的會話。

六、驗證並提交未決區
SQL> exec dbms_resource_manager.validate_pending_area;

PL/SQL procedure successfully completed.

SQL> exec dbms_resource_manager.submit_pending_area;

PL/SQL procedure successfully completed.

SQL>
我們用如下的方式進行檢視:
SQL> select group_or_subplan,cpu_p1,cpu_p2,cpu_p3,status
  2  from dba_rsrc_plan_directives
  3  where plan = upper('membership_plan')
  4  /

GROUP_OR_SUBPLAN                                                 CPU_P1
------------------------------------------------------------ ----------
    CPU_P2     CPU_P3
---------- ----------
STATUS
------------------------------------------------------------
APP                                                                  90
         0          0


ADMIN                                                                 0
         70          0



SQL>

七、指派使用者到資源消費組中,如下:
建立使用者後,Oracle會分配一個預設的資源消費組,為default_consumer_group,如果指派使用者到其他消費組,那麼,
需要授予如下許可權:
SQL> exec dbms_resource_manager_privs.grant_switch_consumer_group-
> (grantee_name=>'djp01',-
> consumer_group=>'app',-
> grant_option=>true);

PL/SQL procedure successfully completed.

SQL> 
SQL> exec dbms_resource_manager_privs.grant_switch_consumer_group-
> (grantee_name=>'imadmin',-
> consumer_group=>'admin',-
> grant_option=>true);

PL/SQL procedure successfully completed.

SQL>
下面我們進行使用者分配:
SQL> exec dbms_resource_manager.set_initial_consumer_group('djp01','app');

PL/SQL procedure successfully completed.

SQL> exec dbms_resource_manager.set_initial_consumer_group('imadmin','admin');

PL/SQL procedure successfully completed.

SQL>
關於會話資源消費組的自動指派和消費組之間的切換及複雜管理,我這裡沒有列出,方法一樣,只是多了幾道手續而已,有需要的請查閱相關資料或給我留言。
下面,我們檢視使用者djp01,imadmin的屬性:
SQL> select username,initial_rsrc_consumer_group
  2  from dba_users
  3  where username in(upper('djp01'),upper('imadmin'))
  4  /

USERNAME
------------------------------------------------------------
INITIAL_RSRC_CONSUMER_GROUP
------------------------------------------------------------
IMADMIN
ADMIN

DJP01
APP


SQL>

八、啟用Oracle Resource Manager
通過設定init.ora或spfile.ora檔案中的resource_manager_plan引數來進行啟用,如下:
SQL> alter system set resource_manager_plan = membership_plan
  2  /

System altered.

SQL>
說明:如果需要停止,那麼將其設定為空即可(resource_manager_plan=' ')。下面,我們檢視當前的活動資源:
SQL> select name,is_top_plan
  2  from v$rsrc_plan
  3  /

NAME                                                             IS_TOP_PLA
---------------------------------------------------------------- ----------
MEMBERSHIP_PLAN                                                  TRUE

SQL>
該資源成功使用。
關於消費組的、資源計劃與指示的更改和刪除,用法一樣,我這裡沒有列出,有需要的,請查閱相關資料或給我留言。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29196873/viewspace-1098090/,如需轉載,請註明出處,否則將追究法律責任。

相關文章