Einfachen Resource-Manager-Plan anlegen und aktivieren
OracleSchedulerBefehl
-- 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;
-- /Was es tut
Legt fest, welche Workload bei CPU-Konkurrenz gewinnt: gibt der OLTP-Gruppe 70 % und der Report-Gruppe 20 % der CPU, begrenzt die Parallelität in der Report-Gruppe auf 4 und bricht Aufrufe über 30 Minuten ab (CANCEL_SQL). Benutzer werden automatisch Consumer Groups zugeordnet.
Wann einsetzen
Für gemischte Workloads, bei denen Reports tagsüber OLTP verlangsamen, um unkontrollierte parallele Abfragen zu deckeln und um ausufernde Abfragen automatisch abzubrechen.
Vorsicht
Resource Manager erfordert die Enterprise Edition (in SE2 stark eingeschränkt); keine Zusatzlizenz. Die mgmt_p1-Prozente gelten nur bei CPU-Konkurrenz und dürfen auf einer Ebene zusammen 100 % nicht überschreiten. CANCEL_SQL beendet die laufende Anweisung mit ORA-00040; eine falsche Zuordnung kann kritische Arbeit abbrechen, daher Schwellenwerte sorgfältig testen. Solange ein Plan aktiv ist, zeigt sich CPU-Drosselung als Wait Event 'resmgr:cpu quantum'. Für die Aufteilung zwischen PDBs auf CDB-Ebene CREATE_CDB_PLAN verwenden.