Oracle9i Database Concepts Release 2 (9.2) Part Number A96524-01 |
|
This chapter describes how Oracle's Database Resource Manager works to help a database administrator allocate resources to different groups of users. This chapter includes the following topics:
Traditionally, it has been up to the operating system to regulate resource management among the various applications running on a system, including Oracle databases. Before Oracle8i, there was no way to prioritize one Oracle session over another. The Database Resource Manager gives database administrators more control over resource management decisions, so that resource allocation can be aligned with an enterprise's business objectives.
Note: The Database Resource Manager is available with Oracle Enterprise Edition, beginning with Release 8i. |
The Database Resource Manager solves many resource allocation problems that an operating system does not manage so well:
With Oracle's Database Resource Manager, a database administrator can:
It is thus possible to balance one user's resource consumption against that of other users and to partition system resources among tasks of varying importance, to achieve overall enterprise goals.
See Also:
Oracle9i Database Administrator's Guide for information about using the Database Resource Manager |
Resources are allocated to users according to a resource plan specified by the database administrator. The following terms are used in specifying a resource plan:
A resource plan specifies how the resources are to be distributed among various users (resource consumer groups).
Resource consumer groups allow the administrator to group user sessions together by resource requirements. Resource consumer groups are different from user roles; one database user can have different sessions assigned to different resource consumer groups.
Resource allocation methods determine what policy to use when allocating for any particular resource. Resource allocation methods are used by resource plans and resource consumer groups.
Resource plan directives are a means of assigning consumer groups to particular plans and partitioning resources among consumer groups by specifying parameters for each resource allocation method.
The Database Resource Manager also allows for creation of plans within plans, called subplans. Subplans allow further subdivision of resources among different users of an application.
Levels provide a mechanism to specify distribution of unused resources among available users. Up to eight levels of resource allocation can be specified.
To illustrate these concepts, take an example of a fictitious company, ABC Inc. ABC sells electronics consumer goods over the Internet. To ensure the best performance for online customers, at least 85% of the CPU resources should be allocated to them. From the remaining resources, 10% should go to users involved in shipping orders and 5% to billing operations.
To configure an Oracle database to allocate resources in such a way, the database administrator creates three resource consumer groups:
The database administrator then creates a resource plan such as the one in Table 9-1.
Consumer Group | CPU Resource Allocation |
---|---|
ONLINE |
85% |
SHIPPING |
10% |
BILLING |
5% |
The plan shown in Table 9-1 specifies that 85% of CPU cycles be allotted to ONLINE group sessions, 10% to those of the SHIPPING group and the remaining 5% to the BILLING group. Although this example describes a very simplistic scenario, the Database Resource Manager provides the database administrator with a powerful mechanism for implementing controlled resource allocation policies within an Oracle database.
See Also:
PL/SQL User's Guide and Reference for information about PL/SQL code to create these plans |
The Database Resource Manager controls the distribution of resources among various sessions by controlling the execution schedule inside the database. By controlling which sessions to run and for how long, the Database Resource Manager can ensure that resource distribution matches the plan directive and hence, the business objectives.
Sessions belonging to consumer groups with higher CPU resource allocation are allowed to use more CPU time than sessions belonging to groups or sub plans with lower allocation.
Caution: On UNIX platforms, do not use the |
The basic objective of the Database Resource Manager is to maximize system throughput in a way that conforms to business objectives. Consequently, it does not try to enforce CPU allocation percentage limits as long as consumer groups are getting the resources they need.
Consider the plan in Table 9-1. If this plan is activated on a system with a single CPU, any one of the consumer groups can consume up to 100% of CPU resources, providing other groups do not have enough active sessions to consume their allocation. Therefore, with no active sessions in the SHIPPING and BILLING groups, the ONLINE group sessions can use 100% of CPU resources, even though their allocation limit is set to 85%.
Similarly, if the database is hosted on system with three CPUs and each group has only one active session, each session runs on one of the three CPUs; in this case, resource allocation is actually 33.33%, no matter how allocation limits are set. However, if all the consumer groups have enough active sessions to consume all available CPU resources, then the Database Resource Manager enforces the allocation guidelines specified by the plan directive.
The effect of the Database Resource Manager is noticeable only in busy environments with high system utilization.
On multiprocessor systems, processor affinity scheduling at the operating system level can distort CPU allocation on under utilized systems. On a system with multiple CPUs, if one of the CPUs has resources available while others are fully utilized, the operating system attempts to migrate processes from the busy processor's run queue to an under utilized processor. However this does not happen immediately.
On a fully loaded system with enough processes, processor affinity increases performance; this is because invalidating the current CPU cache and loading the new one can be quite expensive. Because most platforms support processor affinity, enough processes must be run to ensure full system utilization.
The Database Resource Manager is fully integrated into the database security system. The supplied PL/SQL package DBMS_RESOURCE_MANAGER
lets the database administrator create, update, and delete resource plans and resource consumer groups. The administrator defines a user's default consumer group and what privileges the user has (using the DBMS_RESOURCE_MANAGER_PRIVS
package). A user or session can switch resource consumer groups (using DBMS_SESSION
.SWITCH_CURRENT_CONSUMER_GROUP
) to change execution priority, if the user has been granted the privilege to switch to that consumer group. In addition, users or sessions can be moved from group to group by the database administrator on a production system, dynamically changing the way CPU resources are used.
It is very simple to use the Database Resource Manager in an environment where each application user logs on to the database using a different database username. It is also not very difficult to implement it where applications use generic database login. Because Database Resource Manager actually controls resource utilization at the session level, it is possible to prioritize one session over another, even if both the sessions belong to the same database user. Therefore, it is possible to switch a session to the desired consumer group because of the user's application role, using the DBMS_SESSION
.SWITCH_CURRENT_CONSUMER_GROUP
procedure, as follows:
DECLARE default_group VARCHAR2(30); BEGIN DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP('desired_consumer_group', 'default_group', false); END; /
Oracle continues to support user resource limits and profiles used with the Database Resource Manager. While the Database Resource Manager balances different requests for service against each other within the defined resource allocation plan, profiles are used to limits a user's consumption of resources.
The Database Resource Manager and the automatic degree of parallelism (ADOP) feature are integrated. ADOP attempts to optimize system utilization by automatically adjusting the degree of parallelism for parallel query operations based on current system load and the Database Resource Manager degree of parallelism directive.
The Database Resource Manager can effectively manage resources with minimal overhead. For systems with hundreds of users, Database Resource Manager can actually improve the performance by reducing context switches and latch contention.
Judicious use of the Database Resource Manager should not lead to any performance degradation. However, the depth or complexity of a resource plan can impede the process of selecting the process to be run; therefore, it may advisable to avoid too deep a resource plan. The more levels a plan schema has, the more work the Database Resource Manager must do to pick a session for execution.
A resource plan is a way to group a set of resource consumer groups together and specify how resources should be divided among them. Consider the example from Table 9-1, which can be diagrammed as follows:
You can create as many resource plans as you need in a database. However, only one plan can be active at any given time. You can activate a resource plan in one of two ways: persistent and dynamic.
Set the value of the RESOURCE_MANAGER_PLAN
initialization parameter to the plan you want to activate. For example, to activate ABC's simple resource plan, abcusers
, you would modify the initialization parameter file to include the following line:
RESOURCE_MANAGER_PLAN='ABCUSERS'
When you modify the initialization parameter file, you ensure persistence of the resource plan across database shutdown. However, changes in the initialization parameter file take effect only when the database is restarted. Use this method to set a the default resource plan for the database.
Issue the ALTER
SYSTEM
SET
RESOURCE_MANAGER_PLAN
statement. Using the same example, you would issue the following statement:
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN ='ABCUSERS';
When you issue the ALTER
SYSTEM
SET
RESOURCE_MANAGER_PLAN
statement, the specified plan is activated immediately, without requiring an instance restart. However, the database reverts to the default setting in the initialization parameter file the next time it is started.
For example, using the dynamic method an administrator could create two different plans, for day time and for night time. The day time plan would allocate more resources to online users, while the night time plan (when online users are not very active) would ensure higher allocation to batch jobs. Then the database administrator uses the ALTER
SYSTEM
statement to toggle back and forth between day and night plans without interrupting database services.
The ALTER
SYSTEM
SET
RESOURCE_MANAGER_PLAN
statement is used to dynamically activate, change, or deactivate resource plans.
See Also:
Step 3 of "Interaction with Operating-System Resource Control" |
You can also use resource plans to group other resource plans. This enables you to partition resources among different kinds of applications. For example, the ABC company might need to reserve certain minimum resources to developers and administrators, so that they can perform critical maintenance operations.
Consider a case where at least 25% of the available CPU cycles must be reserved for sessions belonging to two resource consumer groups: DEVELOPERS and ADMINISTRATORS. These CPU cycles should be allocated between DEVELOPERS and ADMINISTRATORS in a ratio of 60 to 40. To achieve this objective, the database administrator first creates a maintenance plan with following specifications:
Consumer Group | CPU Resource Allocation |
---|---|
DEVELOPERS |
60% |
ADMINISTRATORS |
40% |
When activated, the plan shown in Table 9-2 ensures that all available resources are distributed among developers' and administrators' sessions in a 60:40 ratio. However, only 25% of all available resources are to be reserved for maintenance; 75% should made available to the abcusers
plan. This can be realized by creating a top-level plan with abcusers
and abcmaint
being its members, as shown in Table 9-3:
Subplan | CPU Resource Allocation |
---|---|
|
75% |
|
25% |
The users and maintenance groups become subplans of ABCTOP. The resulting plan tree is diagrammed in Figure 9-2.
A subplan or consumer group can have more than one parent. For example, in the plan shown in Figure 9-2, the consumer group Admin could very well have been part of both the users and maintenance plans. Because multiple parents are allowed, you can preserve plan independence: You do not need to change anything in subplans when you roll them up to a top-level plan.
A plan tree can have as many hierarchical levels as you want. However, as the number of these levels increase, the overhead associated with resource control increases; the determination of which process is to be run next has to be performed at every level that contains subplans. On the other hand, sub plans provide a good way to partition database resources at a high level among multiple applications and then repartition them within an application among various users. If a given group within an application does not consume its allocation, unused resources are made available to other groups within the same application first. If none of the groups in an application can consume all the resources made available to them, the unused resources are handed back to the parent plan, which can then distribute it among its subplans.
See Also:
PL/SQL User's Guide and Reference for information about using PL/SQL code to create these plans |
The Database Resource Manager enables controlled distribution of resources among consumer groups (inter-group), as well within a consumer group (intra-group), using allocation methods and plan directives.
When scheduling a session for execution, the Database Resource Manager acts as follows:
For example, in case of the ABC Company's users plan shown in Table 9-1, plan-level methods and directives specify a resource distribution allowing ONLINE consumer group sessions to be run 85% of the time, while sessions belonging to SHIPPING and BILLING groups get 10% and 5% of CPU time, respectively.
Plan-level directives of ABCUSERS ensure that the ONLINE group is picked up more frequently for execution than the SHIPPING and BILLING groups. However, the ONLINE group usually has several active sessions waiting for execution. Group-level directives determine the order in which these sessions are run.
How resources are allocated to resource consumer groups is specified in resource allocation directives. The Database Resource Manager provides several means of allocating resources.
This method lets you specify how CPU resources are to be allocated among consumer groups or subplans. The multiple levels of CPU resource allocation (up to eight levels) provide a means of prioritizing CPU use within a plan schema. Level 2 gets resources only after level 1 is unable to use all of its resources. Multiple levels not only provide a way of prioritizing, but they provide a way of explicitly specifying how all primary and leftover resources are to be used.
You can control the maximum number of concurrently active sessions allowed within a consumer group. This maximum designates the active session pool. When a session cannot be initiated because the pool is full, the session is placed into a queue. When an active session completes, the first session in the queue can then be scheduled for execution. You can also specify a timeout period after which a job in the execution queue (waiting for execution) will timeout, causing it to terminate with an error.
An entire parallel execution session is counted as one active session.
*Specifying a parallel degree limit lets you control the maximum degree of parallelism for any operation within a consumer group.
This method lets you control resources by specifying criteria that, if met, causes the automatic switching of sessions to another consumer group. The criteria used to determine switching are:
SWITCH_GROUP
--specifies the consumer group to which this session is switched if the other (following) criteria are met.SWITCH_TIME
--specifies the length of time that a session can run before it is switched to another consumer group.SWITCH_ESTIMATE
--specifies whether Oracle is to use its own estimate of how long an operation will run.The Database Resource Manager switches a running session to SWITCH_GROUP
if the session is active for more than SWITCH_TIME
seconds. Active means that the session is running and consuming resources, not waiting idly for user input or waiting for CPU cycles. The session is allowed to continue running, even if the active session pool for the new group is full. Under these conditions a consumer group can have more sessions running than specified by its active session pool. After the session finishes its operation and becomes idle, it is switched back to its original group.
If SWITCH_ESTIMATE
is set to true
, then the Database Resource Manager uses a predicted estimate of how long the operation will take to complete. If Oracle's predicted estimate is longer than the value specified as SWITCH_TIME
, then Oracle switches the session before execution starts. If this parameter is not set, the operation starts normally and only switches groups when other switch criteria are met.
You can specify a maximum execution time allowed for an operation. If Oracle estimates that an operation will run longer than the specified maximum execution time, then the operation is terminated with an error. This error can be trapped and the operation rescheduled.
You can specify an undo pool for each consumer group. An undo pool controls the amount of total undo that can be generated by a consumer group. When the total undo generated by a consumer group exceeds it's undo limit, the current DML statement generating the redo is terminated. No other members of the consumer group can perform further data manipulation until undo space is freed from the pool.
A database administrator can control resource distribution among sessions in competing consumer groups by granting resources at up to eight levels of resource allocation and by specifying how resources are to be distributed among consumer groups at each of these levels.
The users plan shown in Table 9-1 depicts a simple resource distribution scheme using a resource allocation at a single level. This plan can be modified to allocate any unconsumed resources first to administrators (for maintenance operations) and then to any batch jobs. Table 9-4 shows the modified plan:
Consumer Group | CPU_LEVEL1 | CPU_LEVEL2 | CPU_LEVEL3 |
---|---|---|---|
ONLINE |
85% |
0% |
0% |
SHIPPING |
10% |
0% |
0% |
BILLING |
5% |
0% |
0% |
ADMIN |
0% |
100% |
0% |
BATCH |
0% |
0% |
100% |
The modified users plan shown in Table 9-4 accomplishes the following:
Multilevel User Plan 1 meets the stated objective by granting resources among the consumer groups at different levels. Sessions belonging to ONLINE, SHIPPING and BILLING groups are always given the first opportunity to run, but their resource consumption is limited to 85%, 10% and 5%, respectively. Any unused resources are made available to Level 2 and are distributed among consumer groups in the proportion of grants made at this level. If unused resources still exist, then they are made available to the next level down.
However, the ADMIN group might have to wait a long time, if all the groups at Level 1 are busy. Similarly, the BATCH group might not get to run any sessions at all, if groups at Level 1 and 2 consume all the resources. Such behavior might not be acceptable in some environments. What is required is a plan that allocates most CPU resources to ONLINE, SHIPPING, and BILLING and also ensures availability of certain minimum CPU cycles to the ADMIN and BATCH groups. The modified multilevel users plan is shown in Table 9-5:
Consumer Group | CPU_LEVEL1 | CPU_LEVEL2 | CPU_LEVEL3 |
---|---|---|---|
ONLINE |
75% |
0% |
0% |
SHIPPING |
10% |
0% |
0% |
BILLING |
5% |
0% |
0% |
ADMIN |
0% |
80% |
0% |
BATCH |
0% |
20% |
0% |
The modified multiuser plan shown in Table 9-5 accomplishes the following:
Multilevel User Plan 2 guarantees a minimum of 10% of the CPU resources to the ADMIN and BATCH groups. These Level 2 groups get more CPU time if the ONLINE, SHIPPING, and BILLING groups do not use all of their allocated resources. With no active sessions for any Level 1 groups, the ADMIN group sessions can run 80% of the time, and BATCH group sessions can run 20% of the time.
The multilevel user plans shown in Table 9-4 and Table 9-5 demonstrate that CPU resource allocation using the Emphasis method follows a set of rules. These rules are as follows:
The Database Resource Manager allocates CPU resources among groups that have active sessions at a given time. It does not use any historical information in deciding which group to run. For example, perhaps the ONLINE consumer group does not have any active sessions for two hours. During this period, its share of resources is available to other consumer groups. Later, when sessions belonging to the ONLINE consumer group are active, they are still allocated only 75% of CPU resources. Consumer groups do not accrue credit for the period in which they did not have any active sessions.
Levels are similar to priorities. Consumer groups at Level 1 are offered resources before those at lower levels are considered. Table 9-6 illustrates one way of setting priorities with Database Resource Manager plan directives:
Subplan or Group | CPU_LEVEL1 | CPU_LEVEL2 | CPU_LEVEL3 |
---|---|---|---|
High Priority |
100% |
0% |
0% |
Medium Priority |
0% |
100% |
0% |
Low Priority |
0% |
0% |
100% |
In Table 9-6, sessions belonging to the Medium Priority group or subplan are allowed to run only when no active sessions are in the High Priority group or subplan. Similarly, Low Priority sessions get a chance to run only when no active sessions belong to either the High or Medium priority groups or subplans.
However, a plan like the one shown in Table 9-6 can lead to resource starvation. As long as the High Priority group can use 100% of the CPU resources, no session belonging to the Medium or Low priority groups can run at all. In other words, a set of runaway sessions belonging to the High Priority group could completely stall processing of Medium and Low priority group sessions.
If this is not the effect you intend, you can create a plan that ensures allocation of at least minimum resources to all consumer groups by their relative priorities. For example, you might modify the plan in Table 9-6 as follows:
Subplan or Group | CPU_LEVEL1 | CPU_LEVEL2 | CPU_LEVEL3 |
---|---|---|---|
High Priority |
80% |
0% |
0% |
Medium Priority |
10% |
0% |
0% |
Low Priority |
10% |
0% |
0% |
The modified plan in Table 9-7 ensures that while the High Priority group gets most of the CPU time, other groups are not completely stalled.
Oracle9i expects a static configuration and allocates internal resources, such as latches, from available resources detected at database startup. The database might not perform optimally and can become unstable if resource configuration changes very frequently. Therefore, operating-system resource control should be used with Oracle databases judiciously, according to the following guidelines:
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='';
Also remember to reset this parameter in your initialization parameter file, so that the Database Resource Manager is not activated the next time the database is started up.
Tools such as Sun's processor sets and dynamic system domains work well with an Oracle database. There is no need to restart an instance if the number of CPUs changes.
Oracle dynamically detects any change in the number of available CPUs and reallocates internal resources. On most platforms, Oracle automatically adjusts the value of CPU_COUNT
to the number of available CPUs.
See Also:
Oracle9i Database Reference for more information on |
|
Copyright © 1996, 2002 Oracle Corporation. All Rights Reserved. |
|