A seção de objetos diz em que tabelas e índices a sessão esperou. Na console, cada objeto abre uma página com consultas prontas para você rodar no banco do trace e conhecer o objeto: dono, colunas, índices e estatísticas.
O que a seção mostra
A seção Objetos com mais tempo de espera (no índice, Objetos) lista os objetos que mais somaram espera, do que mais somou para o que menos somou. O objeto vem do obj# das linhas WAIT; o nome vem das linhas STAT do próprio trace, quando o objeto aparece num plano. A seção só aparece quando alguma espera traz obj#.
Como ler
| Coluna | O que diz |
|---|---|
| obj# | O object_id do objeto no banco do trace. Na console, leva à página do objeto; no HTML baixado, ao detalhe do objeto no próprio arquivo, com o tipo, a espera e onde ele aparece no trace, sem as consultas prontas. |
| Nome | O nome que o plano do trace dá ao objeto. Em branco quando o objeto não aparece em nenhum plano. |
| Espera (s) | A soma das esperas com esse obj#. |
| Ocorrências | Quantas esperas foram. |
| Eventos principais | Os eventos que mais somaram tempo no objeto, do maior para o menor. |
Leia o objeto junto com os eventos: leitura (db file sequential read, db file scattered read) aponta para o acesso que o plano faz ao objeto; lock e disputa (enq: TX - row lock contention, buffer busy waits) apontam para outras sessões usando o mesmo objeto.
No relatório de exemplo, o objeto 50, a tabela T, soma 0,001 s em 2 leituras de db file sequential read.
A página do objeto
Na console, a página do objeto abre pelo obj# desta seção, pela coluna obj do plano e pelo object_id dos deadlocks. O título é Objeto N com o nome, e a linha de baixo diz o tipo (tabela, índice, view ou sequence, pela operação do plano) e em que banco rodar as consultas: a instância, o container (PDB) e o serviço do trace. As consultas usam as views DBA_; sem esse privilégio, troque por ALL_.
Quando o trace não diz o tipo, um aviso pede para começar pela identificação, porque as consultas de tabela e de índice só devolvem linhas para o tipo certo. O cartão Onde aparece no trace lista as operações de plano que usam o objeto, como Comando #1, operação 1, com link para a linha do plano.
| Bloco | Aparece para | O que traz |
|---|---|---|
| Identificar o objeto | todo objeto | Dono, nome, tipo e situação, pela dba_objects. |
| Tabela: dono, nome e colunas | tabela ou tipo desconhecido | As colunas, com as estatísticas de cada uma. |
| Tabela: índices e as colunas de cada um | tabela ou tipo desconhecido | Os índices da tabela, com as colunas na ordem do índice. |
| Índice: detalhes, tabela e colunas | índice ou tipo desconhecido | Altura, folhas, clustering factor e colunas. |
| View: colunas e texto | view | As colunas e o texto da view. |
| Sequence: cache e último número | sequence | O cache e o último número da sequence. |
Cada bloco tem o botão Copiar. A primeira consulta, com o objeto 50 do exemplo, é esta:
select owner, object_name, subobject_name, object_type, status, created, last_ddl_time
from dba_objects
where object_id = 50;
Para tabela e índice, a seção Estatísticas traz blocos para renovar as estatísticas e para voltar ao backup: Renovar as estatísticas da tabela, Voltar as estatísticas da tabela ao backup e os dois equivalentes do índice.
- Antes de coletar, o bloco guarda as estatísticas atuais em
SYSTEM.JB_BACKUP_STATSe mostra ostatiddo backup. O bloco de volta usa essestatid. - A coleta usa
no_invalidate => FALSEe roda com degree 1. Troquec_paraleloparaTRUEpara usar mais processos, só no Enterprise Edition. - Rode como SYS ou com um usuário que tenha
ANALYZE ANYe acesso ao dicionário.
O object_id é do banco do trace: em outro banco, o mesmo número é outro objeto. Quando o trace traz o nome, o bloco de estatísticas para com erro se o nome no banco for outro. A coleta lê o objeto inteiro e invalida os cursores que o usam, que voltam a fazer hard parse: escolha o horário em produção.
Pela pilha PL/SQL de um deadlock, a mesma página abre para o objeto PL/SQL, com Detalhes do objeto (sem o corpo), Objetos que ele usa, Parâmetros, Corpo do objeto e o trecho de 10 linhas antes e 10 depois da linha da pilha.
Quando preocupa
- Um objeto concentra a maior parte da espera: é nele que o plano ou a concorrência pesam. Vá às operações que o usam, pelo cartão Onde aparece no trace.
- Muitas leituras num índice ou numa tabela grande: confira se o filtro do comando é seletivo e se o índice tem as colunas certas, com as consultas de tabela e de índice.
- Esperas de lock num objeto: outra sessão segura linhas ou a tabela (bloqueio por outra sessão).
- Estatísticas antigas ou ausentes na consulta da tabela, com estimativa errada no plano: candidatas a renovar (estimativa de linhas errada).
Para onde ir depois
- Objetos do relatório de exemplo.
- Plano de execução, para ver como o comando acessa o objeto.
- Leituras, para o tempo e a releitura dos blocos.