As esperas da classe Configuration vêm de um limite da instância ou do objeto: redo log pequeno, buffer cache, cache da sequence, espaço de transação no bloco. O evento diz qual limite foi atingido, e a correção costuma ser de configuração, não de SQL.
Sintomas
No Diagnóstico, aparece o achado Espera ligada à configuração do banco (CONFIGURACAO). O texto diz quanto do tempo total ficou na classe de espera Configuration, em percentual e em segundos, lista os eventos da classe que pesaram, lembra o que revisar (redo logs, buffer cache, cache das sequences) e termina com Ver perfil por classe.
O achado aparece quando a classe Configuration pesa no tempo total. A severidade é sempre média, qualquer que seja o percentual. Evento que o relatório não classifica aparece no perfil como Não classificado e não conta aqui.
Causa
Cada evento da classe aponta um limite diferente. As esperas de troca de redo log param toda sessão que gera redo, não só a do trace.
| Evento | O que aconteceu | O que revisar |
|---|---|---|
log file switch completion | A sessão esperou a troca do arquivo de redo log. | Tamanho dos redo logs: trocas frequentes. |
log file switch (checkpoint incomplete) | O próximo redo log ainda tinha blocos que o checkpoint não gravou. | Número e tamanho dos grupos de redo log. |
log file switch (archiving needed) | O próximo redo log ainda não tinha sido arquivado. | Arquivamento parado ou destino cheio. |
log file switch (private strand flush incomplete) | A troca esperou o redo privado das transações abertas ir para o log buffer. | Frequência das trocas de redo log. |
log buffer space | Faltou espaço no log buffer para o redo. | Tamanho do log buffer e velocidade do LGWR. |
free buffer waits, write complete waits | Faltou buffer livre no cache, ou o bloco estava sendo gravado pelo DBWR. | Buffer cache, DBWR e escrita no armazenamento. |
enq: SQ - contention | Sessões esperando a sequence renovar o cache no dicionário. | CACHE da sequence. |
enq: HW - contention | Várias sessões alocando espaço acima da marca d'água (HWM) do mesmo segmento. | Inserções concorrentes em tabela ou LOB que cresce rápido. |
enq: TX - allocate ITL entry | O bloco não tinha entrada de transação (ITL) livre para mais uma transação. | INITRANS e PCTFREE do objeto. |
undo segment extension | O segmento de undo precisou crescer durante a operação. | Tamanho e crescimento da tablespace de undo. |
enq: ST - contention | Disputa pela alocação de espaço. | Tablespace gerenciada pelo dicionário. |
Resolução
Ache o evento que o achado lista primeiro na tabela da causa. Os casos vão do mais comum ao menos comum.
Redo log pequeno ou com poucos grupos
Veja o tamanho e a situação dos grupos, e quantas trocas houve por hora nas últimas 24 horas:
select thread#, group#, bytes / 1024 / 1024 as mb, members, status, archived
from v$log
order by thread#, group#;
select trunc(first_time, 'HH24') as hora, thread#, count(*) as trocas
from v$log_history
where first_time > sysdate - 1
group by trunc(first_time, 'HH24'), thread#
order by hora, thread#;
Muitas trocas por hora pedem redo logs maiores; checkpoint incomplete pede também mais grupos. Crie os grupos novos e remova os pequenos quando ficarem INACTIVE, como descreve a documentação da Oracle sobre o redo log. Com archiving needed, confira o destino do arquivamento antes de mexer nos grupos.
Sequence e espaço de transação no bloco
Para enq: SQ - contention, aumente o cache da sequence; em RAC, prefira também noorder:
alter sequence exemplo.pedido_seq cache 1000;
Para enq: TX - allocate ITL entry, aumente o INITRANS do objeto que aparece em Objetos com mais tempo de espera. O valor novo vale para blocos novos; os blocos que já existem só mudam quando a tabela é movida (alter table ... move; sem update indexes, os índices ficam UNUSABLE e precisam ser refeitos) ou o índice é refeito:
alter table exemplo.pedido initrans 10;
alter index exemplo.pedido_pk rebuild initrans 10;
Buffer cache, DBWR e log buffer
free buffer waits e write complete waits apontam para o DBWR, que não grava os blocos alterados rápido o bastante: confira a escrita no armazenamento e o tamanho do buffer cache. log buffer space aponta para log buffer pequeno ou LGWR lento diante de muito redo. São ajustes da instância: leve ao DBA o perfil e o Período do trace.
Espaço e undo
enq: HW - contention: várias sessões inserindo num segmento que cresce. Alocar extensões antes da carga ajuda (alter table exemplo.pedido allocate extent;).undo segment extension: o undo cresce durante a operação. Confira o tamanho e o autoextend da tablespace de undo.enq: ST - contention: aparece com tablespace gerenciada pelo dicionário. Prefira tablespaces gerenciadas localmente.
Como confirmar
Esses eventos dependem da carga da instância inteira, como o redo que todas as sessões geram. Meça de novo no mesmo horário e com carga parecida.
- Aplique o ajuste do evento que pesava.
- 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 Configuration em Por classe de espera e a linha do evento no perfil.
Resultado: a classe Configuration deixa de pesar no tempo total e o achado some do Diagnóstico. No perfil, o evento ajustado cai em Ocorrências ou em Média (s).
No relatório
O relatório de exemplo não tem espera da classe Configuration; os links abrem as mesmas seções nele.
- Diagnóstico: o achado, com o link Ver perfil por classe.
- Por classe de espera: a linha Configuration, com os eventos em Principais componentes. O cartão da classe abre ao clicar no nome dela (classes de espera).
- Perfil do tempo de resposta: cada evento, com Ocorrências e Média (s). O cartão de cada evento diz quando ele é normal e quando preocupa (perfil).
- Objetos com mais tempo de espera: a tabela ou o índice de
enq: TX - allocate ITL entrye deenq: HW - contention(objetos). - Principais comandos por componente e por classe: os comandos que esperaram, como os que geram redo ou usam a sequence (comandos por componente).
- Resumo: o Período do trace, para cruzar com a hora das trocas de redo log em
v$log_history(resumo).