日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OCP读书笔记(16) - 管理资源

發(fā)布時(shí)間:2025/3/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OCP读书笔记(16) - 管理资源 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用者組

創(chuàng)建資源用戶組OLTP_GRP,將用戶HR,OE加入此組:

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.create_consumer_group(
    consumer_group => 'OLTP_GRP',
    comment => '',      
    cpu_mth => 'ROUND-ROBIN'
  );
  dbms_resource_manager.submit_pending_area();
  BEGIN
    dbms_resource_manager_privs.grant_switch_consumer_group('HR', 'OLTP_GRP', false);
    dbms_resource_manager_privs.grant_switch_consumer_group('OE', 'OLTP_GRP', false);
  END;
END;

創(chuàng)建資源用戶組BATH_GRP,將用戶BI,SH加入此組:

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.create_consumer_group(
    consumer_group => 'BATH_GRP',
    comment => '',
    cpu_mth => 'ROUND-ROBIN'
  );
  dbms_resource_manager.submit_pending_area();
  BEGIN
    dbms_resource_manager_privs.grant_switch_consumer_group('BI', 'BATH_GRP', false);
    dbms_resource_manager_privs.grant_switch_consumer_group('SH', 'BATH_GRP', false);
  END;
END;

將HR,OE的初始化用戶組制定為OLTP_GRP

BEGIN
  dbms_resource_manager.set_initial_consumer_group(
    user => 'HR',
    consumer_group => 'OLTP_GRP'
  );
END;

BEGIN
  dbms_resource_manager.set_initial_consumer_group(
    user => 'OE',
    consumer_group => 'OLTP_GRP'
  );
END;

將BI,SH的初始化用戶組制定為BATH_GRP

BEGIN
  dbms_resource_manager.set_initial_consumer_group(
    user => 'BI',
    consumer_group => 'BATH_GRP'
  );
END;

BEGIN
  dbms_resource_manager.set_initial_consumer_group(
    user => 'SH',
    consumer_group => 'BATH_GRP'
  );
END;

創(chuàng)建一個(gè)資源計(jì)劃“MY_DAY_PLAN”,并對CPU進(jìn)行資源分配:

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.create_plan( 'MY_DAY_PLAN', '');
  dbms_resource_manager.create_plan_directive(
    plan => 'MY_DAY_PLAN',
    group_or_subplan => 'BATH_GRP',
    comment => '',
    cpu_p1 => NULL, cpu_p2 => 20, cpu_p3 => NULL, cpu_p4 => NULL,
    cpu_p5 => NULL, cpu_p6 => NULL, cpu_p7 => NULL, cpu_p8 => NULL,
    parallel_degree_limit_p1 => NULL,
    active_sess_pool_p1 => NULL,
    queueing_p1 => NULL,
    switch_group => '',
    switch_time => NULL,
    switch_estimate => false,
    max_est_exec_time => NULL,
    undo_pool => NULL,
    max_idle_time => NULL,
    max_idle_blocker_time => NULL,
    switch_time_in_call => NULL
  );
  dbms_resource_manager.create_plan_directive(
    plan => 'MY_DAY_PLAN',
    group_or_subplan => 'OLTP_GRP',
    comment => '',
    cpu_p1 => NULL, cpu_p2 => 80, cpu_p3 => NULL, cpu_p4 => NULL,
    cpu_p5 => NULL, cpu_p6 => NULL, cpu_p7 => NULL, cpu_p8 => NULL,
    parallel_degree_limit_p1 => NULL,
    active_sess_pool_p1 => NULL,
    queueing_p1 => NULL,
    switch_group => '',
    switch_time => NULL,
    switch_estimate => false,
    max_est_exec_time => NULL,
    undo_pool => NULL,
    max_idle_time => NULL,
    max_idle_blocker_time => NULL,
    switch_time_in_call => NULL
  );
  dbms_resource_manager.create_plan_directive(
    plan => 'MY_DAY_PLAN',
    group_or_subplan => 'OTHER_GROUPS',
    comment => '',
    cpu_p1 => NULL, cpu_p2 => NULL, cpu_p3 => 100, cpu_p4 => NULL,
    cpu_p5 => NULL, cpu_p6 => NULL, cpu_p7 => NULL, cpu_p8 => NULL,
    parallel_degree_limit_p1 => NULL,
    active_sess_pool_p1 => NULL,
    queueing_p1 => NULL,
    switch_group => '',
    switch_time => NULL,
    switch_estimate => false,
    max_est_exec_time => NULL,
    undo_pool => NULL,
    max_idle_time => NULL,
    max_idle_blocker_time => NULL,
    switch_time_in_call => NULL
  );
  dbms_resource_manager.create_plan_directive(
    plan => 'MY_DAY_PLAN',
    group_or_subplan => 'SYS_GROUP',
    comment => '',
    cpu_p1 => 100, cpu_p2 => NULL, cpu_p3 => NULL, cpu_p4 => NULL,
    cpu_p5 => NULL, cpu_p6 => NULL, cpu_p7 => NULL, cpu_p8 => NULL,
    parallel_degree_limit_p1 => NULL,
    active_sess_pool_p1 => NULL,
    queueing_p1 => NULL,
    switch_group => '',
    switch_time => NULL,
    switch_estimate => false,
    max_est_exec_time => NULL,
    undo_pool => NULL,
    max_idle_time => NULL,
    max_idle_blocker_time => NULL,
    switch_time_in_call => NULL
  );
  dbms_resource_manager.submit_pending_area();
  dbms_resource_manager.switch_plan( plan_name => 'MY_DAY_PLAN', sid => 'orcl' );
