资源管理的基本概念:
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
就是 Oracle 把数据库资源按一定方法来分配,可以限制每个组占用资源的比例。
在一个数据库中同一时间只能有一个资源计划 active。(也可以无任何资源计划 active)。一个资源计划还可以包含子资源计划。
查看当前被激活的资源计划的三个办法:
第一重方式,代码如下
show resoure_manager_plan 参数
第二种方式是命令方式,代码如下
select name,is_top_plan from v$rsrc_plan;
第三种方式是是通过 OEM 查看资源管理信息
3)资源计划指令:Resource plan directives
资源管理的目的是实现组或 session 对于资源分配的优先级,一部分用户在某时间内可以更多的享受资源,而另一部分则不能。
资源计划指令就是给出各种限定的条件,例如给某个组分配一定百分比的 CPU 时间,或者限制一个组内最大活动的会话数等等。
12.3 在资源管理中创建组、计划、指令的例子:
1)建三个用户,并授予 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)
2)建立两个使用者组:
sys 登录, EM–>Server–>Resource Manager–>Consumer Groups //查看默认组
建 OLTP 组、DSS 组,我们把新建的三个用户指定到两个自建的组中,使用 OEM 完成:
OLTP 组(tim,mgr)、DSS 组(mike,mgr)
建组结束前可以单击 Show SQL 研究一下输出,注意挂起区域的用法,单击 Enter 返回。
3)设置初始使用者组
缺省方式建立的用户会定位到 DEFAULT_CONSUMER_GROUP 组下。查询用户的组代码下:
SQL> select username,INITIAL_RSRC_CONSUMER_GROUP from dba_users;
执行后如图所示。
.
将 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’);
12.4 其他的资源指令和阀值
2.1)活动会话池:目的是限制一组同时运行的 SESSION 数量,假设 DSS 组有 8 个用户,如果就让 3 个可以运行(active session)。可将该组最大激活数设为 3,那么另外的 5 个可以连接上来,但要排队等着激活。而排队也可设延迟时间,超时后就会报错。
2.2)限制并行度:
Oracle 可通过参数设置并行度,如:parallel_max_servers,(创建一个并行执行服务器池),
但是无法阻止任何人使用它,于是我们可以通过 Resource Management 加以限制。
2.3)通过执行时间控制作业
数据库中一个大型作业会挤掉其他用户性能,Threshold 指令可以解决这个问题。到了时间
阀值,按 action 的规定去做。
2.4)依据空闲时间终止 session
不做任何事情的 session 浪费服务器资源,如 PGA 白白占用,idle time 指令从两个方面限
制这样的情况,比如某组的 max idle time(秒)=1800,表示空闲了 3 分钟,block another
session(秒)=30,表示把别人锁了 30 秒,这两种情况都会终止该 session.
2,5)限制 undo 数据的产生
某些用户的大型事务可能填满 undo 表空间,如批处理事务不定期的提交,为了安全起见,可以对这里潜在的用户设置 undo 表空间使用上限,比如某组其 undo pool 设置为 6G,当到达这个上限值后该组中的所有 session 都会被挂起,直至事务提交后释放池中的空间。