Oracle 11g R1中资源管…

本文深入探讨了Oracle 11gR1中资源管理器的增强功能,包括I/O校准、每会话I/O限制、AWR中的资源管理器统计和内置资源计划等。文章详细介绍了如何使用CALIBRATE_IO存储过程进行I/O校准,设置每会话I/O限制以实现资源高效利用,以及在AWR中获取资源管理器统计信息。同时,文章还阐述了内置资源计划的实现方式,如通过DBMS_RESOURCE_MANAGER创建资源计划并授权给用户,从而实现在不同工作负载下的资源优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Oracle 11g R1中资源管理器增强-性能调优


    本文概述了Oracle 11g R1中资源管理器的所有增强内容,包括:

    (1) I/O校准

    (2) 每会话I/O限制

    (3) AWR中的资源管理器统计

    (4) 内置资源计划

    I/O校准

    DBMS_RESOURCE_MANAGER包包括一个CALIBRATE_IO存储过程,它通过执行一个I/O密集的只读工作量来评估数据库服务器的存 储系统的I/O性能,这个评估操作应该在非业务高峰期间执行,以确保校准不影响生产的工作量,以及生产的工作量对校准结果的影响。

    只有开启了异步I/O时才能使用该存储过程,否则会报下面的错误:


DECLARE

  *

  ERROR at line 1:

  ORA-56708: Could not find any datafiles with asynchronous i/o capability

  ORA-06512: at "SYS.DBMS_RMIN", line 453

  ORA-06512: at "SYS.DBMS_RESOURCE_MANAGER", line 1153

  ORA-06512: at line 6

  SQL>


    通过设置参数FILESYSTEMIO_OPTIONS为ASYNC或SETALL来启用异步I/O.


SQL>SHOW PARAMETER FILESYSTEMIO_OPTIONS

  NAME TYPE VALUE

  ----------------------------------------------- -----------------------

  filesystemio_options string none

  SQL>

  SQL>ALTER SYSTEM SET FILESYSTEMIO_OPTIONS=SETALL SCOPE=SPFILE;

  SQL>SHUTDOWN IMMEDIATE;

  SQL>STARTUP;

    该CALIBRATE_IO存储过程接受两个参数来指定物理磁盘(默认1)和可承受的最大延迟(默认20ms)的数目,它返回每秒最大数量I/O请求,每秒最大Mb数和真实的延迟。


SET SERVEROUTPUT ON

  DECLARE

  l_max_iops PLS_INTEGER;

  l_max_mbps PLS_INTEGER;

  l_actual_latency PLS_INTEGER;

  BEGIN

  DBMS_RESOURCE_MANAGER.calibrate_io (

  num_physical_disks => 1,

  max_latency => 20,

  max_iops => l_max_iops,

  max_mbps => l_max_mbps,

  actual_latency => l_actual_latency);

  DBMS_OUTPUT.put_line ('l_max_iops = ' || l_max_iops);

  DBMS_OUTPUT.put_line ('l_max_mbps = ' || l_max_mbps);

  DBMS_OUTPUT.put_line ('l_actual_latency = ' || l_actual_latency);

  END;

  /

  l_max_iops = 556

  l_max_mbps = 48

  l_actual_latency = 17

  PL/SQL procedure successfully completed.

  SQL>
 


    同一时间只能执行一个校准操作,在RAC环境中,工作量发起的所有节点都可以执行。

    [G]V$IO_CALIBRATION_STATUS视图显示了当前校准运行的状况。在运行过程中,会显示一个'IN PROGRESS' 的状态'.一旦运行完成状态切换到'READY',并且会显示校准时间。


SQL> SELECT * FROM v$io_calibration_status;

  STATUS CALIBRATION_TIME

  ------------- -------------------------------

  IN PROGRESS

  SQL> SELECT * FROM v$io_calibration_status;

  STATUS CALIBRATION_TIME

  ---------------------------------------------------------------------------

  READY 28-JUL-2008 14:37:38.410

  1 row selected.

  SQL>
 


    通过DBA_RSRC_IO_CALIBRATE视图可以显示校准信息。


SET LINESIZE 150

  COLUMN start_time FORMAT A30

  COLUMN end_time FORMAT A30

  SELECT * FROM dba_rsrc_io_calibrate;

  START_TIME END_TIME MAX_IOPS MAX_MBPS MAX_PMBPS LATENCY NUM_PHYSICAL_DISKS

  ----------------- ---------- ---------- ---------- ------------------

  28-JUL-2008 14:32:33.68 28-JUL-2008 14:37:38.40 556 48 48 17 1

  1 row selected.

  SQL>


    每会话I/O限制

    在Oracle之前的版本中,资源组自动切换完全基于单个会话的时间或单个调用的时间,Oracle 11g现在可以基于I/O阀值(最大请求数或M字节)进行资源组自动切换,新的阀值通过CREATE_PLAN_DIRECTIVE存储过程执行,其中包含了大量的改变。

    (1) CPU_P1-CPU_P8参数已经废弃,改为使用MGMT_P1-MGMT_P8参数。

    (2) SWITCH_TIME_IN_CALL参数已被汰,换作了SWITCH_FOR_CALL参数。

    (3) SWITCH_IO_MEGABYTES和SWITCH_IO_REQS参数现在已经可用,此外还有SWITCH_TIME参数,这三个参数默认为NULL,意味着无限制。

    新的I/O参数意味着可以切换资源组了,可以基于消耗时间、I/O请求和I/O数量的任何组合来取消SQL或杀死会话,下面的例子显示如果消耗时间超过 120秒、I/O请求数量超过5000或I/O请求超过1024M,会将当前会话从资源消耗组oltp_group切换到batch_group组。


