Resource Manager資源管理之使用組切換分析
一、建立實驗所需計劃、使用者組等
1)建立erp_plan計劃,otlp、batch使用者組
1 BEGIN
2 DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
3 DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'erp_plan',
4 COMMENT => 'Resource plan/method for ERP Database');
5 DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'oltp',
6 COMMENT => 'Resource consumer group/method for OLTP jobs');
7 DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'batch',
8 COMMENT => 'Resource consumer group/method for BATCH jobs');
9 DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'erp_plan',
10 GROUP_OR_SUBPLAN => 'oltp', COMMENT => 'OLTP sessions', CPU_P1 => 80,
11 SWITCH_GROUP => 'batch', SWITCH_TIME => 1,SWITCH_ESTIMATE => TRUE,
12 UNDO_POOL => 100);
13 DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'erp_plan',
14 GROUP_OR_SUBPLAN => 'batch', COMMENT => 'BATCH sessions', CPU_P2 => 100,
15 ACTIVE_SESS_POOL_P1 => 1, QUEUEING_P1 => 5,
16 UNDO_POOL=>50000);
17 DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'erp_plan',
18 GROUP_OR_SUBPLAN => 'OTHER_GROUPS', COMMENT => 'mandatory', CPU_P3 => 100
;
19 DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
20 DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
21* END;
2)授予使用者oltp、batch切換許可權後,使用者可以切換到指導使用者組
1 begin
2 dbms_resource_manager_privs.grant_switch_consumer_group(
3 grantee_name => 'oltp',
4 consumer_group => 'oltp',
5 grant_option => false );
6* end;
1 begin
2 dbms_resource_manager_privs.grant_switch_consumer_group(
3 grantee_name => 'batch',
4 consumer_group => 'batch',
5 grant_option => false );
6* end;
3) 設定oltp、batch預設使用者組
1 begin
2 dbms_resource_manager.set_initial_consumer_group(
3 user => 'oltp', consumer_group => 'oltp');
4* end;
1 begin
2 dbms_resource_manager.set_initial_consumer_group(
3 user => 'batch', consumer_group => 'batch');
4* end;
4) 檢視當前會話的資源使用者組
SQL> show user;
USER 為 "BATCH"
SQL> select resource_consumer_group from v$session
2 where sid =(select sid from v$mystat where rownum=1);
RESOURCE_CONSUMER_GROUP
--------------------------------
BATCH
SQL> show user;
USER 為 "OLTP"
SQL> select resource_consumer_group from v$session
2 where sid =(select sid from v$mystat where rownum=1);
RESOURCE_CONSUMER_GROUP
--------------------------------
OLTP
5) 啟用erp_plan計劃
SQL> alter system set resource_manager_plan='ERP_PLAN';
系統已更改。
SQL> select * from v$rsrc_plan;
ID NAME IS_TO
---------- -------------------------------- -----
56227 ERP_PLAN TRUE
二、準備實驗測試分析
建立batch、oltp表,並檢視v$rsrc_consumer_group
Create table batch as select * from dba_objects;
Create table oltp as select * from dba_objects;
SQL> select name,active_sessions, session_switches_in, session_switches_out,req
uests from v$rsrc_consumer_group;
NAME ACTIVE_SESSIONS SESSION_SWITCHES_IN SESSION_SWITCHES_OUT
---------- --------------- ------------------- --------------------
BATCH 0 0 0
OTHER_GROU 1 0 0
PS
OLTP 0 0 0
SQL> select plan,group_or_subplan, undo_pool from DBA_RSRC_PLAN_DIRECTIVES where
plan= 'ERP_PLAN';
PLAN GROUP_OR_SUBPLAN UNDO_POOL
------------------------------ ------------------------------ ----------
ERP_PLAN BATCH 50000
ERP_PLAN OTHER_GROUPS
ERP_PLAN OLTP 100
實驗一:
在oltp會話執行:
SQL> set timing on
SQL> insert into oltp select * from oltp;
已建立50652行。
已用時間: 00: 00: 00.25
NAME ACTIVE_SESSIONS SESSION_SWITCHES_IN SESSION_SWITCHES_OUT
---------- --------------- ------------------- -------------------- -
BATCH 1 1 0
OTHER_GROU 1 0 0
PS
OLTP 0 0 1
將batch的undo_pool改為100
SQL> select plan,group_or_subplan, undo_pool from DBA_RSRC_PLAN_DIRECTIVES where
plan= 'ERP_PLAN';
PLAN GROUP_OR_SUBPLAN UNDO_POOL
------------------------------ ------------------------------ ----------
ERP_PLAN BATCH 100
ERP_PLAN OTHER_GROUPS
ERP_PLAN OLTP 100
先關閉oltp會話,使其退出batch使用組,因為我們只分配一個session給batch使用組
NAME ACTIVE_SESSIONS SESSION_SWITCHES_IN SESSION_SWITCHES_OUT
---------- --------------- ------------------- --------------------
BATCH 0 0 1
OTHER_GROU 1 0 0
PS
OLTP 0 1 0
在batch會話執行:
SQL> set timing on
SQL> insert into batch select * from batch;
insert into batch select * from batch
*
第 1 行出現錯誤:
ORA-30027: 違反還原限額 - 無法獲得 128 個(位元組)
已用時間: 00: 00: 00.06
在oltp會話執行:
SQL> set timing on
SQL> insert into oltp select * from oltp;
insert into oltp select * from oltp
*
第 1 行出現錯誤:
ORA-30027: 違反還原限額 - 無法獲得 200 個(位元組)
分析:發現在oltp會話執行插入時發生了一次使用組切換,從oltp到batch,並且處於活動會話狀態,根據我們的設定可以發現,switch_time=1,執行時間並沒有超過1秒,所以不是由於執行時間導致的使用組切換,當我們把batch的undo_pool設定為100時,並在batch會話執行同樣的insert 語句,我們發現ORA-30027: 違反還原限額的錯誤。故說明了當oltp會話在執行插入語句時,發現產生的undo資料大於oltp組的限制,於是切換到batch組,此時batch組的限額為50000,滿足需求,故能完成插入操作。如果還是不能滿足,則還是要報錯。
實驗二:
將batch的undo_pool設定回50000,然後在oltp執行剛才的插入操作
PLAN GROUP_OR_SUBPLAN UNDO_POOL
------------------------------ ------------------------------ ----------
ERP_PLAN BATCH 50000
ERP_PLAN OTHER_GROUPS
ERP_PLAN OLTP 100
在oltp插入資料:
SQL> insert into oltp select * from oltp;
已建立101304行。
已用時間: 00: 00: 00.25
此時系統中有batch活動會話存在
NAME ACTIVE_SESSIONS SESSION_SWITCHES_IN SESSION_SWITCHES_OUT
---------- --------------- ------------------- --------------------
BATCH 1 0 1
OTHER_GROU 1 0 0
PS
OLTP 0 1 0
當在另一個視窗想以batch登入時顯示超時錯誤,因為計劃中只允許一個活動會話存在:
E:\Documents and Settings\Administrator>sqlplus batch/batch
SQL*Plus: Release 10.2.0.4.0 - Production on 星期五 12月 9 13:15:50 2011
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-07454: 佇列超時, 已超過 5 秒
然後,當我們在另一個視窗開啟oltp,並執行插入插入,並切換到batch組時,我們發現:
NAME ACTIVE_SESSIONS SESSION_SWITCHES_IN SESSION_SWITCHES_OUT
---------- --------------- ------------------- --------------------
BATCH 2 2 0
OTHER_GROU 1 0 0
PS
OLTP 0 0 2
分析:計劃指定中設定的最大會話池,只能限定新的會話開啟,即當已有活動會話數達到上限時,不能再讓新的會話登入,但它對從其他使用者組切換進來的會話沒有限制作用,即當活動會話數達到上限時,otlp因為達到沒有標準而切換到batch,此時還是可以成功。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24104518/viewspace-713032/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 資源管理(resource manager)Oracle
- 資料庫資源管理器(Database Resource Manager)資料庫Database
- profile的resource limits和資源計劃resource_manager_plan的limitMIT
- MySQL8.0——Resource Group(資源組)MySql
- 一個RESOURCE MANAGER引起的問題分析
- linux 切換使用者報Resource temporarily unavailableLinuxAI
- Oracle Database Resource ManagerOracleDatabase
- Oracle Resource Manager概述Oracle
- C# Resource Management (資源管理器)C#
- 使用resource_manager限制使用者並行度並行
- web效能之資源載入時間分析【Resource Timing】【原創】Web
- ubuntu切換源Ubuntu
- 啟停AIX HACMP,切換資源AIACM
- siebel切換資料來源【轉】
- 在Ubuntu內使用聲音切換器簡單切換音訊源Ubuntu音訊
- 【資源管理器】資源使用者組、資源計劃、資源計劃指令
- 2.7 Overview of Oracle Resource Manager in a CDBViewOracle
- oracle resource manager (ORM)舉例OracleORM
- Laravel驅動管理類Manager的分析和使用Laravel
- 註解切換雙資料來源
- AbstractRoutingDataSource 實現動態資料來源切換原理簡單分析
- mybatis 多資料來源動態切換MyBatis
- SSM(八)動態切換資料來源SSM
- HomeBrew切換國內源
- windows下使用nvm,以及切換nvm下載源Windows
- Spring AOP動態切換資料來源Spring
- 資源路由resource index 不是get路由Index
- REST – 如何抽象為資源(Resource)REST抽象
- REST - 如何抽象為資源(Resource)REST抽象
- Springboot通過AOP整合多資料來源,分析@Transaction切換資料來源不生效問題Spring Boot
- Laravel 路由 resource 方法:定義使用者資源路由Laravel路由
- Ubuntu切換為阿里映象源Ubuntu阿里
- Spring 多資料來源 AOP 動態切換Spring
- 30個類手寫Spring核心原理之動態資料來源切換Spring
- linux學習之使用者的切換Linux
- oracle 之dataguard standby 切換Oracle
- Kubernetes Extended Resource 擴充套件資源使用簡介套件
- OCM實驗-GC資源管理器資源消耗組演示GC