END;

確認(rèn)用戶的初始化用戶組:

conn /as sysdba
alter user hr account unlock identified by hr;
alter user oe account unlock identified by oe;
alter user bi account unlock identified by bi;
alter user sh account unlock identified by sh;

grant select on v_$session to hr,oe,bi,sh;
grant select on v_$mystat to hr,oe,bi,sh;

conn hr/hr
select resource_consumer_group from v$session where sid=(select sid from v$mystat where rownum=1);

conn bi/bi
select resource_consumer_group from v$session where sid=(select sid from v$mystat where rownum=1);

我們不僅可以通過指定用戶與資源用戶組的映射關(guān)系,從而指定用戶所產(chǎn)生的session所屬的用戶組,我們還可以通過其他映射關(guān)系來指定session屬于哪個(gè)用戶組

資源管理器提供了很多種映射用戶組的方法,比如我們可以指定某個(gè)特定的客戶端計(jì)算機(jī)名稱登錄到數(shù)據(jù)庫產(chǎn)生的session屬于某個(gè)用戶組,也可以指定通過某個(gè)特定的應(yīng)用程序登錄到數(shù)據(jù)庫所產(chǎn)生的session屬于某個(gè)用戶組等

由于我們可以設(shè)置登錄到操作系統(tǒng)的用戶所對應(yīng)的用戶組(比如oracle對應(yīng)os_grp組),同時(shí)設(shè)置登錄數(shù)據(jù)庫用戶所對應(yīng)的用戶組(比如用戶HR對應(yīng)OLTP_GRP),因此就存在一個(gè)問題,當(dāng)這兩種設(shè)置存在矛盾時(shí),應(yīng)該怎么辦?比如,我們以oracle用戶登錄操作系統(tǒng),然后以HR用戶登錄到數(shù)據(jù)庫,這時(shí)產(chǎn)生的session到底屬于哪個(gè)用戶組呢?
通過設(shè)定這些映射的優(yōu)先級來解決這個(gè)問題,默認(rèn)情況下,操作系統(tǒng)用戶映射關(guān)系的優(yōu)先級比數(shù)據(jù)庫用戶映射關(guān)系低

測試對CPU的限制
在hr和bi下分別運(yùn)行死循環(huán):
conn hr/hr
declare
  i number;
  j number;
begin
  i := 0;
  loop
    j := sqrt(i);
    i := i + 1;
  end loop;
end;
conn bi/bi
declare
  i number;
  j number;
begin
  i := 0;
  loop
    j := sqrt(i);
    i := i + 1;
  end loop;
end;

對并行度的限定

在沒有對BATH_GRP進(jìn)行限定之前:

conn sh/sh

select sid from v$mystat where rownum=1;

select /*+parallel(sales,6)*/ * from sales;

conn /as sysdba

select sid, qcsid, degree from v$px_session where qcsid=159;

對其限定后:

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.update_plan_directive(
    plan => 'MY_DAY_PLAN',
    group_or_subplan => 'BATH_GRP',
    new_comment => '',
    new_parallel_degree_limit_p1 => 3
  );
  dbms_resource_manager.submit_pending_area();
