O Resource Manager divide a CPU e as sessões ativas entre grupos de consumo, conforme o plano de recursos ativo. Quando o grupo da sessão passa do que o plano permite, o banco segura a sessão, e o tempo aparece nas esperas resmgr.
Sintomas
No Diagnóstico, aparece o achado Sessão contida pelo Resource Manager (RESOURCE_MANAGER). O texto diz quanto do tempo total ficou na classe de espera Scheduler, em percentual e em segundos, lista os eventos da classe que pesaram e termina com Ver perfil por classe.
O achado aparece quando a classe Scheduler pesa no tempo total. A severidade é sempre média. Entram nessa classe três eventos:
resmgr:cpu quantum: o plano tirou a CPU da sessão para respeitar a divisão entre os grupos.resmgr:become active: o grupo chegou ao limite de sessões ativas ao mesmo tempo, e a sessão esperou a vez.resmgr:pq queued: o comando em paralelo ficou na fila até haver processos paralelos livres.
Causa
- Servidor sem CPU livre, com plano ativo: o Resource Manager reparte a CPU entre os grupos, e a sessão de um grupo com parte pequena espera.
- Limite do grupo: o plano limita a CPU do grupo mesmo com CPU livre no servidor, ou limita o número de sessões ativas.
- Instance caging: com plano ativo e
cpu_countmenor que o número de CPUs do servidor, a instância inteira fica limitada. - Janela de manutenção: nas janelas do Scheduler, o plano
DEFAULT_MAINTENANCE_PLANentra em vigor para as tarefas automáticas, como a coleta de estatísticas, e a carga do usuário perde prioridade.
Resolução
As consultas mostram o plano e o grupo de agora: rode no horário em que a operação roda, porque o plano ativo muda com as janelas.
- Veja o plano ativo:
select name, is_top_plan, cpu_managed, instance_caging from v$rsrc_plan;Resultado: o plano com
is_top_planigual aTRUEé o que vale. Sem linha, nenhum plano está ativo agora. - Veja o grupo de consumo da sessão. O SID está em Sessão, no cartão Sessão e ambiente do Resumo:
select sid, serial#, username, service_name, module, resource_consumer_group from v$session where sid = &sid; - Veja a parte de CPU e os limites de cada grupo no plano:
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 o Período do trace, no Resumo, com as janelas do Scheduler:
select window_name, resource_plan, repeat_interval, duration, last_start_date, next_start_date, enabled, active from dba_scheduler_windows; - Combine o ajuste com o DBA: mapear a sessão para o grupo certo (por serviço, módulo ou usuário), mudar a parte do grupo no plano, ou mover a operação para fora da janela de manutenção.
A documentação da Oracle sobre o Resource Manager descreve planos, grupos, mapeamentos e instance caging.
Como confirmar
O plano ativo depende do horário. Meça de novo no mesmo horário da medição anterior, senão a comparação mistura planos diferentes.
- Aplique o ajuste combinado com o DBA.
- Ligue o trace da mesma operação com esperas (ligar o trace com o DBMS_MONITOR).
- Envie o arquivo novo e abra o relatório.
- Compare a linha Scheduler em Por classe de espera e os eventos resmgr no perfil.
Resultado: a classe Scheduler deixa de pesar no tempo total e o achado some do Diagnóstico. Se o tempo foi para a CPU ou para o tempo não contabilizado dentro das chamadas, o servidor continua sem CPU livre: veja tempo não contabilizado dentro das chamadas.
No relatório
O relatório de exemplo não tem espera da classe Scheduler; os links abrem as mesmas seções nele.
- Resumo: o Período do trace e o cartão Sessão e ambiente, com Sessão, Serviço e Módulo (resumo).
- Diagnóstico: o achado, com o link Ver perfil por classe.
- Por classe de espera: a linha Scheduler (classes de espera).
- Perfil do tempo de resposta: os eventos resmgr, com Ocorrências e Média (s). O nome de
resmgr:cpu quantumabre o cartão Resource Manager limitando a CPU (perfil). - Principais comandos por componente e por classe: os comandos que a sessão rodava enquanto era contida (comandos por componente).