Example create resource plan multi resource plan 9i

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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