Создать и активировать простой план Resource Manager
OracleПланировщикКоманда
-- 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;
-- /Что делает
Определяет, какая нагрузка выигрывает при конкуренции за CPU: отдаёт группе OLTP 70%, а группе отчётов 20% CPU, ограничивает параллелизм в группе отчётов значением 4 и отменяет вызовы длительностью более 30 минут (CANCEL_SQL). Пользователи автоматически сопоставляются с consumer group.
Когда использовать
Для смешанной нагрузки, когда дневные отчёты замедляют OLTP, чтобы ограничить неконтролируемые параллельные запросы и автоматически отменять вышедшие из-под контроля запросы.
Внимание
Resource Manager требует Enterprise Edition (в SE2 сильно ограничен); дополнительная лицензия не нужна. Проценты mgmt_p1 действуют только при конкуренции за CPU и в сумме на одном уровне не могут превышать 100%. CANCEL_SQL прерывает выполняющийся оператор с ORA-00040; неверное сопоставление может прервать критичную работу, поэтому тщательно тестируйте пороги. Пока план активен, ограничение CPU проявляется как wait event 'resmgr:cpu quantum'. Для распределения между PDB на уровне CDB используйте CREATE_CDB_PLAN.