END;

conn sh/sh

select sid from v$mystat where rownum=1;

select /*+parallel(sales,6)*/ * from sales;

conn /as sysdba

select sid, qcsid, degree from v$px_session where qcsid=140;

可以看到,雖然只指定了并行度為6,但是使用資源管理器對其限定后,只產(chǎn)生3個(gè)從屬進(jìn)程

設(shè)置活動(dòng)的會(huì)話數(shù)(session個(gè)數(shù))

當(dāng)用戶組里某個(gè)用戶所產(chǎn)生的會(huì)話數(shù)超過了session數(shù)的限定值時(shí),如果還要再產(chǎn)生session,則會(huì)將session放入隊(duì)列,直到當(dāng)前正在活動(dòng)的session變?yōu)椴换顒?dòng)時(shí),等待活動(dòng)的session才開始活動(dòng),該隊(duì)列為先進(jìn)先出的規(guī)則,注意,并行執(zhí)行時(shí)產(chǎn)生的從屬進(jìn)程不算作活動(dòng)的session,我們可以控制試圖活動(dòng)的session在隊(duì)列里存放的時(shí)間長度,這叫超時(shí)。如果在隊(duì)列里的session等待時(shí)間超過指定的時(shí)間,則該session被切斷。

對OLTP_GRP進(jìn)行限定

conn /as sysdba

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.update_plan_directive(
    plan => 'MY_DAY_PLAN',
    group_or_subplan => 'BATH_GRP',
    new_comment => '',
    new_active_sess_pool_p1 => 2,
    new_queueing_p1 => 5
  );
  dbms_resource_manager.submit_pending_area();
END;

以bi用戶連入數(shù)據(jù)庫,開兩個(gè)會(huì)話,并運(yùn)行死循環(huán)

conn bi/bi

declare
  i number;
  j number;
begin
  i := 0;
  loop
    j := sqrt(i);
    i := i + 1;
  end loop;
end;

conn bi/bi

declare
  i number;
  j number;
begin
  i := 0;
  loop
    j := sqrt(i);
    i := i + 1;
  end loop;
end;

開第三個(gè)session

conn bi/bi

ERROR:
ORA-07454: queue timeout, 5 second(s), exceeded

select sysdate from dual;
select sysdate from dual
*
ERROR at line 1:
ORA-07454: queue timeout, 5 second(s), exceeded

將其中一個(gè)session,kill掉

select sysdate from dual;

產(chǎn)生UNDO的數(shù)量

conn /as sysdba
grant select on dba_objects to hr;

conn hr/hr
create table test as select * from dba_objects;

conn /as sysdba

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.update_plan_directive(
    plan => 'MY_DAY_PLAN',
    group_or_subplan => 'OLTP_GRP',
    new_comment => '',
    new_undo_pool => 1
  );
  dbms_resource_manager.submit_pending_area();
END;

超出了限制,報(bào)錯(cuò)。

update test set OBJECT_NAME=lpad('abc',100);
update test set OBJECT_NAME=lpad('abc',100)
*
ERROR at line 1:
ORA-30027: Undo quota violation - failed to get 60 (bytes)

估計(jì)執(zhí)行時(shí)間的上限

當(dāng)session還沒開始較長時(shí)間的操作之前就被終止

conn hr/hr
create table test as select * from dba_objects;

conn /as sysdba

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.update_plan_directive(
    plan => 'MY_DAY_PLAN',
    group_or_subplan => 'OLTP_GRP',
    new_comment => '',
    new_max_est_exec_time => 1
  );
  dbms_resource_manager.submit_pending_area();
END;

conn hr/hr

select count(*) from test;

ERROR at line 1:
ORA-07455: estimated execution time (2 secs), exceeds limit (1 secs)

使用者組切換

當(dāng)session執(zhí)行時(shí)間的上限超過了指定的值后,切換到另一個(gè)組

conn /as sysdba

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.update_plan_directive(
    plan => 'MY_DAY_PLAN',
    group_or_subplan => 'OLTP_GRP',
    new_comment => '',
    new_switch_group => 'BATH_GRP',
    new_switch_time => 10
  );
  dbms_resource_manager.submit_pending_area();
END;

以HR用戶打開一個(gè)session,執(zhí)行死循環(huán)

