A lista de comandos mostra quanto do tempo total cada SQL e cada bloco PL/SQL explica. É dela que você parte para o detalhe e o plano de um comando.
O que a seção mostra
A seção Comandos SQL por contribuição (no índice, Comandos SQL) tem uma linha por comando distinto do trace, ou por forma, como explicado abaixo, da maior contribuição para a menor e, no empate, pelo inclusivo. O texto do alto define as duas medidas: Contribuição: duração das chamadas de nível 0 do comando somada às esperas entre chamadas no cursor dele. Inclusivo: soma de todas as chamadas do comando, em qualquer profundidade.
A lista mostra 10 comandos, ou o número escolhido em Comandos por lista no alto do relatório. Abaixo dela podem aparecer três linhas:
- Mostrando N de M comandos, quando a escolha cortou a lista;
- Outros N comandos ficaram fora da lista, com a contribuição somada deles: o relatório detalha só os comandos de maior contribuição, e os demais entram nessa soma. Quando a conta é estimada, a linha começa com Cerca de N outros comandos;
- Tempo não atribuído a nenhum comando: o tempo total menos a contribuição de todos os comandos, como o tempo não contabilizado entre chamadas e as esperas sem cursor.
Comandos que só diferem nos literais (SQL com os valores no texto, sem bind) viram uma linha só, a forma, com os totais das variantes somados e o selo N variantes antes do texto. Abaixo da lista, uma nota explica: As linhas marcadas com variantes somam comandos que só diferem nos literais; no texto, :s e :n ocupam o lugar dos literais. A lista de formas está em textos compartilháveis, e as variantes que mais gastaram ficam no detalhe da forma.
Como ler
| Coluna | O que diz |
|---|---|
| # | A posição do comando, com link para o detalhe. O mesmo número identifica o comando nas outras seções e nos achados. |
| Contribuição (s) | A duração das chamadas de nível 0 do comando somada às esperas entre chamadas no cursor dele, como o SQL*Net message from client entre um FETCH e outro. A soma das contribuições com o tempo não atribuído é o tempo total. |
| % do total | A contribuição dividida pelo tempo total. |
| Inclusivo (s) | A soma da duração (e=) de todas as chamadas do comando, em qualquer profundidade. Inclui o SQL recursivo que o comando dispara, porque a duração de uma chamada já contém a das filhas, e não inclui as esperas entre chamadas. |
| Tipo | O tipo do comando, pelo oct= do trace: SELECT, INSERT, UPDATE, DELETE, MERGE, PL/SQL e outros. Sem ele, a primeira palavra do texto. |
| Prof. | A profundidade (dep=): 0 no comando chamado pela aplicação, 1 ou mais no SQL recursivo. |
| Exec e Fetch | Quantas chamadas EXEC e FETCH o comando teve. |
| Linhas | A soma das linhas (r=) de todas as chamadas. |
| LIO | Leituras lógicas: a soma de cr= e cu= das chamadas. |
| PIO | Leituras físicas: a soma de p=. |
| SQL ID | O sql_id do comando. Em branco na linha de uma forma, porque cada variante tem o seu. |
| Texto | O começo do texto, com link para o detalhe. Quando dois comandos começam igual, cada um mostra o começo, um … e o trecho em que difere dos outros. Sem o texto no trace, aparece a chave do comando. |
No relatório de exemplo, o comando #1 contribui com 0,007 s (95,9% do total) e tem inclusivo de 0,002 s. A diferença é a espera SQL*Net message from client no cursor dele, que entra na contribuição e não no inclusivo. O comando #2 tem profundidade 1: é recursivo, e a contribuição dele é zero.
Trace com muitos comandos
Em trace com muitos comandos distintos, como o de uma aplicação que monta cada SQL com os valores no texto, a análise atinge limites e passa a somar em vez de guardar o detalhe de cada comando. Cada limite atingido gera um aviso no alto do relatório:
- limite de N comandos com detalhe próprio atingido: os comandos novos foram somados pela forma do texto, o mesmo SQL com os literais trocados por
:se:n; - limite de N formas de comando atingido: os comandos de formas novas foram somados numa linha só, (outros comandos além do limite);
- limite de N variantes lembradas atingido: daí em diante, a contagem de variantes de cada forma é estimada, e as variantes novas não entram na tabela das que mais gastaram.
Com a contagem estimada, os números aparecem como cerca de N: em Comandos distintos no Resumo, no selo das variantes, no título do achado de literais em vez de bind, na coluna Textos de textos compartilháveis e na linha dos comandos fora da lista. O tempo total, o perfil e a soma das contribuições não mudam: o que diminui é o detalhe por comando.
Quando preocupa
- Poucos comandos somam quase todo o tempo total: comece pelo primeiro, no detalhe e no plano.
- LIO muito acima de Linhas: o plano lê muitos blocos para cada linha que devolve.
- Exec na casa dos milhares num comando recursivo, com uma linha por execução: laço em PL/SQL (linha a linha).
- Fetch perto de Linhas num comando de nível 0: a aplicação busca uma linha por vez (muitos FETCH com poucas linhas).
- Contribuição bem maior que o inclusivo: o tempo do comando está nas esperas entre chamadas, em geral a aplicação (sessão esperando a aplicação).
- Comandos parecidos que, juntos, somam muito tempo: confira se eles só mudam nos literais (textos compartilháveis).
Para onde ir depois
- Comandos SQL do relatório de exemplo.
- Detalhe do comando, ao clicar no número ou no texto.
- Comandos por componente, para ver o tempo de cada comando por componente do perfil.