El Resource Manager reparte la CPU y las sesiones activas entre grupos de consumo, según el plan de recursos activo. Cuando el grupo de la sesión supera lo que el plan permite, la base de datos retiene la sesión, y el tiempo aparece en las esperas resmgr.
Síntomas
En el Diagnóstico aparece el hallazgo Sesión limitada por el Resource Manager (RESOURCE_MANAGER). El texto dice cuánto del tiempo total quedó en la clase de espera Scheduler, en porcentaje y en segundos, lista los eventos de la clase que pesaron y termina con Ver perfil por clase.
El hallazgo aparece cuando la clase Scheduler pesa en el tiempo total. La gravedad es siempre media. Entran en esta clase tres eventos:
resmgr:cpu quantum: el plan quitó la CPU a la sesión para respetar el reparto entre los grupos.resmgr:become active: el grupo llegó al límite de sesiones activas al mismo tiempo, y la sesión esperó su turno.resmgr:pq queued: la sentencia en paralelo quedó en la cola hasta que hubo procesos paralelos libres.
Causa
- Servidor sin CPU libre, con un plan activo: el Resource Manager reparte la CPU entre los grupos, y la sesión de un grupo con una parte pequeña espera.
- Límite del grupo: el plan limita la CPU del grupo aun con CPU libre en el servidor, o limita el número de sesiones activas.
- Instance caging: con un plan activo y
cpu_countmenor que el número de CPU del servidor, toda la instancia queda limitada. - Ventana de mantenimiento: en las ventanas del Scheduler, el plan
DEFAULT_MAINTENANCE_PLANentra en vigor para las tareas automáticas, como la recolección de estadísticas, y la carga del usuario pierde prioridad.
Solución
Las consultas muestran el plan y el grupo de este momento: ejecútelas en el horario en que se ejecuta la operación, porque el plan activo cambia con las ventanas.
- Vea el plan activo:
select name, is_top_plan, cpu_managed, instance_caging from v$rsrc_plan;Resultado: el plan con
is_top_planigual aTRUEes el que vale. Sin filas, no hay ningún plan activo ahora. - Vea el grupo de consumo de la sesión. El SID está en Sesión, en la tarjeta Sesión y entorno del Resumen:
select sid, serial#, username, service_name, module, resource_consumer_group from v$session where sid = &sid; - Vea la parte de CPU y los límites de cada grupo en el plan:
select group_or_subplan, mgmt_p1, mgmt_p2, utilization_limit, active_sess_pool_p1, parallel_server_limit from dba_rsrc_plan_directives where plan = '&plano' order by mgmt_p1 desc; - Compare el Período del trace, en el Resumen, con las ventanas del Scheduler:
select window_name, resource_plan, repeat_interval, duration, last_start_date, next_start_date, enabled, active from dba_scheduler_windows; - Acuerde el ajuste con el DBA: asignar la sesión al grupo correcto (por servicio, módulo o usuario), cambiar la parte del grupo en el plan o llevar la operación fuera de la ventana de mantenimiento.
La documentación de Oracle sobre el Resource Manager describe planes, grupos, asignaciones e instance caging.
Cómo confirmar
El plan activo depende del horario. Mida de nuevo en el mismo horario de la medición anterior; de lo contrario, la comparación mezcla planes diferentes.
- Aplique el ajuste acordado con el DBA.
- Active el trace de la misma operación con esperas (activar el trace con DBMS_MONITOR).
- Envíe el archivo nuevo y abra el informe.
- Compare la fila Scheduler en Por clase de espera y los eventos resmgr en el perfil.
Resultado: la clase Scheduler deja de pesar en el tiempo total y el hallazgo desaparece del Diagnóstico. Si el tiempo pasó a la CPU o al tiempo no contabilizado dentro de las llamadas, el servidor sigue sin CPU libre: vea tiempo no contabilizado dentro de las llamadas.
En el informe
El informe de ejemplo no tiene esperas de la clase Scheduler; los enlaces abren las mismas secciones en él.
- Resumen: el Período del trace y la tarjeta Sesión y entorno, con Sesión, Servicio y Módulo (resumen).
- Diagnóstico: el hallazgo, con el enlace Ver perfil por clase.
- Por clase de espera: la fila Scheduler (clases de espera).
- Perfil del tiempo de respuesta: los eventos resmgr, con Ocurrencias y Media (s). El nombre de
resmgr:cpu quantumabre la tarjeta Resource Manager limitando la CPU (perfil). - Sentencias principales por componente y por clase: las sentencias que la sesión ejecutaba mientras estaba limitada (sentencias por componente).