oracle 资源管理器的使用
14.8.2资源管理器的使用
资源管理器控制CPU资源使用说明:
第一种分配方法:EMPHASIS CPU 分配方法确定在资源计划中对不同使用者组中的会话的重视程度。CPU占用率的分配级别为从1 到8,级别1 的优先级最高。百分比指定如何将CPU 资源分配给每一级中的各个使用者组。
以下规则适用于EMPHASIS 资源分配方法:
CPU 资源在给定级别按指定的百分比分配。为资源使用者组指定的CPU 百分比是该使用者组在给定级别可以使用的最大值。
给定级别上没有使用的使用者资源可供下一级别的使用者组使用。例如,如果级别1的使用者组只使用了60% 的可用资源,则其余的40% 可供级别2 的使用者组使用。
任何给定级别的百分比总和必须小于等于100。
对于没有明确指定计划指令的所有级别,其所有子计划或使用者组的默认资源是0%。EMPHASIS 资源分配方法避免了资源缺乏问题,该问题导致优先级较低的使用者没有运行的机会。
第二种分配方法:RATIO 策略是一个单级别CPU 分配方法。将指定要为使用者组分配的CPU 比率相对应的数字,而不是百分比。例如,假定有三个使用者组OLTP_USERS、DSS_USERS 和BATCH_USERS,可以指定下列比率:
OLTP_USERS:4;
DSS_USERS:3;
BATCH_USERS:2;
OTHER:1。
这就类似于让OLTP 用户获得40% 的资源、DSS 用户获得30% 的资源、批用户获得20%的资源、所有其它使用者组获得10% 的可用资源。如果OTHER 或DSS_USERS 使用者组中当前都没有使用者在使用CPU 资源,则OLTP_USERS 使用者组将获得三分之二的可用资源,而BATCH_USERS 使用者组将获得三分之一。
最大估计执行时间:
(1)数据库资源管理器可以预先估计操作的执行时间。
(2)可以在资源使用者组级别为操作指定最大估计执行时间。
(3) 如果估计时间超过MAX_EST_EXEC_TIME,则操作不会启动。
(4)此功能的好处是消除了使用过多系统资源的异常大的作业。
(5) 默认值为UNLIMITED。
通过设置资源计划指令的MAX_EST_EXEC_TIME 参数,可以定义任何给定时间发生的任何操作的最大估计执行时间。设置了此参数后,数据库资源管理器将估计特定作业消耗的时间。如果操作的估计时间超过MAX_EST_EXEC_TIME,则不启动操作并发出ORA-07455 错误。这样可以消除占用过多系统资源的任何异常大的作业。
如果有多个计划指令引用了某个资源使用者组,则该组可能有多个MAX_EST_EXEC_TIME。数据库资源管理器将选择所有传入值中限制性最强的那个值。
使用基于成本的优化程序的统计信息,可以计算出给定语句的估计执行时间。
并行度的设置:
PARALLEL_DEGREE_LIMIT_MTH 限制任何操作的最大并行度。只能为资源使用者组,而不能为子计划指定此方法。ABSOLUTE 方法是可能值,该方法指定可以为一个操作分配的进程数量。如果有多个计划指令引用了相同的子计划或使用者组,则使用所有可能值中的最小值作为该子计划或使用者组的并行度限制。
活动会话池的设置:
ACTIVE_SESS_POOL_MTH 限制活动会话的数量。所有其它会话均为非活动的,在队列中等待激活。ACTIVE_SESS_POOL_ABSOLUTE 是默认且唯一的可用方法。
使用活动会话池功能,可以控制每个资源使用者组的最大并发活动会话数。使用此功能,由于资源的消耗与活动会话的数量成比例,所以DBA 能间接控制任何资源使用者组使用的资源量。使用活动会话池有助于减少从系统中获取资源的服务器数量,因而可以避免由于试图同时运行过多作业而导致的低效的分页、交换和其它资源损耗(如内存)。使用活动会话填充活动会话池后,资源管理器对尝试成为活动会话的所有后续会话进行排队,直到其它活动会话完成或成为不活动会话。活动会话是事务处理、查询或并行操作中当前涉及的会话。单独的并行从属进程不被视为会话;而将整个并行操作视为一个活动会话。每个资源使用者组只有一个队列,排队方法是先进先出(FIFO),并带有超时。队列采用内存结构,不能直接查询。
14.8.3资源管理器的组成
数据库环境中,一定会存在同时有多个用户对数据库进行作业的情况,而这些需求要执行的作业所耗费的时间与优先级必定不同,因此,就可利用数据库资源管理根据各用户会话的需求与应用属性分成不同的组,然后依照不同需求与应用属性组,分配不同的数据库系统资源,这样就可以将有限的资源做最大的利用。数据库资源管理的组成要素包括以下三点:
(1)资源使用者组(Resource Consumer Group):一个资源使用组由一组具有相似请求的用户组成,一个组可以包含许多用户,一个用户又可以是多个组的成员(这个很重要),实际中多个 session 使用一个用户名访问数据库是很普遍的,但是同一时刻,每个 session 只能有一个组作为这个 session 的有效使用者组。
当新创建一个 session 时,Oracle 会根据你的设定自动把它分配到某个组(初始化组)。如果以某个用户登录的 session,它的用户名是属于多个组的,数据库管理员可以手动的切换这个 session 所属的组。
下面三类特别的组是系统定义的组,它们不能被修改或删除。
SYS_GROUP:属于Oracle数据库系统管理员SYS与SYSTEM用户的资源使用者组。
DEFAULT_CONSUMER_GROUP:如果有用户没有指定到用户组,则该用户属于DEFAULT_CONSUMER_GROUP。
OTHER_GROUP:在资源计划里除了指定组以外的用户都默认在这个组里需要强调的一点是 OTHER_GROUPS,它是绑定在资源计划中的,所有资源计划必须要包括
(2)资源计划指令(Resource Plan Directive):是使用资源的条件,如分配给某个特定的资源使用者组,使其在某个特定的时段可使用80%的CPU,或是限制某个使用者组活动会话的数量等,而资源指令只是被包含在资源计划中,资源计划和指令间有着一对多的关系,在资源计划中不能包含两条相同的指令。
(3)资源计划(Resource Plan):包含一系列指令,这些指令决定了每个使用者组的资源使用分配,在一个数据库中,同一段时间内只能启用一个资源计划,但一个资源计划还可以包含多个子资源计划,每个资源计划都必须包含给OTHER_GROUP分配的指令。
资源计划是 Oracle 把数据库资源按一定方法来分配,可以限制每个组占用资源的比例。在一个数据库中同一时间只能有一个资源计划 active,也可以无任何资源计划 active。
查看当前被激活的资源计划的三个办法:
第一重方式查看参数,代码如下:
show resoure_manager_plan ;
第二种方式是命令方式,代码如下:
select name,is_top_plan from v$rsrc_plan;
第三种方式是是通过 OEM 查看资源管理信息
资源计划指令:Resource plan directives
资源计划指令就是给出各种限定的条件,例如给某个组分配一定百分比的 CPU 时间,或者限制一个组内最大活动的会话数等等。
以上就是数据库资源管理的三个组成要素。如应用在实际的例子上,假设有一套数据库系统必须执行联机事务处理系统(Online Transaction Processing,OLTP)与报表系统,但由于上班时间的事务量比较大,因此,可将70%的资源使用分配给OLTP应用,而报表系统可分配20%的使用资源,剩下的10%就分配给其他没有在资源计划内的组所使用。
14.8.4资源管理常用数据字典
显示数据库的计划和状态,代码如下:
select from dba_rsrc_plans;
执行后如图14-12所示。
图14-12查询计划的名称和状态
显示计划指令,代码如下:
select * from dba_rsrc_plan_directives
执行后如图14-13所示。
图14-13查询计划指令
显示连接的会话,代码如下:
select * from v$session
执行后如图14-14所示。
图14-14查询连接的会话
显示当前活动的计划,代码如下:
select * from v$rsrc_plan
执行后如图14-15所示。
图14-15查询当前活动的计划
【例14-3】 建立TIM、MIKE、MGR三个用户并授予连接数据库的权限,然后建立两个使用组。将三个用户定位到相应的自建组中。
建三个用户,并授予 connect 角色,代码如下:
create user tim identified by tim;
create user mike identified by mike;
create user mgr identified by mgr;
grant connect to tim identified by tim;
grant connect to mike identified by mike;
grant connect to mgr identified by mgr;2)
使用OEM建立两个使用者组:
以sys用户登录,找到EM菜单下Consumer Groups ,建 OLTP 组、DSS 组,把新建的三个用户指定到两个自建的组中,使用 OEM 完成把TIM、MIKE用户添加到OLTP 组,把TIM、MIKE户添加到DSS 组
建组结束前可以单击 Show SQL 研究一下输出,注意挂起区域的用法,单击 Enter 返回。
设置初始使用者组
缺省方式建立的用户会定位到 DEFAULT_CONSUMER_GROUP 组下。查询用户的组代码下:
SQL> select username,INITIAL_RSRC_CONSUMER_GROUP from dba_users;
执行后如图14-16所示。
.
图14-16查询当前用户属于的组
将 TIM、MIKE、MGR 这三个用户定位到相应的自建组中,session 登录后便直接属于对应的自建组,代码如下:
exec dbms_resource_manager.set_initial_consumer_group(‘TIM’,‘OLTP’);
exec dbms_resource_manager.set_initial_consumer_group(‘MIKE’,‘DSS’);
exec dbms_resource_manager.set_initial_consumer_group(‘MGR’,‘OLTP’);
14.8.5其他资源指令和阀值
(1)活动会话池
目的是限制一组同时运行的 SESSION 数量,假设 DSS 组有 8 个用户,如果就让 3 个可以运行(active session)。可将该组最大激活数设为 3,那么另外的 5 个可以连接上来,但要排队等着激活。而排队也可设延迟时间,超时后就会报错。
(2)限制并行度
Oracle 可通过参数设置并行度,如:parallel_max_servers(创建一个并行执行服务器池),但是无法阻止任何人使用它,于是可以通过 Resource Management 加以限制。
(3)通过执行时间控制作业
数据库中一个大型作业会挤掉其他用户性能,Threshold 指令可以解决这个问题。到了时间阀值,按 action 的规定去做。
依据空闲时间终止 session。不做任何事情的 session 浪费服务器资源,如 PGA 白白占用,idle time 指令从两个方面限制这样的情况,比如某组的 max idle time(秒)=1800,表示空闲了 3 分钟,block another session(秒)=30,表示把别人锁了 30 秒,这两种情况都会终止该 session。
(4)限制 undo 数据的产生
某些用户的大型事务可能填满 undo 表空间,如批处理事务不定期的提交,为了安全起见,可以对这里潜在的用户设置 undo 表空间使用上限,比如某组其 undo pool 设置为 6G,当到达这个上限值后该组中的所有 session 都会被挂起,直至事务提交后释放池中的空间。