conn hr/hr

declare
  i number;
  j number;
begin
  i := 0;
  loop
    j := sqrt(i);
    i := i + 1;
  end loop;
end;

打開監(jiān)視器,10秒鐘后發(fā)現(xiàn)以hr登錄的session被切換到了BATH_GRP

設(shè)置空閑時(shí)間的上限

conn /as sysdba

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.update_plan_directive(
    plan => 'MY_DAY_PLAN',
    group_or_subplan => 'OLTP_GRP',
    new_comment => '',
    new_max_idle_time => 5,
    new_max_idle_blocker_time => 10
  );
  dbms_resource_manager.submit_pending_area();
END;

conn hr/hr
連接到數(shù)據(jù)庫后,什么都不干,超過5秒運(yùn)行任何操作都報(bào)錯(cuò)如:

select sysdate from dual;
ERROR at line 1:
ORA-02396: exceeded maximum idle time, please connect again

conn hr/hr
update employees set first_name='aaa' where employee_id=108;

conn hr/hr
update employees set first_name='aaa' where employee_id=108;

當(dāng)超過10秒后,第一個(gè)session會(huì)被中斷,第二個(gè)session被執(zhí)行

轉(zhuǎn)載于:https://www.cnblogs.com/thlzhf/p/3382814.html

與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的OCP读书笔记(16) - 管理资源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91视频99| 丰满熟女人妻一区二区三 | 污到下面流水的视频 | 麻豆网站在线看 | 亚洲麻豆一区二区三区 | 欧美一级免费片 | 日本wwwxx| 国产日韩亚洲 | 一级特级黄色片 | 国产激情四射 | 亚洲天堂男人 | 樱桃国产成人精品视频 | 一区二区三区免费毛片 | 免费观看在线播放 | 小香蕉av | 动漫精品一区二区三区 | 精品久久国产 | 97超碰免费观看 | 人体av | 成年视频在线观看 | 亚洲乱亚洲 | 2025韩国大尺度电影 | 韩国三级在线播放 | 日韩国产成人无码av毛片 | 国产二区电影 | 久久久久性 | 女生鸡鸡软件 | 中文字幕人妻一区二区 | av免费精品 | 影音先锋亚洲精品 | 国产成人综合亚洲 | 日韩久久免费视频 | 高清不卡av | 91久久精品在线 | 麻豆精品国产传媒 | 精品久久久久久中文字幕人妻最新 | 欧美日韩综合一区二区 | av片一区二区三区 | 手机av电影在线 | 免费一级毛片麻豆精品 | 夜夜春夜夜爽 | 久久视频在线播放 | 国内精品久久久 | 免费av中文字幕 | 农民人伦一区二区三区 | 黄色av影院 | 国产精品乱码久久久久久 | 成人动漫在线观看 | 久久er99热精品一区二区介绍 | 西西444www无码大胆 | 销魂美女一区二区 | 香蕉视频911| 18禁免费无码无遮挡不卡网站 | 午夜99 | 欧美一区二区在线播放 | 欧美福利片在线观看 | 操比网站 | 国产又粗又黄又爽视频 | 成人欧美一区二区三区在线播放 | 国产素人在线观看 | 67194成人在线| 中文字幕国产在线 | 超碰97免费| 久久精品视频99 | 波多野结衣一区二区三区四区 | www.天天综合 | 黄色大片网址 | 精品人妻一区二区色欲产成人 | 人人干美女| 国产一区二区三区日韩 | 欧美日韩国产成人精品 | 三上悠亚一区二区在线观看 | 亚洲a视频 | 亚洲中文字幕97久久精品少妇 | 欧美成人精品 | 91精品视频网站 | 久久99热这里只有精品 | 欧美性生活网址 | av片在线观看免费 | 禁止18在线观看 | 亚洲 成人 av | 大尺度摸揉捏胸床戏视频 | 毛片999| 蜜桃臀aⅴ精品一区二区三区 | 欧美在线v | 久久久久国产精品熟女影院 | 高清国产一区二区 | 国产福利精品在线 | 久久精品网 | 天堂新版8中文在线8 | 黄色av片三级三级三级免费看 | 99极品视频 | 大吊一区二区三区 | 精品一久久 | 91香蕉黄 | 国产午夜影院 | 色就是色亚洲色图 | 成人网视频| 在线视频97 |