BEGIN

  DBMS_RESOURCE_MANAGER.create_plan_directive (

  plan => 'my_plan',

  group_or_subplan => 'oltp_group',

  comment => 'OLTP Group',

  mgmt_p1 => 70,

  switch_group => 'batch_group',

  switch_time => 120,

  switch_io_reqs => 5000,

  switch_io_megabytes => 1024,

  switch_for_call => TRUE);

  END;

  /


    下面的例子显示如果I/O资源消耗超过了4096M,会话将会被杀掉。


BEGIN

  DBMS_RESOURCE_MANAGER.create_plan_directive (

  plan => 'my_plan',

  group_or_subplan => 'oltp_group',

  comment => 'OLTP Group',

  mgmt_p1 => 70,

  switch_group => 'KILL_SESSION',

  switch_io_megabytes => 4096);

  END;

  /


    AWR中的资源管理器统计

    新DBA_HIST_RSRC_PLAN和DBA_HIST_RSRC_CONSUMER_GROUP视图已加入到V$ RSRC_PLAN_HISTORY和V$RSRC_CONS_GROUP_HISTORY视图中,提供了一个历史数据的查看。

    V$RSRCMGRMETRIC_HISTORY视图显示取自V$RSRCMGRMETRIC视图的一个小时的数据。

   http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/dbrm011.htm#ADMIN11916有完整的资源管理视图介绍。


    内置资源计划

    Oracle 11g包括一个内置的MIXED_WORKLOAD_PLAN资源计划,旨在给的OLTP业务批量操作优先权,这个计划包括两个资源消耗组 (INTERACTIVE_GROUP和BATCH_GROUP),如果分配给INTERACTIVE_GROUP组时超过60秒,就会自动切换到 BATCH_GROUP组。

    RESOURCE_MANAGER_PLAN参数用来告诉实例使用哪个资源计划。

    ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = MIXED_WORKLOAD_PLAN;

    然后你必须将资源消耗组授权给单个用户,下面的例子显示将两个资源消耗组授权给TEST用户,并指定默认的资源消耗组是INTERACTIVE_GROUP.查询DBA_USERS视图可以获得已经设置好的默认设置。


BEGIN

  -- Assign users to consumer groups

  DBMS_RESOURCE_MANAGER_PRIVS.grant_switch_consumer_group(

  grantee_name => 'test',

  consumer_group => 'interactive_group',

  grant_option => FALSE);

  DBMS_RESOURCE_MANAGER_PRIVS.grant_switch_consumer_group(

  grantee_name => 'test',

  consumer_group => 'batch_group',

  grant_option => FALSE);

  DBMS_RESOURCE_MANAGER.set_initial_consumer_group('test', 'interactive_group');

  END;

  /

  SELECT initial_rsrc_consumer_group FROM dba_users WHERE username = 'TEST';

  INITIAL_RSRC_CONSUMER_GROUP

  ------------------------------

  INTERACTIVE_GROUP

  1 row selected.

  SQL>


    以TEST用户连接到数据库,查询v$session视图正在工作的资源消耗组。


CONN test/test

  SELECT resource_consumer_group

  FROM v$session

  WHERE audsid = SYS_CONTEXT('USERENV', 'SESSIONID');

  RESOURCE_CONSUMER_GROUP

  --------------------------------

  INTERACTIVE_GROUP

  1 row selected.

  SQL>


    如果我们创建一个长时间的调用,可以看到资源消耗组的切换。


CONN test/test

  SET SERVEROUTPUT ON

  DECLARE

  l_cg v$session.resource_consumer_group%TYPE;

  BEGIN

  SELECT resource_consumer_group

  INTO l_cg

  FROM v$session

  WHERE audsid = SYS_CONTEXT('USERENV', 'SESSIONID');

  DBMS_OUTPUT.put_line('Current Consumer Group: ' || l_cg);

  -- Sleep to cause switch based on time.

  DBMS_LOCK.sleep(65);

  SELECT resource_consumer_group

  INTO l_cg

  FROM v$session

  WHERE audsid = SYS_CONTEXT('USERENV', 'SESSIONID');

  DBMS_OUTPUT.put_line('Current Consumer Group: ' || l_cg);

  END;

  /

  Current Consumer Group: INTERACTIVE_GROUP

  Current Consumer Group: BATCH_GROUP

  PL/SQL procedure successfully completed.

  SQL>


    正如我们所期望的,调用最初分配的是INTERACTIVE_GROUP资源组,当调用超过60秒时就切换到BATCH_GROUP组了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值