Oracle® Database Administrator's Guide 11g Release 1 (11.1) Part Number B28310-01 |
|
|
View PDF |
When your situation calls for a more complex resource plan, you must create the plan, with its directives and consumer groups, in a staging area called the pending area, and then validate the plan before storing it in the data dictionary.
The following is a summary of the steps required to create a complex resource plan.
Note:
A complex resource plan is any resource plan that is not created with theDBMS_RESOURCE_MANAGER.CREATE_SIMPLE_PLAN
procedure.Step 1: Create a pending area.
Step 2: Create, modify, or delete consumer groups.
Step 3: Create the resource plan.
Step 4: Create resource plan directives.
Step 5: Validate the pending area.
Step 6: Submit the pending area.
You use procedures in the DBMS_RESOURCE_MANAGER
PL/SQL package to complete these steps. The following sections provide details:
See Also:
Oracle Database PL/SQL Packages and Types Reference for details on the DBMS_RESOURCE_MANAGER
PL/SQL package.
The pending area is a staging area where you can create a new resource plan, update an existing plan, or delete a plan without affecting currently running applications. When you create a pending area, the database initializes it and then copies existing plans into the pending area so that they can be updated.
Tip:
After you create the pending area, if you list all plans by querying theDBA_RSRC_PLANS
data dictionary view, you see two copies of each plan: one with the PENDING
status, and one without. The plans with the PENDING
status reflect any changes you made to the plans since creating the pending area. Pending changes can also be viewed for consumer groups using DBA_RSRC_CONSUMER_GROUPS
and for resource plan directives using DBA_RSRC_PLAN_DIRECTIVES
. See Resource Manager Data Dictionary Views for more information.After you make changes in the pending area, you validate the pending area and then submit it. Upon submission, all pending changes are applied to the data dictionary, and the pending area is cleared and deactivated.
If you attempt to create, update, or delete a plan (or create, update, or delete consumer groups or resource plan directives) without first creating the pending area, you receive an error message.
Submitting the pending area does not activate any new plan that you create; it just stores new or updated plan information in the data dictionary. However, if you modify a plan that is currently active, the plan is reactivated with the new plan definition. See "Enabling Oracle Database Resource Manager and Switching Plans" for information about activating a resource plan.
When you create a pending area, no other users can create one until you submit or clear the pending area or log out.
You create a pending area with the CREATE_PENDING_AREA
procedure.
Example: Creating a pending area:
The following PL/SQL block creates and initializes a pending area:
BEGIN DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA(); END;
You create a resource consumer group using the CREATE_CONSUMER_GROUP
procedure. You can specify the following parameters:
Example: Creating a Resource Consumer Group
The following PL/SQL block creates a consumer group called OLTP
with the default (ROUND-ROBIN
) method of allocating resources to sessions in the group:
BEGIN DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP ( CONSUMER_GROUP => 'OLTP', COMMENT => 'OLTP applications'); END;
You create a resource plan with the CREATE_PLAN
procedure. You can specify the parameters shown in the following table. The first two parameters are required. The remainder are optional.
Example: Creating a Resource Plan
The following PL/SQL block creates a resource plan named DAYTIME
:
BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN( PLAN => 'DAYTIME', COMMENT => 'More resources for OLTP applications'); END;
The RATIO
method is an alternate CPU allocation method intended for simple plans that have only a single level of CPU allocation. Instead of percentages, you specify numbers corresponding to the ratio of CPU that you want to give to each consumer group. To use the RATIO
method, you set the MGMT_MTH
argument for the CREATE_PLAN
procedure to 'RATIO
'. See "Creating Resource Plan Directives" for an example of a plan that uses this method.
See Also:
You use the CREATE_PLAN_DIRECTIVE
procedure to create resource plan directives. You can specify the following parameters:
Parameter | Description |
---|---|
PLAN |
Name of the resource plan to which the directive belongs. |
GROUP_OR_SUBPLAN |
Name of the consumer group or subplan to which to allocate resources. |
COMMENT |
Any comment. |
CPU_P1 |
Deprecated. Use MGMT_P1 . |
CPU_P2 |
Deprecated. Use MGMT_P2 . |
CPU_P3 |
Deprecated. Use MGMT_P3 . |
CPU_P4 |
Deprecated. Use MGMT_P4 . |
CPU_P5 |
Deprecated. Use MGMT_P5 . |
CPU_P6 |
Deprecated. Use MGMT_P6 . |
CPU_P7 |
Deprecated. Use MGMT_P7 . |
CPU_P8 |
Deprecated. Use MGMT_P8 . |
ACTIVE_SESS_POOL_P1 |
Specifies the maximum number of concurrently active sessions for a consumer group. Other sessions await execution in an inactive session queue. Default is UNLIMITED . |
QUEUEING_P1 |
Specifies time (in seconds) after which a session in an inactive session queue (waiting for execution) times out and the call is aborted. Default is UNLIMITED . |
PARALLEL_DEGREE_LIMIT_P1 |
Specifies a limit on the degree of parallelism for any operation. Default is UNLIMITED . |
SWITCH_GROUP |
Specifies the consumer group to which a session is switched if switch criteria are met. If the group name is 'CANCEL_SQL ', then the current call is canceled when switch criteria are met. If the group name is 'KILL_SESSION ', then the session is killed when switch criteria are met. Default is NULL . |
SWITCH_TIME |
Specifies the time (in CPU seconds) that a call can execute before an action is taken. Default is UNLIMITED . The action is specified by SWITCH_GROUP . |
SWITCH_ESTIMATE |
If TRUE , the database estimates the execution time of each call, and if estimated execution time exceeds SWITCH_TIME , the session is switched to the SWITCH_GROUP before beginning the call. Default is FALSE .
The execution time estimate is obtained from the optimizer. The accuracy of the estimate is dependent on many factors, especially the quality of the optimizer statistics. In general, you should expect statistics to be no more accurate than ± 10 minutes. |
MAX_EST_EXEC_TIME |
Specifies the maximum execution time (in CPU seconds) allowed for a call. If the optimizer estimates that a call will take longer than MAX_EST_EXEC_TIME , the call is not allowed to proceed and ORA-07455 is issued. If the optimizer does not provide an estimate, this directive has no effect. Default is UNLIMITED .
The accuracy of the estimate is dependent on many factors, especially the quality of the optimizer statistics. In general, you should expect statistics to be no more accurate than ± 10 minutes. |
UNDO_POOL |
Sets a maximum in kilobytes (K) on the total amount of undo for uncommitted transactions that can be generated by a consumer group. Default is UNLIMITED . |
MAX_IDLE_TIME |
Indicates the maximum session idle time, in seconds. Default is NULL , which implies unlimited. |
MAX_IDLE_BLOCKER_TIME |
Indicates the maximum session idle time of a blocking session, in seconds. Default is NULL , which implies unlimited. |
SWITCH_TIME_IN_CALL |
Deprecated. Use SWITCH_FOR_CALL . |
MGMT_P1 |
For a plan with the MGMT_MTH parameter set to EMPHASIS , specifies the CPU percentage to allocate at the first level. For MGMT_MTH set to RATIO , specifies the weight of CPU usage. Default is NULL for all MGMT_P n parameters. |
MGMT_P2 |
For EMPHASIS , specifies CPU percentage to allocate at the second level. Not applicable for RATIO . |
MGMT_P3 |
For EMPHASIS , specifies CPU percentage to allocate at the third level. Not applicable for RATIO . |
MGMT_P4 |
For EMPHASIS , specifies CPU percentage to allocate at the fourth level. Not applicable for RATIO . |
MGMT_P5 |
For EMPHASIS , specifies CPU percentage to allocate at the fifth level. Not applicable for RATIO . |
MGMT_P6 |
For EMPHASIS , specifies CPU percentage to allocate at the sixth level. Not applicable for RATIO . |
MGMT_P7 |
For EMPHASIS , specifies CPU percentage to allocate at the seventh level. Not applicable for RATIO . |
MGMT_P8 |
For EMPHASIS , specifies CPU percentage to allocate at the eighth level. Not applicable for RATIO . |
SWITCH_IO_MEGABYTES |
Specifies the number of megabytes of I/O that a session can transfer (read and write) before an action is taken. Default is UNLIMITED . The action is specified by SWITCH_GROUP . |
SWITCH_IO_REQS |
Specifies the number of I/O requests that a session can execute before an action is taken. Default is UNLIMITED . The action is specified by SWITCH_GROUP . |
SWITCH_FOR_CALL |
If TRUE , a session that was automatically switched to another consumer group (according to SWITCH_TIME , SWITCH_IO_MEGABYTES , or SWITCH_IO_REQS ) is returned to its original consumer group when the top level call completes. Default is NULL . |
Example 1:
The following PL/SQL block creates a resource plan directive for plan DAYTIME
. (Assumes that the DAYTIME
plan and OLTP
consumer group are already created in the pending area.)
BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE ( PLAN => 'DAYTIME', GROUP_OR_SUBPLAN => 'OLTP', COMMENT => 'OLTP group', MGMT_P1 => 75); END;
This directive assigns 75% of CPU resources to the OLTP
consumer group at level 1.
To complete the plan shown in Figure 25-1, create the REPORTING
consumer group, and then execute the following PL/SQL block:
BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE ( PLAN => 'DAYTIME', GROUP_OR_SUBPLAN => 'REPORTING', COMMENT => 'Reporting group', MGMT_P1 => 15, PARALLEL_DEGREE_LIMIT_P1 => 8, ACTIVE_SESS_POOL_P1 => 4); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE ( PLAN => 'DAYTIME', GROUP_OR_SUBPLAN => 'OTHER_GROUPS', COMMENT => 'This one is required', MGMT_P1 => 10); END;
In this plan, consumer group REPORTING
has a maximum degree of parallelism of 8 for any operation, while none of the other consumer groups are limited in their degree of parallelism. In addition, the REPORTING
group has a maximum of 4 concurrently active sessions.
Example 2:
This example uses the RATIO
method to allocate CPU, which uses ratios instead of percentages. Suppose your application suite offers three service levels to clients: Gold, Silver, and Bronze. You create three consumer groups named GOLD_CG
, SILVER_CG
, and BRONZE_CG
, and you create the following resource plan:
BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN (PLAN => 'SERVICE_LEVEL_PLAN', MGMT_MTH => 'RATIO', COMMENT => 'Plan that supports three service levels'); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (PLAN => 'SERVICE_LEVEL_PLAN', GROUP_OR_SUBPLAN => 'GOLD_CG', COMMENT => 'Gold service level customers', MGMT_P1 => 10); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (PLAN => 'SERVICE_LEVEL_PLAN', GROUP_OR_SUBPLAN => 'SILVER_CG', COMMENT => 'Silver service level customers', MGMT_P1 => 5); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (PLAN => 'SERVICE_LEVEL_PLAN', GROUP_OR_SUBPLAN => 'BRONZE_CG', COMMENT => 'Bronze service level customers', MGMT_P1 => 2); DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (PLAN => 'SERVICE_LEVEL_PLAN', GROUP_OR_SUBPLAN => 'OTHER_GROUPS', COMMENT => 'Lowest priority sessions', MGMT_P1 => 1); END;
The ratio of CPU allocation is 10:5:2:1 for the GOLD_CG
, SILVER_CG
, BRONZE_CG
, and OTHER_GROUPS
consumer groups, respectively.
If sessions exist only in the GOLD_CG
and SILVER_CG
consumer groups, the ratio of CPU allocation is 10:5 between the two groups.
You may have occasion to reference the same consumer group from the top plan and any number of subplans. In this case, there are multiple resource plan directives that refer to the same consumer group, and the following rules apply:
The parallel degree limit for the consumer group will be the minimum of all the incoming values.
The active session pool for the consumer group will be the sum of all the incoming values and the queue timeout will be the minimum of all incoming timeout values.
The undo pool for the consumer group will be the sum of all the incoming values.
If there is more than one SWITCH_TIME
, SWITCH_IO_MEGABYTES
, or SWITCH_IO_REQS
, Oracle Database Resource Manager (the Resource Manager) chooses the most restrictive of all incoming values. Specifically:
SWITCH_TIME
= min
(all incoming SWITCH_TIME
values)
SWITCH_IO_MEGABYTES
= min
(all incoming SWITCH_IO_MEGABYTES
values)
SWITCH_IO_REQS
= min
(all incoming SWITCH_IO_REQS
values)
SWITCH_ESTIMATE = TRUE
overrides SWITCH_ESTIMATE = FALSE
Note:
If both plan directives specify the same switch time, but different switch groups, then the choice as to which group to switch to is statically but arbitrarily decided by the Resource Manager.SWITCH_FOR_CALL
is TRUE
if any of the incoming values are TRUE
.
The maximum estimated execution time will be the most restrictive of all incoming values. Specifically:
MAX_EST_EXEC_TIME
= min
(all incoming MAX_EST_EXEC_TIME
values)
The maximum idle time is the minimum of all incoming values.
The maximum idle blocker time is the minimum of all incoming values.
At any time when you are making changes in the pending area, you can call VALIDATE_PENDING_AREA
to ensure that the pending area is valid so far.
The following rules must be adhered to, and are checked by the validate procedure:
No plan can contain any loops. A loop occurs when a subplan contains a directive that references a plan that is above the subplan in the plan hierarchy. For example, a subplan cannot reference the top plan.
All plans and resource consumer groups referred to by plan directives must exist.
All plans must have plan directives that point to either plans or resource consumer groups.
All percentages in any given level must not add up to greater than 100.
A plan that is currently being used as a top plan by an active instance cannot be deleted.
The following parameters can appear only in plan directives that refer to resource consumer groups, not other resource plans:
PARALLEL_DEGREE_LIMIT_P1
ACTIVE_SESS_POOL_P1
QUEUEING_P1
SWITCH_GROUP
SWITCH_TIME
SWITCH_ESTIMATE
SWITCH_IO_REQS
SWITCH_IO_MEGABYTES
MAX_EST_EXEC_TIME
UNDO_POOL
MAX_IDLE_TIME
MAX_IDLE_BLOCKER_TIME
SWITCH_FOR_CALL
There can be no more than 31 resource consumer groups in any active plan. Also, at most, a plan can have 31 children.
Plans and resource consumer groups cannot have the same name.
There must be a plan directive for OTHER_GROUPS
somewhere in any active plan. This ensures that a session that is not part of any of the consumer groups included in the currently active plan is allocated resources (as specified by the directive for OTHER_GROUPS
).
VALIDATE_PENDING_AREA
raises an error if any of the preceding rules are violated. You can then make changes to fix any problems and call the procedure again.
It is possible to create "orphan" consumer groups that have no plan directives referring to them. This allows the creation of consumer groups that will not currently be used, but might be part of some plan to be implemented in the future.
Example: Validating the Pending Area:
The following PL/SQL block validates the pending area.
BEGIN DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA(); END;
See Also:
"About the Pending Area"After you have validated your changes, call the SUBMIT_PENDING_AREA
procedure to make your changes active.
The submit procedure also performs validation, so you do not necessarily need to make separate calls to the validate procedure. However, if you are making major changes to plans, debugging problems is often easier if you incrementally validate your changes. No changes are submitted (made active) until validation is successful on all of the changes in the pending area.
The SUBMIT_PENDING_AREA
procedure clears (deactivates) the pending area after successfully validating and committing the changes.
Note:
A call toSUBMIT_PENDING_AREA
might fail even if VALIDATE_PENDING_AREA
succeeds. This can happen if, for example, a plan being deleted is loaded by an instance after a call to VALIDATE_PENDING_AREA
, but before a call to SUBMIT_PENDING_AREA
.Example: Submitting the Pending Area:
The following PL/SQL block submits the pending area:
BEGIN DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA(); END;
See Also:
"About the Pending Area"There is also a procedure for clearing the pending area at any time. This PL/SQL block causes all of your changes to be cleared from the pending area and deactivates the pending area:
BEGIN DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA(); END;
After calling CLEAR_PENDING_AREA
, you must call the CREATE_PENDING_AREA
procedure before you can again attempt to make changes.
See Also:
"About the Pending Area"