Step to create Resource Manager consumer groups in Oracle Database
1.
First confirm the exact PROGRAM values
SELECT program,
COUNT(*) sessions
FROM v$session
WHERE type = 'USER'
GROUP BY program
ORDER BY sessions DESC;
2. Create a consumer group
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
consumer_group => 'MYAPP_CPU_GROUP',
comment => 'CPU restricted sessions for myapp.exe'
);
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/
3. Map PROGRAM to the consumer group
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
attribute => DBMS_RESOURCE_MANAGER.CLIENT_PROGRAM,
value => 'myapp.exe',
consumer_group => 'MYAPP_CPU_GROUP'
);
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/
4. Create the CPU resource plan
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
plan => 'APP_CPU_PLAN',
comment => 'CPU control based on application program'
);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'APP_CPU_PLAN',
group_or_subplan => 'MYAPP_CPU_GROUP',
comment => 'Restricted application',
mgmt_p1 => 20
);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => 'APP_CPU_PLAN',
group_or_subplan => 'OTHER_GROUPS',
comment => 'All other sessions',
mgmt_p1 => 80
);
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/
Enable it:
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'APP_CPU_PLAN';
SELECT sid,
serial#,
username,
program,
module,
service_name,
resource_consumer_group
FROM v$session
WHERE type = 'USER'
ORDER BY program;
SELECT name,
active_sessions,
execution_waiters,
ROUND(consumed_cpu_time/1000,2) consumed_sec,
ROUND(cpu_wait_time/1000,2) wait_sec,
cpu_waits
FROM v$rsrc_consumer_group
ORDER BY
consumed_cpu_time DESC;
No comments:
Post a Comment