It is not practical to manage resource allocation at an individual job level, therefore, the Scheduler uses the concept of job classes to manage resource allocation among jobs. In addition to job classes, the Scheduler uses the Resource Manager to manage resource allocation among jobs.
The Database Resource Manager controls how resources are allocated among database sessions. It not only controls asynchronous sessions like jobs but also synchronous sessions like user sessions. It groups all "units of work" in the database into resource consumer groups and uses a resource plan to specify how the resources are allocated among the various groups. See Chapter 25, "Managing Resource Allocation with Oracle Database Resource Manager" for more information about what resources are controlled by the Resource Manager.
For jobs, resource allocation is specified by associating a job class with a consumer group, or by associating a job class with a database service name and mapping that database service to a consumer group. The consumer group that a job class maps to can be specified when creating a job class. If no resource consumer group or database service name is specified when a job class is created, the job class maps to the default consumer group. If both the
service attributes of a job class are set, and the designated service maps to a resource consumer group, the resource consumer group named in the
resource_consumer_group attribute takes precedence.
The Scheduler tries to limit the number of jobs that are running simultaneously so that at least some jobs can complete, rather than running a lot of jobs concurrently but without enough resources for any of them to complete.
The Scheduler and the Resource Manager are tightly integrated. The job coordinator obtains database resource availability from the Resource Manager. Based on that information, the coordinator determines how many jobs to start. It will only start jobs from those job classes that will have enough resources to run. The coordinator will keep starting jobs in a particular job class that maps to a consumer group until the Resource Manager determines that the maximum resource allocated for that consumer group has been reached. This means that it is possible that there will be jobs in the job table that are ready to run but will not be picked up by the job coordinator because there are no resources to run them. Therefore, there is no guarantee that a job will run at the exact time that it was scheduled. The coordinator picks up jobs from the job table on the basis of which consumer groups still have resources available.
Even when jobs are running, the Resource Manager will continue to manage the resources that are assigned to each running job based on the specified resource plan. Keep in mind that the Resource Manager can only manage database processes. The active management of resources does not apply to external jobs.
In a database, only one resource plan can be in effect at one time. It is possible to manually switch the resource plan that is active on a system using the
DBMS_RESOURCE_MANAGER.SWITCH_PLAN procedure. In special scenarios, you might want to run a specific resource plan and disable resource plan switches caused by windows opening. To do this, you can use the
DBMS_RESOURCE_MANAGER.SWITCH_PLAN procedure with
allow_scheduler_plan_switches set to
FALSE. Also remember that a Scheduler window can have a resource plan attribute. The designated resource plan remains active while the window is open.
The following example can help to understand how resources are allocated for jobs. Assume that the active resource plan is called "Night Plan" and that there are three job classes:
JC1, which maps to consumer group
JC2, which maps to consumer group
JC3, which maps to the default consumer group. Figure 27-4 offers a simple graphical illustration of this scenario.
This resource plan clearly gives priority to jobs that are part of job class
JC1. Consumer group
DW gets 60% of the resources, thus jobs that belong to job class
JC1 will get 60% of the resources. Consumer group
OLTP has 30% of the resources, which implies that jobs in job class
JC2 will get 30% of the resources. The consumer group
Other specifies that all other consumer groups will be getting 10% of the resources. This means that all jobs that belong in job class
JC3 will share 10% of the resources and can get a maximum of 10% of the resources.
Note that resources that remain unused by one consumer group are available from use by the other consumer groups. So if the jobs in job class JC1 do not fully use the allocated 60%, the unused portion is available for use by jobs in classes JC2 and JC3. Note also that the Resource Manager does not begin to restrict resource usage at all until CPU usage reaches 100%. See Chapter 25, "Managing Resource Allocation with Oracle Database Resource Manager" for more information.