DBAtlas · Atlas de operaciones de bases de datos

Crear y activar un plan sencillo de Resource Manager

OracleScheduler

Comando

-- 1) Define groups, plan, directives and mapping inside a pending area (PDB or non-CDB):
BEGIN
  DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA;
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;

  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('OLTP_GRP',  'Online transactions');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('REPORT_GRP', 'Reporting / batch');
  DBMS_RESOURCE_MANAGER.CREATE_PLAN('DAYTIME_PLAN', 'Business hours plan');

  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'DAYTIME_PLAN', group_or_subplan => 'OLTP_GRP',
    comment => 'OLTP first', mgmt_p1 => 70);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'DAYTIME_PLAN', group_or_subplan => 'REPORT_GRP',
    comment => 'Reports limited', mgmt_p1 => 20,
    parallel_degree_limit_p1 => 4,
    switch_group => 'CANCEL_SQL', switch_time => 1800, switch_for_call => TRUE);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'DAYTIME_PLAN', group_or_subplan => 'OTHER_GROUPS',
    comment => 'Everyone else (mandatory)', mgmt_p1 => 10);

  DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
    attribute      => DBMS_RESOURCE_MANAGER.ORACLE_USER,
    value          => 'REPORT_USER',
    consumer_group => 'REPORT_GRP');

  DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
END;
/
-- Switch privilege required for the mapping to take effect:
EXEC DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP('REPORT_USER', 'REPORT_GRP', FALSE);

-- 2) Activate (FORCE: prevents maintenance windows from switching the plan):
ALTER SYSTEM SET resource_manager_plan = 'FORCE:DAYTIME_PLAN' SCOPE = BOTH;

-- 3) Monitor:
SELECT sid, username, resource_consumer_group FROM v$session WHERE username IS NOT NULL;
SELECT name, active_sessions, execution_waiters, consumed_cpu_time, cpu_wait_time
FROM   v$rsrc_consumer_group;

-- 4) Roll back: deactivate the plan, then delete it
-- ALTER SYSTEM SET resource_manager_plan = '' SCOPE = BOTH;
-- BEGIN DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
--       DBMS_RESOURCE_MANAGER.DELETE_PLAN_CASCADE('DAYTIME_PLAN');
--       DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA; END;
-- /

Qué hace

Decide qué carga de trabajo gana cuando hay contención de CPU: da el 70% de la CPU al grupo OLTP y el 20% al grupo de informes, limita el paralelismo a 4 en el grupo de informes y cancela las llamadas que superan 30 minutos (CANCEL_SQL). Los usuarios se asignan automáticamente a consumer groups.

Cuándo usarlo

Para cargas mixtas en las que los informes diurnos ralentizan el OLTP, limitar consultas paralelas sin control y cancelar automáticamente consultas desbocadas.

Precaución

Resource Manager requiere Enterprise Edition (muy limitado en SE2); sin licencia adicional. Los porcentajes de mgmt_p1 solo se aplican cuando hay contención de CPU y no pueden superar el 100% en total en un mismo nivel. CANCEL_SQL mata la sentencia en curso con ORA-00040; una asignación errónea puede matar trabajo crítico, así que pruebe los umbrales con cuidado. Mientras un plan está activo, la limitación de CPU aparece como el wait event 'resmgr:cpu quantum'. Para repartir entre PDB a nivel de CDB use CREATE_CDB_PLAN.

Abrir en DBAtlas →

Relacionado