Oracle 12c中PDB性能被干扰大概率是Resource Manager默认将未显式配置的PDB归入OTHER_GROUPS(仅1% CPU配额且无并行权限),而非SQL问题;需通过AWR中“Resource Limit Statistics”、V$RSRC_SESSION_INFO及V$RSRC_PLAN等视图确认资源限制是否生效。
oracle 12c中pdb性能被干扰,大概率不是sql写得差,而是资源管理器(resource manager)在后台悄悄限速了——尤其当你没显式配置计划、又用了默认的default_plan时,pdb可能被自动塞进other_groups里挨刀。
怎么看PDB是不是被Resource Manager卡脖子了
别急着调SQL,先确认是不是资源分配层面出了问题。AWR报告里最直接的线索藏在「Database Instance Activity」和「Top 5 Timed Foreground Events」之后的「Resource Limit Statistics」小节:
- 查
DBA_HIST_RSRC_CONSUMER_GROUP视图,看目标PDB对应consumer group是否长期处于ACTIVE状态且CPU_WAIT_TIME飙升 - 在AWR报告中搜索关键词
resource manager,重点看cpu_wait_time、active_sessions_limit、parallel_execution_servers_limit这几列有没有持续接近或达到100% - 执行
SELECT * FROM V$RSRC_SESSION_INFO WHERE CON_ID = <your_pdb_con_id>;</your_pdb_con_id>,观察CURRENT_CONSUMER_GROUP和WAIT_TIME字段
为什么DEFAULT_PLAN会让PDB变慢
Oracle 12c默认启用DEFAULT_PLAN,但它对PDB不友好:所有未显式绑定到资源计划的PDB,都会被统一归入OTHER_GROUPS。这个组默认只有1% CPU配额(不是100%,是1),且没有并行执行权限。
-
OTHER_GROUPS是“兜底组”,不是“默认组”——它专为意外漏网的会话准备,不是设计来跑业务的 - 即使你在PDB里手动执行
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = '';,CDB层的DEFAULT_PLAN仍会生效 - 该限制在AWR中不报错、不告警,只表现为会话排队、
resmgr:cpu quantum等待事件频繁、TOP SQL执行时间忽高忽低
怎么给PDB单独配资源计划(不改CDB全局策略)
核心思路:在CDB$ROOT中为每个PDB创建专属consumer group,并绑定到PDB自己的资源计划。这样既不影响其他PDB,也不动DEFAULT_PLAN。
- 确认PDB的
CON_ID:SELECT CON_ID, NAME FROM V$PDBS WHERE NAME = 'YOUR_PDB'; - 在CDB$ROOT中创建plan和group:
EXEC DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA(); EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'PDB_YOUR_PDB_PLAN', COMMENT => 'CPU/IO for YOUR_PDB'); EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'CG_YOUR_PDB', COMMENT => 'Group for YOUR_PDB'); EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'PDB_YOUR_PDB_PLAN', GROUP_OR_SUBPLAN => 'CG_YOUR_PDB', COMMENT => 'CPU and parallel', CPU_P1 => 60, PARALLEL_DEGREE_LIMIT_P1 => 8); EXEC DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
- 把PDB关联到这个plan:
ALTER PLUGGABLE DATABASE YOUR_PDB SET PARAMETER RESOURCE_MANAGER_PLAN = 'PDB_YOUR_PDB_PLAN'; - 重启PDB使设置生效:
ALTER PLUGGABLE DATABASE YOUR_PDB CLOSE IMMEDIATE; ALTER PLUGGABLE DATABASE YOUR_PDB OPEN;
容易被忽略的三个细节
Resource Manager对PDB生效有隐藏前提,漏掉任一条件都会让配置“看起来生效了,其实没用”:
- PDB必须处于
READ WRITE模式——READ ONLY或MOUNTED状态下,资源计划不加载 - 用户连接时必须指定
service_name而非sid,否则会话可能落到CDB层,绕过PDB级资源控制 -
V$RSRC_PLAN视图只在CDB$ROOT中可见,PDB内查不到自己正在用哪个plan,得回CDB查DBA_RSRC_PLANS和DBA_RSRC_PLAN_DIRECTIVES



















