Example create resource plan multi resource plan 9i
| Fiche express | |
|---|---|
| Type | Exemple DDL Oracle |
| Contexte | Database Resource Manager — plan multi-niveaux (Oracle 9i) |
| Voir aussi | Example database resource manager setup · Example create profile resource parameters |
Exemple de configuration multi-niveaux du Database Resource Manager (DRM) sous Oracle 9i : un plan racine (« top plan ») répartit le CPU entre deux sous-plans, chacun répartissant à son tour le CPU entre ses propres groupes de consommateurs. Ce script complète Example database resource manager setup, qui présente une configuration DRM à un seul niveau plus le mécanisme d'attribution des utilisateurs aux groupes.
Arborescence mise en place
[TOP_PLAN]
|
-----------------------------------
/ \
30 % niveau 1 70 % niveau 1
| |
[SUB_PLAN1] [SUB_PLAN2]
| |
----------------------- -----------------------
/ | \ / | \
80 % niv.1 20 % niv.1 100 % niv.2 60 % niv.1 40 % niv.1 100 % niv.2
| | | | | |
[ONLINE_1] [BATCH_1] [OTHER_GROUPS] [ONLINE_2] [BATCH_2] [OTHER_GROUPS]
Le plan racine TOP_PLAN alloue 30 % du CPU (niveau 1) à SUB_PLAN1 et
70 % à SUB_PLAN2. Chaque sous-plan répartit ensuite son propre budget entre un
groupe « online », un groupe « batch » et le groupe implicite OTHER_GROUPS (toute
session non explicitement rattachée à un groupe défini).
Comme pour toute modification du Resource Manager, les opérations sont regroupées dans une
« zone d'attente » (pending area) : on crée la zone, on empile les créations de plans,
groupes et directives, on valide, puis on soumet — rien n'est actif tant que
SUBMIT_PENDING_AREA n'a pas été appelé.
Script
BEGIN
-- Ouverture de la zone d'attente : rien n'est appliqué avant le SUBMIT en fin de script
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
-- Un plan racine et deux sous-plans
DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'TOP_PLAN', COMMENT => 'Top plan');
DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'SUB_PLAN1', COMMENT => 'Sub plan 1');
DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'SUB_PLAN2', COMMENT => 'Sub plan 2');
-- Deux groupes de consommateurs par sous-plan (online / batch)
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'ONLINE_GROUP_SUB_PLAN_1', COMMENT => 'Online Group - Sub Plan 1');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'BATCH_GROUP_SUB_PLAN_1', COMMENT => 'Batch Group - Sub Plan 1');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'ONLINE_GROUP_SUB_PLAN_2', COMMENT => 'Online Group - Sub Plan 2');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'BATCH_GROUP_SUB_PLAN_2', COMMENT => 'Batch Group - Sub Plan 2');
-- Répartition du CPU entre les deux sous-plans, au niveau 1 du plan racine
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'TOP_PLAN', GROUP_OR_SUBPLAN => 'SUB_PLAN1'
, COMMENT => 'All sub plan 1 user sessions at level 1', CPU_P1 => 30);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'TOP_PLAN', GROUP_OR_SUBPLAN => 'SUB_PLAN2'
, COMMENT => 'All sub plan 2 user sessions at level 1', CPU_P1 => 70);
-- Répartition interne du sous-plan 1 : online prioritaire (80 %) sur batch (20 %)
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'SUB_PLAN1', GROUP_OR_SUBPLAN => 'ONLINE_GROUP_SUB_PLAN_1'
, COMMENT => 'Online sub plan 1 users sessions at level 1', CPU_P1 => 80, CPU_P2 => 0);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'SUB_PLAN1', GROUP_OR_SUBPLAN => 'BATCH_GROUP_SUB_PLAN_1'
, COMMENT => 'Batch sub plan 1 users sessions at level 1', CPU_P1 => 20, CPU_P2 => 0);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'SUB_PLAN1', GROUP_OR_SUBPLAN => 'OTHER_GROUPS'
, COMMENT => 'All other users sessions at level 2', CPU_P1 => 0, CPU_P2 => 100);
-- Répartition interne du sous-plan 2 : online prioritaire (60 %) sur batch (40 %)
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'SUB_PLAN2', GROUP_OR_SUBPLAN => 'ONLINE_GROUP_SUB_PLAN_2'
, COMMENT => 'Online sub plan 2 users sessions at level 1', CPU_P1 => 60, CPU_P2 => 0);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'SUB_PLAN2', GROUP_OR_SUBPLAN => 'BATCH_GROUP_SUB_PLAN_2'
, COMMENT => 'Batch sub plan 2 users sessions at level 1', CPU_P1 => 40, CPU_P2 => 0);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'SUB_PLAN2', GROUP_OR_SUBPLAN => 'OTHER_GROUPS'
, COMMENT => 'All other users sessions at level 2', CPU_P1 => 0, CPU_P2 => 100);
-- Validation explicite (facultative : SUBMIT_PENDING_AREA la fait implicitement)
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
-- Application effective du plan
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/
-- Activation du plan au niveau de l'instance
ALTER SYSTEM SET resource_manager_plan = top_plan;
Voir aussi
- Example database resource manager setup — configuration DRM à un seul niveau, avec attribution des utilisateurs aux groupes et bascule jour/nuit
- Example create profile resource parameters — limites de ressources au niveau session/utilisateur (mécanisme distinct des plans DRM)