Oracle数据库资源管理 

一般来说,Oracle数据库都属于中大型的系统,这类系统的用户会话(Session),小则一两百,多则上千,这些用户会话要求Oracle数据库执行的任何指令都需要耗费系统资源,而系统资源毕竟是宝贵且有限的,一旦突然涌进大量的用户会话,对于有限的资源可能会略显不足。但这些会话必定有轻重缓急之分,对于重要且紧急的用户会话需求理当获得多一点的系统资源,对于一些不重要或不紧急的用户会话,则可以使用较少的系统资源慢慢处理。

有鉴于此,Oracle数据库资源管理器(Database Resource Manager)应运而生,Oracle数据库资源管理器的主要功能,就是在有限的系统资源下,能够让数据库管理员有效且适当地规划用户对于系统资源的利用,避免资源的过度耗费。在功能上,数据库资源管理可以利用CPU的使用量、使用的并行度、闲置的时间、会话总数,以及运行时间等来控制资源的使用。

数据库环境中,一定会存在同时有多个用户对数据库进行作业的情况,而这些需求要执行的作业所耗费的时间与优先级必定不同,因此,就可利用数据库资源管理根据各用户会话的需求与应用属性分成不同的组,然后依照不同需求与应用属性组,分配不同的数据库系统资源,这样就可以将有限的资源做最大的利用。数据库资源管理的组成要素如下。

  1. SYS_GROUP:属于Oracle数据库系统管理SYS与SYSTEM的资源使用者组。
  2. DEFAULT_CONSUMER_GROUP:如果有用户没有指定到用户组,则该用户属于DEFAULT_CONSUMER_GROUP。
  3. OTHER_GROUP:原则上,OTHER_GROUP不能算是一个资源使用者组,因为它的使用方式是,当某个资源使用者组没有资源计划(Resource Plan)时,其组成员默认会指定给OTHER_GROUP。

以上就是数据库资源管理的三个组成要素。如应用在实际的例子上,假设有一套数据库系统必须执行联机事务处理系统(Online Transaction Processing,OLTP)与报表系统,但由于上班时间的事务量比较大,因此,可将70%的资源使用分配给OLTP应用,而报表系统可分配20%的使用资源,剩下的10%就分配给其他没有在资源计划内的组所使用,如图所示。

图1 数据库资源管理示意图

图中显示,此资源计划在白天时分配给OLTP用户组70%的CPU使用资源,给REPORTING用户组20%的CPU使用资源,剩下的10%是给OTHER_GROUPS使用,该示例是很单纯的资源分配使用方式,但在一般企业内的数据库系统运行时,所遇到的情况可能并不那么单纯,此时就可利用子计划(Subplans)的方式来分配资源,如下图所示。

图2 子计划

上图显示,在主要的资源计划下,有两个子计划,分别是RD子计划与SALES子计划。其中RD子计划可使用40%的CPU资源,而这些资源分别给Hand Phone组60%的CPU资源,与Note Book组40%的CPU资源。在SALES子计划部分可使用50%的CPU资源,而这些资源分别给WHOLESALE组50%的CPU资源,与RETAIL组50%的CPU资源。

而数据库资源管理的设置方式,是利用指定的资源比例分配资源给使用者组或是子计划使用,而可管理的资源内容如下。

本文节选自《Oracle管理之道》一书,张天慧编著,清华大学出版社出版。