如何限制用户CPU时间_CPU_PER_CALL与CPU_PER_SESSION设置

张开发
2026/4/17 23:56:23 15 分钟阅读

分享文章

如何限制用户CPU时间_CPU_PER_CALL与CPU_PER_SESSION设置
CPU_PER_CALL和CPU_PER_SESSION是Oracle资源管理器中限制单次调用或会话累计CPU时间的硬配额单位为十分之一秒如20020秒仅在启用Resource Manager并为consumer group显式配置时生效。Oracle 中 CPU_PER_CALL 和 CPU_PER_SESSION 是什么这两个参数是 oracle resource manager资源管理器里用于限制单次调用或整个会话 cpu 使用量的硬性配额单位是“十分之一秒”centiseconds。不是百分比也不是毫秒容易误读成“100 1 秒”实际是 100 10 秒 —— 因为 100 × 0.1s 10s。它们只在启用 Resource Manager 并分配了对应 consumer group 的情况下才生效单纯在 profile 里设没用这点常被忽略。CPU_PER_CALL限制单条 SQL 或 PL/SQL 调用比如一次 SELECT、一次 EXECUTE最多能用多少 CPU 时间超时直接报 ORA-02392: exceeded session limit on CPU usageCPU_PER_SESSION限制整个会话生命周期内累计可用的 CPU 时间超限后会话被强制断开错误通常是 ORA-02393: exceeded call limit on CPU usage注意错误码不同两者不叠加生效CPU_PER_CALL 先触发就先报错不会等累计到 CPU_PER_SESSION怎么设置才真正生效必须走 Resource Manager 流程不能靠 ALTER PROFILE 或初始化参数。常见错误是改了 profile 却发现完全没限制效果——因为 profile 里的 CPU_PER_CALL 字段在 12c 已废弃仅保留兼容性实际不生效。创建 resource planBEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN(plan LIMIT_CPU_PLAN); END;定义 consumer group比如叫 low_cpu_group并把用户映射过去DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING在 plan directive 中显式指定CPU_P1或 CPU_P2 等配合 CPU_PER_CALL 和 CPU_PER_SESSION 值例如CPU_PER_CALL 200 表示最多 20 秒启用 planALTER SYSTEM SET RESOURCE_MANAGER_PLAN LIMIT_CPU_PLAN没执行最后一步 ALTER SYSTEM前面全白配。为什么设置了还是被绕过几个高频漏点导致限制形同虚设 JoinMC智能客服 JoinMC智能客服帮您熬夜加班7X24小时全天候智能回复用户消息自动维护媒体主页全平台渠道集成管理电商物流平台一键绑定让您出海轻松无忧

更多文章