caso-2.trc
Sessão e ambiente
- Banco
- Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
- Instância
- INST_01
- Servidor
- MAQ_01 · AIX · MAQ_02
- Sessão
- 128.85179 · pid 29352362
- Serviço
- SVC_01
- Módulo
- MOD_01
- Ação
- Unidade de tempo
- microssegundos
- Arquivo no servidor
- caso2.trc
Diagnóstico
Padrões que costumam explicar o que o trace mostra, em ordem de severidade. São pistas para a análise, não conclusões.
323.268 leituras somam 35,6% do tempo total. Antes de acelerar o disco, veja se o plano lê blocos demais (índice pouco seletivo, acesso linha a linha). Ver distribuição de latência
Operação DELETE TAB_0049. Gravou 66.842 blocos no TEMP: a workarea da PGA não bastou. Também pesam: operação 2, INDEX RANGE SCAN IDX_0034 (82,2% das leituras lógicas). As operações estão destacadas no plano, no detalhe do comando. Ver no plano do comando #7
SQL recursivo executado uma vez por linha, típico de laço em PL/SQL. Processamento em conjunto (um único SQL ou FORALL) costuma reduzir muito o tempo. Ver comando #1
SQL recursivo executado uma vez por linha, típico de laço em PL/SQL. Processamento em conjunto (um único SQL ou FORALL) costuma reduzir muito o tempo. Ver comando #2
Perfil do tempo de resposta
Cada linha é uma parte do tempo total; somadas, dão 100%. Clique no nome de um componente ou de uma classe para ver o que esse tempo significa, quando ele é normal, quando indica problema e onde conferir no relatório. Tempo não contabilizado é o que o trace não explica por CPU nem por espera: dentro das chamadas, costuma ser fila de CPU ou código sem instrumentação; o valor negativo vem da granularidade da medida de CPU.
| Componente | Duração (s) | % do total | gráfico | Ocorrências | Média (s) | Mín (s) | Máx (s) |
|---|---|---|---|---|---|---|---|
| User I/O | 365,865870 | 35,6 | 323.268 | 0,001132 | 0,000127 | 0,314918 | |
| cpu | 170,263521 | 16,5 | 102.658 | 0,001659 | 0,000002 | 104,205928 | |
| não contabilizado | 149,483409 | 14,5 | 305.623 | 0,000489 | |||
| não contabilizado | 87,677960 | 8,5 | |||||
| User I/O | 82,615851 | 8,0 | 5.357 | 0,015422 | 0,000560 | 0,335030 | |
| Idle | 74,696038 | 7,3 | 68 | 1,098471 | 0,001397 | 22,601830 | |
| User I/O | 60,291100 | 5,9 | 8.825 | 0,006832 | 0,000008 | 0,091651 | |
| cpu | 17,535369 | 1,7 | 99.915 | 0,000176 | 0,000000 | 15,886799 | |
| User I/O | 12,718013 | 1,2 | 1.019 | 0,012481 | 0,002717 | 0,073023 | |
| User I/O | 7,638662 | 0,7 | 2.950 | 0,002589 | 0,000007 | 0,102338 | |
| cpu | 0,110972 | 0,0 | 394 | 0,000282 | 0,000002 | 0,019293 | |
| cpu | 0,054101 | 0,0 | 102.656 | 0,000001 | 0,000000 | 0,000028 | |
| Configuration | 0,052671 | 0,0 | 2 | 0,026336 | 0,021904 | 0,030767 | |
| Configuration | 0,033119 | 0,0 | 2 | 0,016560 | 0,008202 | 0,024917 | |
| Não classificado | 0,008608 | 0,0 | 1 | 0,008608 | 0,008608 | 0,008608 | |
| Application | 0,002383 | 0,0 | 3 | 0,000794 | 0,000141 | 0,001668 | |
| Não classificado | 0,001118 | 0,0 | 1 | 0,001118 | 0,001118 | 0,001118 | |
| User I/O | 0,000993 | 0,0 | 36 | 0,000028 | 0,000002 | 0,000065 | |
| Não classificado | 0,000409 | 0,0 | 6 | 0,000068 | 0,000000 | 0,000395 | |
| Other | 0,000356 | 0,0 | 2 | 0,000178 | 0,000176 | 0,000180 | |
| Network | 0,000159 | 0,0 | 68 | 0,000002 | 0,000000 | 0,000006 | |
| Total | 1.029,050682 | 100,0 | |||||
Por classe de espera
Os mesmos componentes agrupados pela classe de espera do Oracle (wait_class), com CPU e tempo não contabilizado à parte. A soma também é o tempo total.
| Classe | Duração (s) | % do total | gráfico | Ocorrências | Principais componentes |
|---|---|---|---|---|---|
| 529,130489 | 51,4 | 341.455 | db file sequential read · direct path read · direct path read temp · db file scattered read · direct path write temp | ||
| 237,161369 | 23,0 | tempo não contabilizado dentro das chamadas · tempo não contabilizado entre chamadas | |||
| 187,963963 | 18,3 | 305.623 | CPU: EXEC dbcalls · CPU: FETCH dbcalls · CPU: PARSE dbcalls · CPU: CLOSE dbcalls | ||
| 74,696038 | 7,3 | 68 | SQL*Net message from client | ||
| 0,085790 | 0,0 | 4 | log file switch completion · log file switch (private strand flush incomplete) | ||
| 0,010135 | 0,0 | 8 | CSS initialization · CSS operation: action · CSS operation: query | ||
| 0,002383 | 0,0 | 3 | enq: RO - fast object reuse | ||
| 0,000356 | 0,0 | 2 | reliable message | ||
| 0,000159 | 0,0 | 68 | SQL*Net message to client |
Principais comandos por componente e por classe
Quanto cada comando gastou em cada componente do perfil e em cada classe de espera, pelo perfil exclusivo do comando (sem o SQL recursivo que ele dispara). Até 10 comandos por lista: mude no topo da página.
Por componente do perfil
db file sequential read espera365,866 s · 35,6% do tempo total · 10 de 16 comandos
Mais 6 comandos gastaram nele; aumente o número no topo da página para ver.
CPU: EXEC dbcalls cpu170,264 s · 16,5% do tempo total · 10 de 168 comandos
Mais 158 comandos gastaram nele; aumente o número no topo da página para ver.
tempo não contabilizado dentro das chamadas não contabilizado149,483 s · 14,5% do tempo total · 10 de 170 comandos
Mais 160 comandos gastaram nele; aumente o número no topo da página para ver.
direct path read espera82,616 s · 8,0% do tempo total · 1 comando
| # | Tempo (s) | % do total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 5 | 82,615851 | 100,0 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… |
direct path read temp espera60,291 s · 5,9% do tempo total · 2 comandos
| # | Tempo (s) | % do total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 5 | 55,084930 | 91,4 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… | |
| 7 | 5,206170 | 8,6 | c1bqf8upvjwpt | DELETE FROM TAB_0049 A WHERE A.COL_0086 = :B1 |
CPU: FETCH dbcalls cpu17,535 s · 1,7% do tempo total · 10 de 108 comandos
Mais 98 comandos gastaram nele; aumente o número no topo da página para ver.
db file scattered read espera12,718 s · 1,2% do tempo total · 1 comando
| # | Tempo (s) | % do total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 5 | 12,718013 | 100,0 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… |
direct path write temp espera7,639 s · 0,7% do tempo total · 3 comandos
| # | Tempo (s) | % do total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 5 | 7,137210 | 93,4 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… | |
| 7 | 0,501037 | 6,6 | c1bqf8upvjwpt | DELETE FROM TAB_0049 A WHERE A.COL_0086 = :B1 | |
| 16 | 0,000415 | 0,0 | fdnsdx5rvuzbr | SELECT DISTINCT a.COL_0056, a.COL_0057 FROM TAB_0013 a, (select distinct COL_0032,COL_0039 from TAB_0014) b WHERE b.COL_0032 = a.COL_0032 and b.COL_0039 = nvl(t… |
CPU: PARSE dbcalls cpu0,111 s · 0,0% do tempo total · 10 de 169 comandos
Mais 159 comandos gastaram nele; aumente o número no topo da página para ver.
CPU: CLOSE dbcalls cpu0,054 s · 0,0% do tempo total · 10 de 142 comandos
Mais 132 comandos gastaram nele; aumente o número no topo da página para ver.
Por classe de espera
User I/O529,130 s · 51,4% do tempo total · 10 de 17 comandos
Mais 7 comandos gastaram nele; aumente o número no topo da página para ver.
Não contabilizado237,161 s · 23,0% do tempo total · 10 de 170 comandos
Mais 160 comandos gastaram nele; aumente o número no topo da página para ver.
CPU187,964 s · 18,3% do tempo total · 10 de 171 comandos
Mais 161 comandos gastaram nele; aumente o número no topo da página para ver.
Configuration0,086 s · 0,0% do tempo total · 1 comando
| # | Tempo (s) | % do total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 7 | 0,085790 | 100,0 | c1bqf8upvjwpt | DELETE FROM TAB_0049 A WHERE A.COL_0086 = :B1 |
Não classificado0,010 s · 0,0% do tempo total · 1 comando
| # | Tempo (s) | % do total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 16 | 0,010135 | 100,0 | fdnsdx5rvuzbr | SELECT DISTINCT a.COL_0056, a.COL_0057 FROM TAB_0013 a, (select distinct COL_0032,COL_0039 from TAB_0014) b WHERE b.COL_0032 = a.COL_0032 and b.COL_0039 = nvl(t… |
Application0,002 s · 0,0% do tempo total · 1 comando
| # | Tempo (s) | % do total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 5 | 0,002383 | 100,0 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… |
Other0,000 s · 0,0% do tempo total · 1 comando
| # | Tempo (s) | % do total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 5 | 0,000356 | 100,0 | d7sadnr6zu6k9 | WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_02… |
Comandos SQL por contribuição
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.
Mostrando 10 de 171 comandos; aumente o número no topo da página para ver mais.
Tempo não atribuído a nenhum comando: 1.017,699 s.
Tipos de chamada
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| EXEC | 102.658 | 171,056 | 813,576 | 3.425.412 | 7.301.505 | 13.488.833 | 3.008.856 | 76 |
| FETCH | 99.915 | 17,539 | 53,717 | 169.791 | 378.379 | 69 | 154.543 | 0 |
| PARSE | 394 | 0,126 | 0,219 | 0 | 160 | 1 | 0 | 162 |
| CLOSE | 102.656 | 0,054 | 0,106 | 0 | 0 | 0 | 0 | 0 |
Chamadas de nível 0 mais longas
Distribuição de latência
Faixas em potências de 10, por evento de espera e por tipo de chamada. Mostra se o tempo vem de muitas ocorrências rápidas ou de poucas lentas.
db file sequential read323.268 ocorrências · 365,866 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 271.109 | 83,9 | 99,937684 | 27,3 | |
| 1 ms ≤ e < 10 ms | 47.699 | 14,8 | 186,766571 | 51,0 | |
| 10 ms ≤ e < 100 ms | 4.450 | 1,4 | 77,582060 | 21,2 | |
| 100 ms ≤ e < 1 s | 10 | 0,0 | 1,579555 | 0,4 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
direct path read5.357 ocorrências · 82,616 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 6 | 0,1 | 0,004172 | 0,0 | |
| 1 ms ≤ e < 10 ms | 1.424 | 26,6 | 9,217950 | 11,2 | |
| 10 ms ≤ e < 100 ms | 3.915 | 73,1 | 71,696158 | 86,8 | |
| 100 ms ≤ e < 1 s | 12 | 0,2 | 1,697571 | 2,1 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
SQL*Net message from client68 ocorrências · 74,696 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 ms ≤ e < 10 ms | 49 | 72,1 | 0,132624 | 0,2 | |
| 10 ms ≤ e < 100 ms | 9 | 13,2 | 0,316103 | 0,4 | |
| 100 ms ≤ e < 1 s | 3 | 4,4 | 0,867162 | 1,2 | |
| 1 s ≤ e < 10 s | 4 | 5,9 | 11,713019 | 15,7 | |
| 10 s ≤ e < 100 s | 3 | 4,4 | 61,667130 | 82,6 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
direct path read temp8.825 ocorrências · 60,291 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 1 | 0,0 | 0,000008 | 0,0 | |
| 10 µs ≤ e < 100 µs | 18 | 0,2 | 0,000907 | 0,0 | |
| 100 µs ≤ e < 1 ms | 1.174 | 13,3 | 0,773395 | 1,3 | |
| 1 ms ≤ e < 10 ms | 6.027 | 68,3 | 34,600284 | 57,4 | |
| 10 ms ≤ e < 100 ms | 1.605 | 18,2 | 24,916506 | 41,3 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
db file scattered read1.019 ocorrências · 12,718 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 ms ≤ e < 10 ms | 304 | 29,8 | 2,321958 | 18,3 | |
| 10 ms ≤ e < 100 ms | 715 | 70,2 | 10,396055 | 81,7 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
direct path write temp2.950 ocorrências · 7,639 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 2 | 0,1 | 0,000015 | 0,0 | |
| 10 µs ≤ e < 100 µs | 39 | 1,3 | 0,002212 | 0,0 | |
| 100 µs ≤ e < 1 ms | 572 | 19,4 | 0,328922 | 4,3 | |
| 1 ms ≤ e < 10 ms | 2.238 | 75,9 | 5,250195 | 68,7 | |
| 10 ms ≤ e < 100 ms | 98 | 3,3 | 1,954980 | 25,6 | |
| 100 ms ≤ e < 1 s | 1 | 0,0 | 0,102338 | 1,3 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
log file switch completion2 ocorrências · 0,053 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 ms ≤ e < 10 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 ms ≤ e < 100 ms | 2 | 100,0 | 0,052671 | 100,0 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
log file switch (private strand flush incomplete)2 ocorrências · 0,033 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 ms ≤ e < 10 ms | 1 | 50,0 | 0,008202 | 24,8 | |
| 10 ms ≤ e < 100 ms | 1 | 50,0 | 0,024917 | 75,2 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
CSS initialization1 ocorrências · 0,009 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 ms ≤ e < 10 ms | 1 | 100,0 | 0,008608 | 100,0 | |
| 10 ms ≤ e < 100 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
enq: RO - fast object reuse3 ocorrências · 0,002 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 2 | 66,7 | 0,000715 | 30,0 | |
| 1 ms ≤ e < 10 ms | 1 | 33,3 | 0,001668 | 70,0 | |
| 10 ms ≤ e < 100 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
CSS operation: action1 ocorrências · 0,001 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 ms ≤ e < 10 ms | 1 | 100,0 | 0,001118 | 100,0 | |
| 10 ms ≤ e < 100 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
Disk file operations I/O36 ocorrências · 0,001 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 12 | 33,3 | 0,000068 | 6,8 | |
| 10 µs ≤ e < 100 µs | 24 | 66,7 | 0,000925 | 93,2 | |
| 100 µs ≤ e < 1 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 ms ≤ e < 10 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 ms ≤ e < 100 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
CSS operation: query6 ocorrências · 0,000 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 3 | 50,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 1 | 16,7 | 0,000002 | 0,5 | |
| 10 µs ≤ e < 100 µs | 1 | 16,7 | 0,000012 | 2,9 | |
| 100 µs ≤ e < 1 ms | 1 | 16,7 | 0,000395 | 96,6 | |
| 1 ms ≤ e < 10 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 ms ≤ e < 100 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
reliable message2 ocorrências · 0,000 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 2 | 100,0 | 0,000356 | 100,0 | |
| 1 ms ≤ e < 10 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 ms ≤ e < 100 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
SQL*Net message to client68 ocorrências · 0,000 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 5 | 7,4 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 63 | 92,6 | 0,000159 | 100,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 ms ≤ e < 10 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 ms ≤ e < 100 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
EXEC (duração e da chamada)102.658 ocorrências · 813,576 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 24 | 0,0 | 0,000155 | 0,0 | |
| 10 µs ≤ e < 100 µs | 39.373 | 38,4 | 3,029008 | 0,4 | |
| 100 µs ≤ e < 1 ms | 62.499 | 60,9 | 13,702319 | 1,7 | |
| 1 ms ≤ e < 10 ms | 692 | 0,7 | 1,310447 | 0,2 | |
| 10 ms ≤ e < 100 ms | 61 | 0,1 | 2,999353 | 0,4 | |
| 100 ms ≤ e < 1 s | 7 | 0,0 | 0,970104 | 0,1 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 2 | 0,0 | 791,564139 | 97,3 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
FETCH (duração e da chamada)99.915 ocorrências · 53,717 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 64.126 | 64,2 | 0,466098 | 0,9 | |
| 10 µs ≤ e < 100 µs | 34.972 | 35,0 | 0,846218 | 1,6 | |
| 100 µs ≤ e < 1 ms | 673 | 0,7 | 0,139546 | 0,3 | |
| 1 ms ≤ e < 10 ms | 28 | 0,0 | 0,183620 | 0,3 | |
| 10 ms ≤ e < 100 ms | 115 | 0,1 | 1,528285 | 2,8 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 1 | 0,0 | 50,553703 | 94,1 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
PARSE (duração e da chamada)394 ocorrências · 0,219 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 120 | 30,5 | 0,000917 | 0,4 | |
| 10 µs ≤ e < 100 µs | 101 | 25,6 | 0,002569 | 1,2 | |
| 100 µs ≤ e < 1 ms | 132 | 33,5 | 0,046701 | 21,3 | |
| 1 ms ≤ e < 10 ms | 38 | 9,6 | 0,093253 | 42,5 | |
| 10 ms ≤ e < 100 ms | 3 | 0,8 | 0,075860 | 34,6 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
CLOSE (duração e da chamada)102.656 ocorrências · 0,106 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 17.509 | 17,1 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 84.942 | 82,7 | 0,098508 | 92,8 | |
| 10 µs ≤ e < 100 µs | 192 | 0,2 | 0,004721 | 4,4 | |
| 100 µs ≤ e < 1 ms | 13 | 0,0 | 0,002925 | 2,8 | |
| 1 ms ≤ e < 10 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 ms ≤ e < 100 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 s ≤ e < 100 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 s ≤ e < 1.000 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1.000 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
Leituras
leituras (faixas de disco)338.469 ocorrências · 521,491 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 5 ms | 308.620 | 91,2 | 199,904697 | 38,3 | |
| 5 ms ≤ e < 10 ms | 19.142 | 5,7 | 133,718232 | 25,6 | |
| 10 ms ≤ e < 15 ms | 5.783 | 1,7 | 70,413303 | 13,5 | |
| 15 ms ≤ e < 20 ms | 2.604 | 0,8 | 44,612616 | 8,6 | |
| 20 ms ≤ e < 25 ms | 1.048 | 0,3 | 23,258307 | 4,5 | |
| 25 ms ≤ e < 50 ms | 1.062 | 0,3 | 34,020285 | 6,5 | |
| 50 ms ≤ e < 100 ms | 188 | 0,1 | 12,286268 | 2,4 | |
| 100 ms ≤ e < 1 s | 22 | 0,0 | 3,277126 | 0,6 | |
| 1 s ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
leituras (faixas de SSD)338.469 ocorrências · 521,491 s
| Faixa da duração | Ocorrências | % ocorr. | Duração (s) | % duração | |
|---|---|---|---|---|---|
| 0 ≤ e < 15 µs | 3 | 0,0 | 0,000031 | 0,0 | |
| 15 µs ≤ e < 25 µs | 1 | 0,0 | 0,000023 | 0,0 | |
| 25 µs ≤ e < 50 µs | 6 | 0,0 | 0,000198 | 0,0 | |
| 50 µs ≤ e < 100 µs | 9 | 0,0 | 0,000663 | 0,0 | |
| 100 µs ≤ e < 500 µs | 228.961 | 67,6 | 71,674266 | 13,7 | |
| 500 µs ≤ e < 1 ms | 43.328 | 12,8 | 29,040985 | 5,6 | |
| 1 ms ≤ e < 10 ms | 55.454 | 16,4 | 232,906763 | 44,7 | |
| 10 ms ≤ e < ∞ | 10.707 | 3,2 | 187,867905 | 36,0 |
Primeira leitura e releitura do mesmo bloco
Releitura frequente do mesmo bloco indica cache pequeno ou acesso repetido ao mesmo dado.
| Evento | Blocos distintos | 1ª leitura | 1ª leitura (s) | Releituras | Releituras (s) |
|---|---|---|---|---|---|
| db file sequential read | 323.225 | 323.225 | 365,662 | 43 | 0,204 |
| db file scattered read | 1.019 | 1.019 | 12,718 | 0 | 0,000 |
Objetos com mais tempo de espera
Pelo obj# das esperas. O nome vem das linhas STAT do próprio trace, quando existem.
| obj# | Nome | Espera (s) | Ocorrências | Eventos principais |
|---|---|---|---|---|
| 192892 | 404,790 | 290.860 | db file sequential read · direct path read · direct path read temp | |
| 202849 | 66,670 | 33.428 | db file sequential read | |
| 192893 | 15,837 | 9.559 | db file sequential read · direct path read · direct path write temp | |
| 202854 | 3,822 | 873 | db file sequential read | |
| 201999 | 0,696 | 419 | direct path read temp · db file sequential read · Disk file operations I/O | |
| 201287 | 0,628 | 475 | direct path read temp · db file sequential read · Disk file operations I/O | |
| 192746 | 0,533 | 192 | db file sequential read · direct path read temp · Disk file operations I/O | |
| 201286 | 0,328 | 322 | direct path read temp · db file sequential read | |
| 202867 | 0,305 | 47 | db file sequential read · Disk file operations I/O | |
| 202865 | 0,143 | 36 | db file sequential read · Disk file operations I/O | |
| 201288 | IDX_0034 | 0,064 | 13 | db file sequential read |
| 192133 | TAB_0065 | 0,037 | 6 | direct path read temp · db file sequential read |
| 201349 | IDX_0035 | 0,025 | 4 | db file sequential read |
| 191473 | 0,012 | 5 | db file sequential read · Disk file operations I/O | |
| 190484 | TAB_0035 | 0,009 | 2 | db file sequential read |
| 190757 | TAB_0063 | 0,009 | 1 | db file sequential read |
| 199392 | IDX_0060 | 0,008 | 1 | db file sequential read |
| 202853 | 0,006 | 1 | db file sequential read | |
| 190981 | TAB_0095 | 0,006 | 1 | db file sequential read |
| 191816 | 0,006 | 3 | db file sequential read · Disk file operations I/O | |
| 202751 | IDX_0036 | 0,005 | 1 | db file sequential read |
| 201296 | 0,005 | 1 | db file sequential read | |
| 201299 | 0,004 | 1 | db file sequential read | |
| 201293 | 0,004 | 1 | db file sequential read | |
| 198940 | IDX_0045 | 0,004 | 1 | db file sequential read |
| 191815 | 0,003 | 2 | db file sequential read · Disk file operations I/O | |
| 201315 | 0,002 | 1 | db file sequential read |
Textos compartilháveis
Comandos que só diferem em literais. Com bind variables, um único cursor serviria a todos e os PARSE com hard parse cairiam.
| Textos | PARSE | PARSE (s) | Total (s) | SQL IDs | Exemplo |
|---|---|---|---|---|---|
| 4 | 4 | 0,003 | 0,005 | ocultos pela máscara | #48 CREATE GLOBAL TEMPORARY T |
| 8 | 8 | 0,003 | 0,004 | ocultos pela máscara | #55 INSERT INTO TAB_0021 ( COL_0070 , … :n , :s , :s , :s , :s , :s ) |
| 4 | 4 | 0,002 | 0,004 | ocultos pela máscara | #57 INSERT INTO TAB_0021 ( COL_0070 , … :n , :s , null , :s , :s , :s ) |
| 2 | 2 | 0,001 | 0,001 | ocultos pela máscara | #117 SELECT SEQ_001.NEXTVAL FROM dual |
Leitura de um bloco
db file sequential read
Lê um bloco do disco para o buffer cache: acesso por índice, à tabela via ROWID, a undo ou a cabeçalho de segmento.
- Normal quando
- Acesso por índice a poucos blocos, com média de 0,1 a 1 ms em SSD ou flash e de 5 a 10 ms em disco.
- Preocupa quando
- Muitas leituras: o plano lê blocos demais (índice pouco seletivo, NESTED LOOPS com muitas linhas). Média alta: armazenamento lento ou disputado.
- Onde olhar
- Quantas leituras e quanto dura cada uma: Perfil, linha deste componente: colunas Ocorrências e Média (s)
- Leituras lentas, ou muitas leituras rápidas: Distribuição de latência, tabela deste evento
- Objetos mais lidos: Objetos com mais tempo de espera
- Releitura dos mesmos blocos: Leituras, primeira leitura e releitura do mesmo bloco
- Comandos que mais leram: Principais comandos por componente, grupo deste evento
- Operações do plano que leem blocos demais: detalhe do comando, Plano de execução: operações em destaque
CPU nas chamadas EXEC
CPU: EXEC dbcalls
Tempo de CPU da sessão na execução: DML, abertura do cursor e corpo de blocos PL/SQL. Alto em PL/SQL: lógica pesada ou SQL dentro de laço.
- Normal quando
- É parte do trabalho normal do banco.
- Preocupa quando
- Domina o tempo total: comece pelos comandos que mais gastam CPU e pelas leituras lógicas deles.
- Onde olhar
- CPU por tipo de chamada: Tipos de chamada
- Comandos com mais leituras lógicas: Comandos SQL, colunas LIO e Linhas
- Comandos que mais gastaram CPU nesta chamada: Principais comandos por componente, grupo desta chamada
- Comandos filhos dos blocos PL/SQL: detalhe do comando, SQL recursivo
Tempo não contabilizado dentro das chamadas
tempo não contabilizado dentro das chamadas
Parte da duração da chamada (e=) que não é CPU (c=) nem espera registrada dentro dela.
- Normal quando
- Pequeno. Valor negativo vem da granularidade da medida de CPU, não de problema.
- Preocupa quando
- Soma muito: fila de CPU (mais processos prontos que núcleos), paginação de memória (swap) ou código sem instrumentação de espera.
- Onde olhar
- Chamadas em que o tempo some (duração muito acima de CPU mais esperas): Chamadas de nível 0 mais longas
- Comandos que mais carregam esse tempo: Principais comandos por componente, grupo deste evento
- Carga de CPU e memória livre do servidor no período, fora do relatório
Tempo não contabilizado entre chamadas
tempo não contabilizado entre chamadas
Tempo entre o fim de uma chamada de nível 0 e o início da próxima sem nenhuma espera registrada. É a diferença entre o tempo total e a soma das chamadas e das esperas entre elas.
- Normal quando
- Pequeno: frações de milissegundo por chamada.
- Preocupa quando
- Soma muito: o trace foi ligado ou desligado no meio, o processo ficou fora da CPU (servidor saturado), a aplicação demorou sem a espera de cliente aparecer, ou falta arquivo da coleta.
- Onde olhar
- Período do trace e lacunas grandes de tempo: Resumo, Período
- Em coleta, se todos os arquivos vieram: Coleta, arquivos e sessões
- Chamadas separadas por lacunas: Chamadas de nível 0 mais longas
Leitura direta para a PGA
direct path read
Lê blocos do disco direto para a memória da sessão, sem passar pelo buffer cache: full scan grande em série ou consulta paralela.
- Normal quando
- Leitura completa de tabela grande num processo de lote.
- Preocupa quando
- Aparece em tela de usuário ou dentro de laço: full scan grande repetido, tabela lida inteira para devolver poucas linhas.
- Onde olhar
- Comandos que mais leram: Principais comandos por componente, grupo deste evento
- Operações TABLE ACCESS FULL e quantas vezes executaram: detalhe do comando, Plano de execução: coluna Exec
- Objetos mais lidos: Objetos com mais tempo de espera
Esperando a aplicação
SQL*Net message from client
A sessão terminou a chamada anterior e espera o próximo pedido da aplicação. É tempo da aplicação, da rede e do usuário, não do banco.
- Normal quando
- Aparece entre todas as chamadas. Esperas longas e isoladas são o usuário pensando ou a aplicação ocupada com outra coisa.
- Preocupa quando
- Domina o tempo total com muitas esperas curtas: a aplicação conversa demais com o banco (uma linha por chamada, SQL dentro de laço). Com poucas esperas longas, a demora está na aplicação, e ajuste de SQL não resolve.
- Onde olhar
- Quantas idas e voltas houve e quanto dura cada uma: Perfil, linha deste componente: colunas Ocorrências e Média (s)
- Muitas esperas curtas ou poucas longas: Distribuição de latência, tabela deste evento
- FETCH que trazem poucas linhas cada: Tipos de chamada, linha FETCH: Quantidade e Linhas
- Comandos que mais esperaram a aplicação: Principais comandos por componente, grupo deste evento
Lendo do TEMP
direct path read temp
Lê da tablespace temporária o que uma ordenação, um hash join ou uma tabela temporária gravou lá.
- Normal quando
- Ordenações e junções grandes, em lote.
- Preocupa quando
- A operação devia caber na memória da sessão: PGA pequena para ela, ou volume maior que o necessário (junção errada, ordenação de linhas demais).
- Onde olhar
- Comandos que usaram o TEMP: Principais comandos por componente, grupo deste evento
- Operações SORT e HASH JOIN que gravaram no TEMP: detalhe do comando, Plano de execução: coluna PW
- pga_aggregate_target e pga_aggregate_limit, no banco
CPU nas chamadas FETCH
CPU: FETCH dbcalls
Tempo de CPU da sessão na busca das linhas. Alto: leituras lógicas demais (LIO), em geral um plano que lê muito mais blocos do que as linhas devolvidas pedem.
- Normal quando
- É parte do trabalho normal do banco.
- Preocupa quando
- Domina o tempo total: comece pelos comandos que mais gastam CPU e pelas leituras lógicas deles.
- Onde olhar
- CPU por tipo de chamada: Tipos de chamada
- Comandos com mais leituras lógicas: Comandos SQL, colunas LIO e Linhas
- Comandos que mais gastaram CPU nesta chamada: Principais comandos por componente, grupo desta chamada
- Operações do plano com LIO próprio alto: detalhe do comando, Plano de execução: operações em destaque
Leitura de vários blocos
db file scattered read
Lê vários blocos contíguos de uma vez para o buffer cache: full table scan ou index fast full scan.
- Normal quando
- Full scan de tabela pequena ou média, que cabe no cache.
- Preocupa quando
- Full scan de tabela grande para devolver poucas linhas: falta índice, ou o índice não é usado.
- Onde olhar
- Comandos que mais leram: Principais comandos por componente, grupo deste evento
- Operações TABLE ACCESS FULL e INDEX FAST FULL SCAN: detalhe do comando, Plano de execução: operações em destaque
- Objetos mais lidos: Objetos com mais tempo de espera
Gravando no TEMP
direct path write temp
Grava no TEMP a parte de uma ordenação ou de um hash join que não coube na PGA.
- Normal quando
- Operações grandes, em lote.
- Preocupa quando
- O mesmo que a leitura do TEMP: PGA pequena ou volume alto.
- Onde olhar
- Comandos que usaram o TEMP: Principais comandos por componente, grupo deste evento
- Operações SORT e HASH JOIN que gravaram no TEMP: detalhe do comando, Plano de execução: coluna PW
CPU nas chamadas PARSE
CPU: PARSE dbcalls
Tempo de CPU da sessão na análise do SQL (parse). Alto: hard parse por SQL sem bind, ou parse repetido do mesmo cursor (abrir e fechar a cada execução).
- Normal quando
- É parte do trabalho normal do banco.
- Preocupa quando
- Domina o tempo total: comece pelos comandos que mais gastam CPU e pelas leituras lógicas deles.
- Onde olhar
- Hard parses: Tipos de chamada, linha PARSE: Quantidade e Misses
- Comandos que só mudam os literais: Textos compartilháveis
- PARSE a cada EXEC: detalhe do comando, Chamadas: PARSE em relação a EXEC
- Comandos que mais gastaram CPU nesta chamada: Principais comandos por componente, grupo desta chamada
CPU nas chamadas CLOSE
CPU: CLOSE dbcalls
Tempo de CPU da sessão no fechamento do cursor. Quase sempre pequeno.
- Normal quando
- É parte do trabalho normal do banco.
- Preocupa quando
- Domina o tempo total: comece pelos comandos que mais gastam CPU e pelas leituras lógicas deles.
- Onde olhar
- CPU por tipo de chamada: Tipos de chamada
- Comandos com mais leituras lógicas: Comandos SQL, colunas LIO e Linhas
- Comandos que mais gastaram CPU nesta chamada: Principais comandos por componente, grupo desta chamada
- Comandos filhos dos blocos PL/SQL: detalhe do comando, SQL recursivo
Troca de redo log
log file switch completion
A sessão espera a troca do arquivo de redo log terminar.
- Normal quando
- Raro: uma espera curta a cada troca.
- Preocupa quando
- Redo logs pequenos para o volume gerado: trocas frequentes.
- Onde olhar
- Quantas trocas e quanto dura cada uma: Perfil, linha deste componente: colunas Ocorrências e Média (s)
Configuration (configuração)
Configuration
Esperas causadas por um limite de configuração: redo log pequeno, buffer cache, ITL, cache de sequência, espaço.
- Normal quando
- Raro.
- Preocupa quando
- O evento aponta o parâmetro ou o objeto a ajustar.
- Onde olhar
- Qual evento, e o que ele pede: Por classe de espera, linha desta classe: coluna Principais componentes
Não classificado
Não classificado
Eventos que o motor não sabe classificar.
- Normal quando
- Soma pouco tempo.
- Preocupa quando
- Soma muito: a classe do evento em v$event_name diz onde ele se encaixa.
- Onde olhar
- Classe do evento: v$event_name.wait_class, no banco
Limpeza de buffers (TRUNCATE ou DROP)
enq: RO - fast object reuse
TRUNCATE ou DROP esperando o banco descartar os blocos do objeto que estão no buffer cache.
- Normal quando
- Soma pouco tempo.
- Preocupa quando
- TRUNCATE dentro de laço, ou buffer cache muito grande para varrer.
- Onde olhar
- Quantas ocorrências: Perfil, linha deste componente: coluna Ocorrências
- Comandos que mais esperaram: Principais comandos por componente, grupo deste evento
Abrindo ou fechando arquivos
Disk file operations I/O
Operações no arquivo (abrir, fechar, consultar tamanho), não leitura de dados.
- Normal quando
- Soma pouco tempo.
- Preocupa quando
- Soma muito: muitos arquivos abertos e fechados, ou sistema de arquivos lento.
- Onde olhar
- Quantas ocorrências e quanto dura cada uma: Perfil, linha deste componente: colunas Ocorrências e Média (s)
Mensagem entre processos
reliable message
A sessão mandou uma mensagem a processos de fundo ou a outras instâncias e espera a confirmação.
- Normal quando
- Soma pouco tempo.
- Preocupa quando
- Soma muito: TRUNCATE, result cache ou mudança de parâmetro em RAC.
- Onde olhar
- Comandos que mais esperaram: Principais comandos por componente, grupo deste evento
Mandando a resposta
SQL*Net message to client
Tempo para entregar um pacote de resposta ao sistema operacional. Não mede a rede até o cliente, só a entrega ao SO.
- Normal quando
- Microssegundos por ocorrência, uma por chamada.
- Preocupa quando
- A média sobe para milissegundos: buffer de rede do servidor cheio ou rede saturada.
- Onde olhar
- Média e máximo por espera: Perfil, linha deste componente: colunas Média (s) e Máx (s)
User I/O (leitura e escrita de dados)
User I/O
Leituras e gravações de dados feitas pela própria sessão.
- Normal quando
- Algum I/O sempre há, com média baixa por leitura.
- Preocupa quando
- Blocos demais (o plano lê mais do que precisa) ou tempo médio alto por leitura (armazenamento lento).
- Onde olhar
- Quais eventos de I/O pesam: Por classe de espera, linha desta classe: coluna Principais componentes
- Leituras lentas, ou muitas leituras rápidas: Distribuição de latência
- Objetos mais lidos: Objetos com mais tempo de espera
- Comandos que mais leram: Principais comandos por classe, grupo desta classe
- Operações do plano que leem blocos demais: detalhe do comando, Plano de execução: operações em destaque
Não contabilizado
Não contabilizado
Tempo que o trace não explica por CPU nem por espera: dentro das chamadas e entre elas.
- Normal quando
- Pequeno.
- Preocupa quando
- Fila de CPU, paginação, lacunas no trace ou arquivo faltando na coleta.
- Onde olhar
- Os dois componentes de tempo não contabilizado e o cartão de cada um: Perfil do tempo de resposta
CPU
CPU
Tempo de CPU das chamadas ao banco (o c= de PARSE, EXEC e FETCH).
- Normal quando
- É o trabalho do banco.
- Preocupa quando
- Soma muito: leituras lógicas demais (plano), parse em excesso ou PL/SQL pesado.
- Onde olhar
- CPU por tipo de chamada: Tipos de chamada
- Comandos com mais leituras lógicas: Comandos SQL, colunas LIO e Linhas
- Comandos que mais gastaram CPU: Principais comandos por classe, grupo desta classe
Idle (ociosa)
Idle
A sessão espera trabalho. Num trace de sessão, quase sempre é SQL*Net message from client: tempo da aplicação, da rede e do usuário.
- Normal quando
- Aparece entre as chamadas.
- Preocupa quando
- Domina o tempo total e o usuário reclama da demora: a lentidão está fora do banco (aplicação, rede, idas e voltas demais).
- Onde olhar
- Quantas idas e voltas houve: Resumo, Chamadas ao banco e Esperas
- FETCH que trazem poucas linhas cada: Tipos de chamada, linha FETCH: Quantidade e Linhas
- Comandos que mais esperaram a aplicação: Principais comandos por classe, grupo desta classe
Application (aplicação)
Application
Esperas causadas pela forma como a aplicação usa o banco: linhas e tabelas bloqueadas por outra sessão, locks da aplicação, erros devolvidos.
- Normal quando
- Soma pouco tempo.
- Preocupa quando
- Sessão parada esperando outra: transações longas, mesma linha atualizada por várias sessões, chave estrangeira sem índice.
- Onde olhar
- Quais eventos pesam: Por classe de espera, linha desta classe: coluna Principais componentes
- Objetos disputados: Objetos com mais tempo de espera
- Comandos que ficaram bloqueados: Principais comandos por classe, grupo desta classe
- Quem segura o lock: v$session.blocking_session, no banco
Other (outros)
Other
Eventos internos sem classe mais específica.
- Normal quando
- Soma pouco tempo.
- Preocupa quando
- Soma muito: o evento é que diz a causa.
- Onde olhar
- Qual evento pesa: Por classe de espera, linha desta classe: coluna Principais componentes
Network (rede)
Network
Mandar e receber dados pelo SQL*Net, com a aplicação ou com outro banco por dblink.
- Normal quando
- Soma pouco tempo.
- Preocupa quando
- Resultados grandes, arraysize baixo ou dblink lento.
- Onde olhar
- Quais eventos da classe pesam (more data, dblink): Por classe de espera, linha desta classe: coluna Principais componentes
- Linhas por FETCH: Tipos de chamada, linha FETCH: Quantidade e Linhas
- Comandos que mais usaram a rede: Principais comandos por classe, grupo desta classe
SQL recursivo (comandos filhos)
SQL recursivo (comandos filhos)
Tempo das chamadas que este comando disparou: SQL dentro de funções e procedures PL/SQL, triggers e consultas ao dicionário.
- Normal quando
- Comando PL/SQL que executa outros SQL.
- Preocupa quando
- Soma muito num SELECT ou DML simples: função PL/SQL chamada por linha, ou trigger pesado.
- Onde olhar
- Quais comandos filhos e quanto custa cada um: detalhe do comando, SQL recursivo
#1 · SELECT
sql_id 4yrf1rq97m3vyhv 2457440126Texto
SELECT *** FROM TAB_0072 WHERE COL_0064 = COL_0075.ROT_0019() AND COL_0205 = :B2 AND COL_0206 = :B1 AND COL_0032 = COL_0089.COL_0090() AND COL_0039 = COL_0089.ROT_0020() AND ROWNUM = ***
- 1 IDX_0062 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 2)
- 2 operação 1 (COUNT STOPKEY) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 4,237905 | 50,1 | 44.591 | |
| não contabilizado | 3,917753 | 46,3 | 133.774 | |
| cpu | 0,284526 | 3,4 | 44.591 | |
| cpu | 0,025129 | 0,3 | 44.591 | |
| recursivo | 0,001080 | 0,0 | ||
| cpu | 0,000321 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000321 | 0,000525 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 44.591 | 4,238573 | 7,884412 | 0 | 12 | 0 | 0 | 1 |
| FETCH | 44.591 | 0,284526 | 0,531993 | 0 | 44.593 | 0 | 44.574 | 0 |
| CLOSE | 44.591 | 0,025129 | 0,049784 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 411144836
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0062 58,3% do tempo · 0,0% das leituras lógicas
- 2 Id 1 · COUNT STOPKEY 41,7% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000005 | 41,7 | 0 | 0,0 | 0 | 0 | 0,000012 | 0 | |||||
| 2 | 1 | 0 | 1 | 0,000007 | 58,3 | 0 | 0,0 | 0 | 0 | 0,000007 | 0 | 1 | 201226 |
Corte em N linhas
COUNT STOPKEY
Para de ler depois de N linhas (ROWNUM <= N ou FETCH FIRST).
- Boa quando
- Corta o trabalho cedo quando as linhas já chegam na ordem certa.
- Ruim quando
- Quando há uma ordenação completa embaixo: tudo é lido antes do corte.
- No plano, olhe
- Linhas das operações de baixo.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#2 · SELECT
sql_id gfhr7c2b942m8hv 2526153320Texto
SELECT *** FROM TAB_0074 WHERE COL_0064 = COL_0075.ROT_0019() AND COL_0412 = :B1 AND COL_0032 = COL_0089.COL_0090() AND COL_0039 = COL_0089.ROT_0020() AND ROWNUM = ***
- 1 IDX_0063 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 2)
- 2 operação 1 (COUNT STOPKEY) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 2,347927 | 49,1 | 44.590 | |
| não contabilizado | 2,080456 | 43,5 | 133.771 | |
| cpu | 0,333243 | 7,0 | 44.590 | |
| cpu | 0,020136 | 0,4 | 44.590 | |
| recursivo | 0,004016 | 0,1 | ||
| cpu | 0,000156 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000156 | 0,000254 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 44.590 | 2,349831 | 4,143737 | 0 | 12 | 0 | 0 | 1 |
| FETCH | 44.590 | 0,333243 | 0,602454 | 0 | 44.593 | 0 | 44.575 | 0 |
| CLOSE | 44.590 | 0,020136 | 0,039489 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2227191942
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX RANGE SCAN IDX_0063 57,1% do tempo · 0,0% das leituras lógicas
Percorre uma faixa larga do índice: confira a seletividade e a ordem das colunas. - 2 Id 1 · COUNT STOPKEY 42,9% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000006 | 42,9 | 0 | 0,0 | 0 | 0 | 0,000014 | 0 | |||||
| 2 | 1 | 0 | 1 | 0,000008 | 57,1 | 0 | 0,0 | 0 | 0 | 0,000008 | 0 | 1 | 201225 |
Corte em N linhas
COUNT STOPKEY
Para de ler depois de N linhas (ROWNUM <= N ou FETCH FIRST).
- Boa quando
- Corta o trabalho cedo quando as linhas já chegam na ordem certa.
- Ruim quando
- Quando há uma ordenação completa embaixo: tudo é lido antes do corte.
- No plano, olhe
- Linhas das operações de baixo.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#3 · SELECT
sql_id c1q763kjacnm1hv 2728809057Texto
SELECT X49.COL_0402, X49.COL_0403, SUM(X49.COL_0226) COL_0226, SUM(X49.COL_0227) COL_0227, X49.COL_0404, X49.COL_0405, X49.COL_0406, X49.COL_0407 FROM TAB_00931 X49, TAB_0026 PKG_0006, TAB_0088 X04 WHERE X49.COL_0032 = :B10 AND X49.COL_0039 = :B9 AND X49.ROT_0013 = PKG_0006.ROT_0013 (+) AND ((COL_0089.COL_0100 = :B8 AND X49.ROT_0013 IS NULL) OR (COL_0089.COL_0100 = PKG_0006.COL_0101) OR (COL_0089.COL_0100 IS NULL)) AND X49.COL_0408 = :B7 AND X49.COL_0409 = :B6 AND X49.COL_0410 = :B5 AND X49.COL_0411 = :B4 AND X04.COL_0244 = :B3 AND X04.COL_0245 = :B2 AND X04.COL_0246 = :B1 AND X49.COL_0274 = X04.COL_0274 GROUP BY X49.COL_0402, X49.COL_0403, X49.COL_0404, X49.COL_0405, X49.COL_0406, X49.COL_0407
- 1 TAB_0093, tabela do índice IDX_0057: operação 7 do plano
- 2 operação 1 (HASH GROUP BY) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 2,229278 | 52,5 | 7.975 | |
| não contabilizado | 1,852437 | 43,6 | 23.926 | |
| cpu | 0,158809 | 3,7 | 7.975 | |
| cpu | 0,005009 | 0,1 | 7.975 | |
| recursivo | 0,001125 | 0,0 | ||
| cpu | 0,000134 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000134 | 0,000214 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 7.975 | 2,229932 | 3,947829 | 0 | 16 | 0 | 0 | 1 |
| FETCH | 7.975 | 0,158809 | 0,288896 | 0 | 7.975 | 0 | 0 | 0 |
| CLOSE | 7.975 | 0,005009 | 0,009853 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1305712285
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 7 · INDEX RANGE SCAN IDX_0057 25,7% do tempo · 100,0% das leituras lógicas
Percorre uma faixa larga do índice: confira a seletividade e a ordem das colunas. - 2 Id 1 · HASH GROUP BY 67,3% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 1 | 0,000068 | 67,3 | 0 | 0,0 | 0 | 0 | 0,000101 | 1 | 1 | |||
| 2 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000033 | 1 | 0 | ||||
| 3 | 0 | 1 | 0,000001 | 1,0 | 0 | 0,0 | 0 | 0 | 0,000033 | 1 | 0 | ||||
| 4 | 0 | 0,000002 | 2,0 | 0 | 0,0 | 0 | 0 | 0,000032 | 1 | ||||||
| 5 | 0 | 1 | 0,000001 | 1,0 | 0 | 0,0 | 0 | 0 | 0,000030 | 1 | 0 | ||||
| 6 | 0 | 1 | 0,000003 | 3,0 | 0 | 0,0 | 0 | 0 | 0,000029 | 1 | 0 | 192404 | |||
| 7 | 1 | 0 | 1 | 0,000026 | 25,7 | 1 | 100,0 | 0 | 0 | 0,000026 | 1 | 0 | 201077 | ||
| 8 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 193177 | |||
| 9 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 202263 | |||
| 10 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 198982 | |||
| 11 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 190770 |
Agrupamento por hash
HASH GROUP BY
Agrupa as linhas para o GROUP BY usando uma tabela hash em memória.
- Boa quando
- Muitas linhas e poucos grupos.
- Ruim quando
- Muitos grupos que não cabem na workarea da PGA: grava no TEMP.
- No plano, olhe
- PW e Tempo próprio (s).
Junção em laço (nested loops)
NESTED LOOPS
Para cada linha do row source externo (outer, driving), executa o row source interno (inner).
- Boa quando
- Poucas linhas no outer e acesso seletivo por índice no inner. Devolve as primeiras linhas rápido (bom para FIRST_ROWS).
- Ruim quando
- Muitas linhas no outer: o inner executa milhares de vezes. Costuma vir de cardinalidade subestimada no outer; um HASH JOIN leria cada lado uma vez só.
- No plano, olhe
- Exec das operações do inner e, no outer, Estimado comparado com Linhas/exec.
Filtro
FILTER
Aplica um predicado às linhas do row source abaixo. Com dois row sources, executa o segundo (subquery não desaninhada) para cada linha do primeiro.
- Boa quando
- Um row source só, ou subquery executada poucas vezes (o FILTER guarda em cache os resultados já calculados).
- Ruim quando
- Subquery executada linha a linha (Exec alto no segundo row source): permitir o unnesting ou reescrever como junção costuma resolver.
- No plano, olhe
- Exec do segundo row source.
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#4 · INSERT
sql_id 5jh16c5vkcn6bhv 1998999755Texto
INSERT /*+ SYS_DL_CURSOR */ INTO TAB_0049 (COL_0417, COL_0086, COL_0107, COL_0109, COL_0418, COL_0044, COL_0105) VALUES (SEQ_007.NEXTVAL, :B1 , :B2 , :B3 , :B4 , :B5 , :B6 )
- 1 operação 1 (LOAD TABLE CONVENTIONAL) não tem objeto próprio no texto
- 2 operação 2 (SEQUENCE SEQ_007) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| recursivo | 1,306169 | 42,9 | ||
| cpu | 0,869352 | 28,5 | 35 | |
| não contabilizado | 0,645050 | 21,2 | 71 | |
| espera | 0,226173 | 7,4 | 63 | |
| cpu | 0,000224 | 0,0 | 1 | |
| cpu | 0,000023 | 0,0 | 35 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000224 | 0,000373 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 35 | 1,618630 | 3,046573 | 63 | 8.693 | 169.667 | 52.500 | 1 |
| CLOSE | 35 | 0,000023 | 0,000045 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 952385929
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · LOAD TABLE CONVENTIONAL 96,4% do tempo · 71,0% das leituras lógicas
- 2 Id 2 · SEQUENCE SEQ_007 3,6% do tempo · 29,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,123849 | 96,4 | 184 | 71,0 | 26 | 0 | 0,128496 | 259 | |||||
| 2 | 2 | 1.500 | 0,004647 | 3,6 | 75 | 29,0 | 0 | 0 | 0,004647 | 75 | 190050 |
Inserção convencional
LOAD TABLE CONVENTIONAL
Insere as linhas na tabela pelo caminho normal do INSERT.
- Boa quando
- Inserções do dia a dia.
- Ruim quando
- Triggers, índices e constraints da tabela pesam aqui; em carga grande, o modo direto (APPEND) grava mais rápido.
- No plano, olhe
- Tempo próprio (s) e as esperas do comando.
Sequence (NEXTVAL)
SEQUENCE
Gera os próximos números de uma sequence.
- Boa quando
- Cache adequado ao volume.
- Ruim quando
- Cache pequeno com muito uso: esperas em enq: SQ e no dicionário.
- No plano, olhe
- As esperas do comando, no perfil dele.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#5 · SELECT
sql_id d7sadnr6zu6k9hv 3455916617Texto
WITH TAB_0082 AS (SELECT DISTINCT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_0265.COL_0270 , COL_0265.COL_0271 , COL_0265.COL_0272 , COL_0265.COL_0273 , COL_0265.COL_0274 , COL_0265.COL_0275 , COL_0265.COL_0068 , COL_0265.COL_0276 , COL_0265.COL_0277 , COL_0265.COL_0278 , COL_0265.COL_0279 , COL_0265.COL_0280 , COL_0265.COL_0281 , COL_0265.COL_0282 , COL_0265.COL_0283 , COL_0265.COL_0284 , COL_0265.COL_0285 , COL_0265.COL_0286 , COL_0265.COL_0287 , COL_0265.COL_0288 , COL_0265.COL_0289 , COL_0265.COL_0290 , COL_0265.COL_0291 , COL_0265.COL_0292 , COL_0265.COL_0293 , COL_0265.COL_0294 , COL_0265.COL_0295 , COL_0265.COL_0296 , COL_0265.COL_0297 , COL_0265.COL_0298 , COL_0265.COL_0299 , COL_0265.COL_0300 , COL_0265.COL_0301 , COL_0265.COL_0302 , COL_0265.COL_0226 , COL_0265.COL_0303 , COL_0265.COL_0304 , COL_0265.COL_0227 , COL_0265.COL_0305 , COL_0265.COL_0306 , COL_0265.COL_0307 , COL_0265.COL_0308 , COL_0265.COL_0309 , COL_0265.COL_0310 , COL_0265.COL_0311 , COL_0265.COL_0312 , COL_0265.COL_0313 , COL_0265.COL_0314 , COL_0265.COL_0315 , COL_0265.COL_0316 , COL_0265.COL_0317 , COL_0265.COL_0318 , COL_0265.COL_0319 , COL_0265.COL_0320 , COL_0265.COL_0321 , COL_0265.COL_0322 , COL_0265.COL_0323 , COL_0265.COL_0324 , COL_0265.COL_0325 , COL_0265.COL_0326 , COL_0265.COL_0327 , COL_0265.COL_0214 , COL_0265.COL_0238 , COL_0265.COL_0328 , COL_0265.COL_0329 , COL_0265.COL_0330 , COL_0265.COL_0162 , COL_0265.COL_0331 , COL_0265.ROT_0018 , PKG_0009.COL_0332 , COL_0265.COL_0333 , COL_0265.COL_0334 , COL_0265.COL_0335 , COL_0265.COL_0336 , COL_0265.COL_0337 , COL_0265.COL_0338 FROM TAB_0083 COL_0265, TAB_0084 PKG_0009, TAB_0026 PKG_0006 WHERE COL_0265.COL_0032 = :B6 AND COL_0265.COL_0039 = :B5 AND COL_0265.ROT_0013 = PKG_0006.ROT_0013 (+) AND ((COL_0089.COL_0100 = :B4 AND COL_0265.ROT_0013 IS NULL) OR (COL_0089.COL_0100 = PKG_0006.COL_0101) OR (COL_0089.COL_0100 IS NULL)) AND COL_0265.COL_0268 < '***' AND ((COL_0265.COL_0321 BETWEEN :B3 AND :B2 ) OR EXISTS (SELECT *** FROM TAB_0085 COL_0339 WHERE COL_0339.COL_0032 = COL_0265.COL_0032 AND COL_0339.COL_0039 = COL_0265.COL_0039 AND COL_0339.COL_0267 = COL_0265.COL_0267 AND COL_0339.COL_0268 = COL_0265.COL_0268 AND COL_0339.COL_0269 = COL_0265.COL_0269 AND COL_0339.COL_0273 = COL_0265.COL_0273 AND COL_0339.COL_0274 = COL_0265.COL_0274 AND COL_0339.COL_0270 = COL_0265.COL_0270 AND COL_0339.COL_0271 = COL_0265.COL_0271 AND COL_0339.COL_0272 = COL_0265.COL_0272 AND COL_0339.COL_0321 BETWEEN :B3 AND :B2 UNION ALL SELECT *** FROM TAB_0086 COL_0340 WHERE COL_0340.COL_0032 = COL_0265.COL_0032 AND COL_0340.COL_0039 = COL_0265.COL_0039 AND COL_0340.COL_0267 = COL_0265.COL_0267 AND COL_0340.COL_0268 = COL_0265.COL_0268 AND COL_0340.COL_0269 = COL_0265.COL_0269 AND COL_0340.COL_0273 = COL_0265.COL_0273 AND COL_0340.COL_0274 = COL_0265.COL_0274 AND COL_0340.COL_0270 = COL_0265.COL_0270 AND COL_0340.COL_0271 = COL_0265.COL_0271 AND COL_0340.COL_0272 = COL_0265.COL_0272 AND COL_0340.COL_0321 BETWEEN :B3 AND :B2 ) ) AND ( :B1 = '***') AND COL_0265.COL_0269 IN ('***', '***') AND COL_0265.ROT_0018 = PKG_0009.ROT_0018 (+) UNION ALL SELECT COL_0265.COL_0266 , COL_0265.COL_0032 , COL_0265.COL_0039 , COL_0265.COL_0267 , COL_0265.COL_0268 , COL_0265.COL_0269 , COL_0265.COL_0270 , COL_0265.COL_0271 , COL_0265.COL_0272 , COL_0265.COL_0273 , COL_0265.COL_0274 , COL_0265.COL_0275 , COL_0265.COL_0068 , COL_0265.COL_0276 , COL_0265.COL_0277 , COL_0265.COL_0278 , COL_0265.COL_0279 , COL_0265.COL_0280 , COL_0265.COL_0281 , COL_0265.COL_0282 , COL_0265.COL_0283 , COL_0265.COL_0284 , COL_0265.COL_0285 , COL_0265.COL_0286 , COL_0265.COL_0287 , COL_0265.COL_0288 , COL_0265.COL_0289 , COL_0265.COL_0290 , COL_0265.COL_0291 , COL_0265.COL_0292 , COL_0265.COL_0293 , COL_0265.COL_0294 , COL_0265.COL_0295 , COL_0265.COL_0296 , COL_0265.COL_0297 , COL_0265.COL_0298 , COL_0265.COL_0299 , COL_0265.COL_0300 , COL_0265.COL_0301 , COL_0265.COL_0302 , COL_0265.COL_0226 , COL_0265.COL_0303 , COL_0265.COL_0304 , COL_0265.COL_0227 , COL_0265.COL_0305 , COL_0265.COL_0306 , COL_0265.COL_0307 , COL_0265.COL_0308 , COL_0265.COL_0309 , COL_0265.COL_0310 , COL_0265.COL_0311 , COL_0265.COL_0312 , COL_0265.COL_0313 , COL_0265.COL_0314 , COL_0265.COL_0315 , COL_0265.COL_0316 , COL_0265.COL_0317 , COL_0265.COL_0318 , COL_0265.COL_0319 , COL_0265.COL_0320 , COL_0265.COL_0321 , COL_0265.COL_0322 , COL_0265.COL_0323 , COL_0265.COL_0324 , COL_0265.COL_0325 , COL_0265.COL_0326 , COL_0265.COL_0327 , COL_0265.COL_0214 , COL_0265.COL_0238 , COL_0265.COL_0328 , COL_0265.COL_0329 , COL_0265.COL_0330 , COL_0265.COL_0162 , COL_0265.COL_0331 , COL_0265.ROT_0018 , PKG_0009.COL_0332 , COL_0265.COL_0333 , COL_0265.COL_0334 , COL_0265.COL_0335 , COL_0265.COL_0336 , COL_0265.COL_0337 , COL_0265.COL_0338 FROM TAB_0083 COL_0265, TAB_0084 PKG_0009, TAB_0026 PKG_0006 WHERE COL_0265.COL_0032 = :B6 AND COL_0265.COL_0039 = :B5 AND COL_0265.ROT_0013 = PKG_0006.ROT_0013 (+) AND ((COL_0089.COL_0100 = :B4 AND COL_0265.ROT_0013 IS NULL) OR (COL_0089.COL_0100 = PKG_0006.COL_0101) OR (COL_0089.COL_0100 IS NULL)) AND COL_0265.COL_0268 = '***' AND COL_0265.COL_0267 BETWEEN :B3 AND :B2 AND COL_0265.COL_0269 IN ('***', '***') AND COL_0265.ROT_0018 = PKG_0009.ROT_0018 (+) ), TAB_0087 AS (SELECT UNIQUE '***' COL_0341, COL_0342.COL_0266 COL_0266, COL_0342.COL_0032 COL_0032, COL_0342.COL_0039 COL_0039, COL_0342.COL_0267 COL_0267, COL_0342.COL_0268 COL_0268, COL_0342.COL_0269 COL_0269, COL_0342.COL_0273 COL_0273, COL_0342.COL_0274 COL_0274, COL_0342.COL_0270 COL_0270, COL_0342.COL_0271 COL_0271, COL_0342.COL_0272 COL_0272, *** COL_0343, COL_0344.COL_0244 COL_0244, COL_0344.COL_0245 COL_0245, COL_0344.COL_0246 COL_0246, COL_0342.COL_0275 COL_0275, COL_0342.COL_0068 COL_0068, COL_0342.COL_0276 COL_0276, COL_0342.ROT_0018 ROT_0018, COL_0342.COL_0277 COL_0277, COL_0342.COL_0278 COL_0278, TAB_0087.COL_0328 COL_0328, COL_0342.COL_0279 COL_0279, TAB_0087.COL_0345 COL_0345, COL_0342.COL_0280 COL_0280, TAB_0087.COL_0281 COL_0281, TAB_0087.COL_0346 COL_0346, COL_0342.COL_0283 COL_0283, COL_0342.COL_0284 COL_0284, COL_0342.COL_0285 COL_0285, COL_0342.COL_0286 COL_0286, TAB_0087.COL_0287 COL_0287, TAB_0087.COL_0288 COL_0288, TAB_0087.COL_0289 COL_0289, TAB_0087.COL_0290 COL_0290, TAB_0087.COL_0291 COL_0291, TAB_0087.COL_0292 COL_0292, TAB_0087.COL_0329 COL_0329, TAB_0087.COL_0330 COL_0330, TAB_0087.COL_0293 COL_0293, TAB_0087.COL_0294 COL_0294, TAB_0087.COL_0295 COL_0295, TAB_0087.COL_0296 COL_0296, TAB_0087.COL_0347 COL_0347, TAB_0087.COL_0297 COL_0297, TAB_0087.COL_0298 COL_0298, TAB_0087.COL_0299 COL_0299, COL_0342.COL_0300 COL_0300, COL_0342.COL_0301 COL_0301, TAB_0087.COL_0302 COL_0302, TAB_0087.COL_0226 COL_0226, TAB_0087.COL_0303 COL_0303, TAB_0087.COL_0304 COL_0304, TAB_0087.COL_0227 COL_0227, TAB_0087.COL_0305 COL_0305, *** COL_0348, *** COL_0349, *** COL_0350, *** COL_0351, *** COL_0352, *** COL_0353, TAB_0087.COL_0354 COL_0354, PKG_0010.COL_0233 COL_0233, PKG_0010.COL_0209 COL_0209, PKG_0010.COL_0210 COL_0210, PKG_0010.COL_0218 COL_0218, NULL COL_0355, TAB_0087.COL_0356 COL_0356, TAB_0087.COL_0357 COL_0357, TAB_0087.COL_0358 COL_0358, TAB_0087.COL_0231 COL_0359, PKG_0010.COL_0231 COL_0360, TAB_0087.COL_0238 COL_0238, COL_0344.COL_0361 COL_0361, TAB_0087.COL_0362 COL_0362, TAB_0087.COL_0363 COL_0363, TAB_0087.COL_0364 COL_0364, TAB_0087.COL_0365 COL_0365, TAB_0087.COL_0162 COL_0162, COL_0342.COL_0306 COL_0366, COL_0342.COL_0307 COL_0367, COL_0342.COL_0308 COL_0368, TAB_0087.COL_0309 COL_0309, TAB_0087.COL_0310 COL_0310, TAB_0087.COL_0311 COL_0311, TAB_0087.COL_0312 COL_0312, COL_0342.COL_0313 COL_0313, COL_0342.COL_0314 COL_0314, COL_0342.COL_0315 COL_0315, TAB_0087.COL_0369 COL_0369, LPAD(TAB_0087.COL_0370, ***, '***') COL_0370, NULL COL_0371, TAB_0087.COL_0372 COL_0372, TAB_0087.COL_0373 COL_0373, LPAD(TAB_0087.COL_0374, ***, '***') COL_0374, NULL COL_0375, TAB_0087.COL_0376 COL_0376, TAB_0087.COL_0377 COL_0377, TAB_0087.COL_0318 COL_0318, COL_0342.COL_0331 COL_0378, COL_0342.COL_0319 COL_0319, COL_0344.COL_0201 COL_0379, COL_0342.COL_0162 COL_0380, TAB_0087.COL_0320 COL_0320, TAB_0087.COL_0321 COL_0321, COL_0342.COL_0320 COL_0381, COL_0342.COL_0321 COL_0382, '***' COL_0383, TAB_0087.COL_0384 COL_0384, TAB_0087.COL_0385 COL_0385, COL_0344.COL_0386 COL_0387, COL_0342.COL_0323 COL_0323, '***' COL_0388, COL_0344.COL_0389 COL_0390, COL_0342.COL_0324 COL_0324, *** COL_0325, *** COL_0326, COL_0342.COL_0327 COL_0327, TAB_0087.COL_0214 COL_0214, TAB_0087.COL_0333 COL_0333, TAB_0087.COL_0334 COL_0334, TAB_0087.COL_0335 COL_0335, COL_0342.COL_0336, COL_0344.COL_0391, COL_0344.COL_0033, COL_0342.COL_0337, NULL COL_0338, CASE WHEN TAB_0087.COL_0231 IS NOT NULL THEN (SELECT COL_0207 FROM TAB_0062 WHERE COL_0231 = TAB_0087.COL_0231) ELSE (SELECT COL_0207 FROM TAB_0062 WHERE COL_0231 = PKG_0010.COL_0231) END COL_0207 FROM TAB_0082 COL_0342, TAB_0085 TAB_0087, TAB_0088 COL_0344, TAB_0061 PKG_0010, TAB_0084 PKG_0009 WHERE TAB_0087.COL_0032 = COL_0342.COL_0032 AND TAB_0087.COL_0039 = COL_0342.COL_0039 AND TAB_0087.COL_0267 = COL_0342.COL_0267 AND TAB_0087.COL_0268 = COL_0342.COL_0268 AND TAB_0087.COL_0269 = COL_0342.COL_0269 AND TAB_0087.COL_0273 = COL_0342.COL_0273 AND TAB_0087.COL_0274 = COL_0342.COL_0274 AND TAB_0087.COL_0270 = COL_0342.COL_0270 AND TAB_0087.COL_0271 = COL_0342.COL_0271 AND TAB_0087.COL_0272 = COL_0342.COL_0272 AND COL_0342.COL_0274 = COL_0344.COL_0274 AND TAB_0087.COL_0233 = PKG_0010.COL_0233(+) AND COL_0342.ROT_0018 = PKG_0009.ROT_0018(+) UNION ALL SELECT UNIQUE '***' COL_0341, COL_0342.COL_0266 COL_0266, COL_0342.COL_0032 COL_0032, COL_0342.COL_0039 COL_0039, COL_0342.COL_0267 COL_0267, COL_0342.COL_0268 COL_0268, COL_0342.COL_0269 COL_0269, COL_0342.COL_0273 COL_0273, COL_0342.COL_0274 COL_0274, COL_0342.COL_0270 COL_0270, COL_0342.COL_0271 COL_0271, COL_0342.COL_0272 COL_0272, COL_0392.COL_0393 COL_0343, COL_0344.COL_0244 COL_0244, COL_0344.COL_0245 COL_0245, COL_0344.COL_0246 COL_0246, COL_0342.COL_0275 COL_0275, COL_0342.COL_0068 COL_0068, COL_0342.COL_0276 COL_0276, COL_0342.ROT_0018 ROT_0018, COL_0342.COL_0277 COL_0277, COL_0342.COL_0278 COL_0278, TAB_0087.COL_0328 COL_0328, *** COL_0279, *** COL_0345, COL_0342.COL_0280 COL_0280, *** COL_0281, *** COL_0346, COL_0342.COL_0283 COL_0283, *** COL_0284, *** COL_0285, *** COL_0286, *** COL_0287, *** COL_0288, *** COL_0289, *** COL_0290, *** COL_0291, *** COL_0292, TAB_0087.COL_0329 COL_0329, TAB_0087.COL_0330 COL_0330, *** COL_0293, *** COL_0294, *** COL_0295, TAB_0087.COL_0296 COL_0296, TAB_0087.COL_0347 COL_0347, *** COL_0297, *** COL_0298, *** COL_0299, *** COL_0300, *** COL_0301, TAB_0087.COL_0309 COL_0302, TAB_0087.COL_0310 COL_0226, TAB_0087.COL_0333 COL_0303, TAB_0087.COL_0311 COL_0304, TAB_0087.COL_0312 COL_0227, TAB_0087.COL_0334 COL_0305, *** COL_0348, *** COL_0349, *** COL_0350, *** COL_0351, *** COL_0352, *** COL_0353, COL_0392.COL_0393 + DENSE_RANK () OVER (PARTITION BY COL_0342.COL_0266 ORDER BY TAB_0087.COL_0354) COL_0354, PKG_0010.COL_0233 COL_0233, PKG_0010.COL_0209 COL_0209, PKG_0010.COL_0210 COL_0210, PKG_0010.COL_0218 COL_0218, NULL COL_0355, TAB_0087.COL_0356 COL_0356, TAB_0087.COL_0357 COL_0357, TAB_0087.COL_0358 COL_0358, TAB_0087.COL_0231 COL_0359, PKG_0010.COL_0231 COL_0360, TAB_0087.COL_0238 COL_0238, COL_0344.COL_0361 COL_0361, TAB_0087.COL_0362 COL_0362, TAB_0087.COL_0363 COL_0363, TAB_0087.COL_0364 COL_0364, TAB_0087.COL_0365 COL_0365, TAB_0087.COL_0162 COL_0162, COL_0342.COL_0306 COL_0366, COL_0342.COL_0307 COL_0367, *** COL_0368, *** COL_0309, *** COL_0310, *** COL_0311, *** COL_0312, COL_0342.COL_0313 COL_0313, COL_0342.COL_0314 COL_0314, COL_0342.COL_0315 COL_0315, TAB_0087.COL_0369 COL_0369, LPAD(TAB_0087.COL_0370 , ***, '***') COL_0370, LPAD(TAB_0087.COL_0394 , ***, '***') COL_0371, *** COL_0372, *** COL_0373, LPAD(TAB_0087.COL_0374, ***, '***') COL_0374, LPAD(TAB_0087.COL_0395, ***, '***') COL_0375, *** COL_0376, *** COL_0377, *** COL_0318, COL_0342.COL_0331 COL_0378, COL_0342.COL_0319 COL_0319, COL_0344.COL_0201 COL_0379, COL_0342.COL_0162 COL_0380, TAB_0087.COL_0320 COL_0320, TAB_0087.COL_0321 COL_0321, COL_0342.COL_0320 COL_0381, COL_0342.COL_0321 COL_0382, '***' COL_0383, TAB_0087.COL_0384 COL_0384, TAB_0087.COL_0385 COL_0385, COL_0344.COL_0386 COL_0387, COL_0342.COL_0323 COL_0323, '***' COL_0388, COL_0344.COL_0389 COL_0390, COL_0342.COL_0324 COL_0324, *** COL_0325, *** COL_0326, COL_0342.COL_0327 COL_0327, TAB_0087.COL_0214 COL_0214, *** COL_0333, *** COL_0334, TAB_0087.COL_0335 COL_0335, COL_0342.COL_0336, COL_0344.COL_0391, COL_0344.COL_0033, COL_0342.COL_0337, NULL COL_0338, CASE WHEN TAB_0087.COL_0231 IS NOT NULL THEN (SELECT COL_0207 FROM TAB_0062 WHERE COL_0231 = TAB_0087.COL_0231) ELSE (SELECT COL_0207 FROM TAB_0062 WHERE COL_0231 = PKG_0010.COL_0231) END COL_0207 FROM TAB_0082 COL_0342, TAB_0085 TAB_0087, TAB_0088 COL_0344, TAB_0061 PKG_0010, TAB_0084 PKG_0009, (SELECT COL_0266, MAX(COL_0396) COL_0393 FROM (SELECT COL_0242.COL_0266, MAX(COL_0242.COL_0354) COL_0396 FROM TAB_0085 COL_0242, TAB_0082 WHERE TAB_0082.COL_0266 = COL_0242.COL_0266 GROUP BY COL_0242.COL_0266 UNION ALL SELECT COL_0242.COL_0266, MAX(COL_0242.COL_0354) COL_0396 FROM TAB_0086 COL_0242, TAB_0082 WHERE TAB_0082.COL_0266 = COL_0242.COL_0266 GROUP BY COL_0242.COL_0266) GROUP BY COL_0266) COL_0392 WHERE TAB_0087.COL_0032 = COL_0342.COL_0032 AND TAB_0087.COL_0039 = COL_0342.COL_0039 AND TAB_0087.COL_0267 = COL_0342.COL_0267 AND TAB_0087.COL_0268 = COL_0342.COL_0268 AND TAB_0087.COL_0269 = COL_0342.COL_0269 AND TAB_0087.COL_0273 = COL_0342.COL_0273 AND TAB_0087.COL_0274 = COL_0342.COL_0274 AND TAB_0087.COL_0270 = COL_0342.COL_0270 AND TAB_0087.COL_0271 = COL_0342.COL_0271 AND TAB_0087.COL_0272 = COL_0342.COL_0272 AND COL_0342.COL_0274 = COL_0344.COL_0274 AND TAB_0087.COL_0233 = PKG_0010.COL_0233(+) AND COL_0342.ROT_0018 = PKG_0009.ROT_0018(+) AND (TAB_0087.COL_0394 IS NOT NULL OR TAB_0087.COL_0395 IS NOT NULL) AND COL_0342.COL_0266 = COL_0392.COL_0266 ORDER BY 9,9,5,8,5,3,8,43,88,23,55), TAB_0089 AS (SELECT UNIQUE '***' COL_0341, COL_0342.COL_0266 COL_0266, COL_0342.COL_0032 COL_0032, COL_0342.COL_0039 COL_0039, COL_0342.COL_0267 COL_0267, COL_0342.COL_0268 COL_0268, COL_0342.COL_0269 COL_0269, COL_0342.COL_0273 COL_0273, COL_0342.COL_0274 COL_0274, COL_0342.COL_0270 COL_0270, COL_0342.COL_0271 COL_0271, COL_0342.COL_0272 COL_0272, *** COL_0343, COL_0344.COL_0244 COL_0244, COL_0344.COL_0245 COL_0245, COL_0344.COL_0246 COL_0246, COL_0342.COL_0275 COL_0275, COL_0342.COL_0068 COL_0068, COL_0342.COL_0276 COL_0276, COL_0342.ROT_0018 ROT_0018, COL_0342.COL_0277 COL_0277, COL_0342.COL_0278 COL_0278, TAB_0087.COL_0328 COL_0328, COL_0342.COL_0279 COL_0279, TAB_0087.COL_0397 COL_0345, COL_0342.COL_0280 COL_0280, TAB_0087.COL_0281 COL_0281, TAB_0087.COL_0348 COL_0346, COL_0342.COL_0283 COL_0283, COL_0342.COL_0284 COL_0284, COL_0342.COL_0285 COL_0285, COL_0342.COL_0286 COL_0286, TAB_0087.COL_0287 COL_0287, TAB_0087.COL_0288 COL_0288, TAB_0087.COL_0289 COL_0289, TAB_0087.COL_0290 COL_0290, TAB_0087.COL_0291 COL_0291, TAB_0087.COL_0292 COL_0292, *** COL_0329, *** COL_0330, *** COL_0293, *** COL_0294, *** COL_0295, '***' COL_0296, '***' COL_0347, *** COL_0297, *** COL_0298, *** COL_0299, COL_0342.COL_0300 COL_0300, COL_0342.COL_0301 COL_0301, TAB_0087.COL_0302 COL_0302, TAB_0087.COL_0226 COL_0226, TAB_0087.COL_0303 COL_0303, TAB_0087.COL_0304 COL_0304, TAB_0087.COL_0227 COL_0227, TAB_0087.COL_0305 COL_0305, TAB_0087.COL_0348 COL_0348, TAB_0087.COL_0349 COL_0349, TAB_0087.COL_0350 COL_0350, TAB_0087.COL_0351 COL_0351, TAB_0087.COL_0352 COL_0352, TAB_0087.COL_0353 COL_0353, TAB_0087.COL_0354 COL_0354, PKG_0011.COL_0236 COL_0233, PKG_0011.COL_0398 COL_0209, '***' COL_0210, PKG_0011.COL_0235 COL_0218, PKG_0011.COL_0355 COL_0355, '***' COL_0356, '***' COL_0357, '***' COL_0358, *** COL_0359, *** COL_0360, TAB_0087.COL_0238 COL_0238, COL_0344.COL_0361 COL_0361, TAB_0087.COL_0362 COL_0362, *** COL_0363, *** COL_0364, TAB_0087.COL_0365 COL_0365, TAB_0087.COL_0162 COL_0162, COL_0342.COL_0306 COL_0366, COL_0342.COL_0307 COL_0367, COL_0342.COL_0308 COL_0368, *** COL_0309, TAB_0087.COL_0325 COL_0310, *** COL_0311, TAB_0087.COL_0326 COL_0312, COL_0342.COL_0313 COL_0313, COL_0342.COL_0314 COL_0314, COL_0342.COL_0315 COL_0315, '***' COL_0369, LPAD(TAB_0087.COL_0370, ***, '***') COL_0370, NULL COL_0371, *** COL_0372, *** COL_0373, LPAD(TAB_0087.COL_0374, ***, '***') COL_0374, NULL COL_0375, *** COL_0376, *** COL_0377, *** COL_0318, COL_0342.COL_0331 COL_0378, COL_0342.COL_0319 COL_0319, COL_0344.COL_0201 COL_0379, COL_0342.COL_0162 COL_0380, TAB_0087.COL_0320 COL_0320, TAB_0087.COL_0321 COL_0321, COL_0342.COL_0320 COL_0381, COL_0342.COL_0321 COL_0382, '***' COL_0383, '***' COL_0384, TAB_0087.COL_0385 COL_0385, COL_0344.COL_0386 COL_0387, COL_0342.COL_0323 COL_0323, TAB_0087.COL_0388 COL_0388, COL_0344.COL_0389 COL_0390, COL_0342.COL_0324 COL_0324, TAB_0087.COL_0325 COL_0325, TAB_0087.COL_0326 COL_0326, COL_0342.COL_0327 COL_0327, TAB_0087.COL_0214 COL_0214, *** COL_0333, *** COL_0334, TAB_0087.COL_0335 COL_0335, COL_0342.COL_0336, COL_0344.COL_0391, COL_0344.COL_0033, COL_0342.COL_0337, COL_0342.COL_0338, NULL COL_0207 FROM TAB_0082 COL_0342, TAB_0086 TAB_0087, TAB_0088 COL_0344, TAB_0064 PKG_0011, TAB_0084 PKG_0009 WHERE TAB_0087.COL_0032 = COL_0342.COL_0032 AND TAB_0087.COL_0039 = COL_0342.COL_0039 AND TAB_0087.COL_0267 = COL_0342.COL_0267 AND TAB_0087.COL_0268 = COL_0342.COL_0268 AND TAB_0087.COL_0269 = COL_0342.COL_0269 AND TAB_0087.COL_0273 = COL_0342.COL_0273 AND TAB_0087.COL_0274 = COL_0342.COL_0274 AND TAB_0087.COL_0270 = COL_0342.COL_0270 AND TAB_0087.COL_0271 = COL_0342.COL_0271 AND TAB_0087.COL_0272 = COL_0342.COL_0272 AND COL_0342.COL_0274 = COL_0344.COL_0274 AND TAB_0087.COL_0236 = PKG_0011.COL_0236(+) AND COL_0342.ROT_0018 = PKG_0009.ROT_0018(+)) SELECT I.* FROM TAB_0087 I UNION ALL SELECT S.* FROM TAB_0089 S UNION ALL SELECT UNIQUE '***' COL_0341, COL_0342.COL_0266 COL_0266, COL_0342.COL_0032 COL_0032, COL_0342.COL_0039 COL_0039, COL_0342.COL_0267 COL_0267, COL_0342.COL_0268 COL_0268, COL_0342.COL_0269 COL_0269, COL_0342.COL_0273 COL_0273, COL_0342.COL_0274 COL_0274, COL_0342.COL_0270 COL_0270, COL_0342.COL_0271 COL_0271, COL_0342.COL_0272 COL_0272, *** COL_0343, COL_0344.COL_0244 COL_0244, COL_0344.COL_0245 COL_0245, COL_0344.COL_0246 COL_0246, COL_0342.COL_0275 COL_0275, COL_0342.COL_0068 COL_0068, COL_0342.COL_0276 COL_0276, COL_0342.ROT_0018 ROT_0018, COL_0342.COL_0277 COL_0277, COL_0342.COL_0278 COL_0278, COL_0342.COL_0328 COL_0328, COL_0342.COL_0279 COL_0279, COL_0342.COL_0279 COL_0345, COL_0342.COL_0280 COL_0280, COL_0342.COL_0281 COL_0281, COL_0342.COL_0282 COL_0346, COL_0342.COL_0283 COL_0283, COL_0342.COL_0284 COL_0284, COL_0342.COL_0285 COL_0285, COL_0342.COL_0286 COL_0286, COL_0342.COL_0287 COL_0287, COL_0342.COL_0288 COL_0288, COL_0342.COL_0289 COL_0289, COL_0342.COL_0290 COL_0290, COL_0342.COL_0291 COL_0291, COL_0342.COL_0292 COL_0292, COL_0342.COL_0329 COL_0329, COL_0342.COL_0330 COL_0330, COL_0342.COL_0293 COL_0293, COL_0342.COL_0294 COL_0294, COL_0342.COL_0295 COL_0295, COL_0342.COL_0296 COL_0296, '***' COL_0347, COL_0342.COL_0297 COL_0297, COL_0342.COL_0298 COL_0298, COL_0342.COL_0299 COL_0299, COL_0342.COL_0300 COL_0300, COL_0342.COL_0301 COL_0301, COL_0342.COL_0302 COL_0302, COL_0342.COL_0226 COL_0226, COL_0342.COL_0303 COL_0303, COL_0342.COL_0304 COL_0304, COL_0342.COL_0227 COL_0227, COL_0342.COL_0305 COL_0305, *** COL_0348, *** COL_0349, *** COL_0350, *** COL_0351, *** COL_0352, *** COL_0353, *** COL_0354, *** COL_0233, '***' COL_0209, '***' COL_0210, '***' COL_0218, NULL COL_0355, '***' COL_0356, '***' COL_0357, '***' COL_0358, *** COL_0359, *** COL_0360, COL_0342.COL_0238 COL_0238, COL_0344.COL_0361 COL_0361, *** COL_0362, *** COL_0363, *** COL_0364, '***' COL_0365, COL_0342.COL_0162 COL_0162, COL_0342.COL_0306 COL_0366, COL_0342.COL_0307 COL_0367, COL_0342.COL_0308 COL_0368, COL_0342.COL_0309 COL_0309, COL_0342.COL_0310 COL_0310, COL_0342.COL_0311 COL_0311, COL_0342.COL_0312 COL_0312, COL_0342.COL_0313 COL_0313, COL_0342.COL_0314 COL_0314, COL_0342.COL_0315 COL_0315, '***' COL_0369, LPAD(COL_0342.COL_0316, ***, '***') COL_0370, NULL COL_0371, *** COL_0372, *** COL_0373, LPAD(COL_0342.COL_0317, ***, '***') COL_0374, NULL COL_0375, *** COL_0376, *** COL_0377, COL_0342.COL_0318 COL_0318, COL_0342.COL_0331 COL_0378, COL_0342.COL_0319 COL_0319, COL_0344.COL_0201 COL_0379, COL_0342.COL_0162 COL_0380, '***' COL_0320, NULL COL_0321, COL_0342.COL_0320 COL_0381, COL_0342.COL_0321 COL_0382, '***' COL_0383, COL_0342.COL_0322 COL_0384, *** COL_0385, COL_0344.COL_0386 COL_0387, COL_0342.COL_0323 COL_0323, '***' COL_0388, COL_0344.COL_0389 COL_0390, COL_0342.COL_0324 COL_0324, COL_0342.COL_0325 COL_0325, COL_0342.COL_0326 COL_0326, COL_0342.COL_0327 COL_0327, COL_0342.COL_0214 COL_0214, COL_0342.COL_0333 COL_0333, COL_0342.COL_0334 COL_0334, COL_0342.COL_0335 COL_0335, COL_0342.COL_0336, COL_0344.COL_0391, COL_0344.COL_0033, COL_0342.COL_0337, COL_0342.COL_0338, NULL COL_0207 FROM TAB_0082 COL_0342, TAB_0088 COL_0344, TAB_0084 PKG_0009 WHERE COL_0342.COL_0274 = COL_0344.COL_0274 AND COL_0342.ROT_0018 = PKG_0009.ROT_0018(+) AND NOT EXISTS (SELECT '***' FROM TAB_0087 I WHERE COL_0342.COL_0032 = I.COL_0032 AND COL_0342.COL_0039 = I.COL_0039 AND COL_0342.COL_0267 = I.COL_0267 AND COL_0342.COL_0268 = I.COL_0268 AND COL_0342.COL_0269 = I.COL_0269 AND COL_0342.COL_0273 = I.COL_0273 AND COL_0342.COL_0274 = I.COL_0274 AND COL_0342.COL_0270 = I.COL_0270 AND COL_0342.COL_0271 = I.COL_0271 AND COL_0342.COL_0272 = I.COL_0272) AND NOT EXISTS (SELECT '***' FROM TAB_0089 I WHERE COL_0342.COL_0032 = I.COL_0032 AND COL_0342.COL_0039 = I.COL_0039 AND COL_0342.COL_0267 = I.COL_0267 AND COL_0342.COL_0268 = I.COL_0268 AND COL_0342.COL_0269 = I.COL_0269 AND COL_0342.COL_0273 = I.COL_0273 AND COL_0342.COL_0274 = I.COL_0274 AND COL_0342.COL_0270 = I.COL_0270 AND COL_0342.COL_0271 = I.COL_0271 AND COL_0342.COL_0272 = I.COL_0272) ORDER BY 9, 12, 8, 5, 3, 23, 88, 43, 30, 5, 51
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| espera | 364,190994 | 49,2 | 322.865 | |
| cpu | 104,205928 | 14,1 | 1 | |
| não contabilizado | 98,163214 | 13,3 | 128 | |
| espera | 82,615851 | 11,2 | 5.357 | |
| espera | 55,084930 | 7,4 | 7.169 | |
| cpu | 16,721454 | 2,3 | 126 | |
| espera | 12,718013 | 1,7 | 1.019 | |
| espera | 7,137210 | 1,0 | 2.744 | |
| cpu | 0,011193 | 0,0 | 1 | |
| espera | 0,002383 | 0,0 | 3 | |
| recursivo | 0,001436 | 0,0 | ||
| espera | 0,000356 | 0,0 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,012072 | 0,021011 | 0 | 12 | 0 | 0 | 1 |
| EXEC | 1 | 104,205928 | 688,658892 | 3.358.274 | 7.253.288 | 142.372 | 0 | 0 |
| FETCH | 126 | 16,721454 | 52,173059 | 169.783 | 273.715 | 21 | 63.000 | 0 |
SQL recursivo executado por este comando
| # | Duração (s) | Texto |
|---|---|---|
| 113 | 0,001 | select default$ from col$ where rowid=:1 |
#6 · COMMIT
sql_id 7j4pr906pvfwdhv 224246669Texto
COMMIT
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,149443 | 59,0 | 41 | |
| não contabilizado | 0,103600 | 40,9 | 89 | |
| cpu | 0,000033 | 0,0 | 7 | |
| cpu | 0,000022 | 0,0 | 41 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 7 | 0,000033 | 0,000064 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 41 | 0,149443 | 0,252987 | 0 | 0 | 39 | 0 | 0 |
| CLOSE | 41 | 0,000022 | 0,000047 | 0 | 0 | 0 | 0 | 0 |
#7 · DELETE
sql_id c1bqf8upvjwpthv 2881024697Texto
DELETE FROM TAB_0049 A WHERE A.COL_0086 = :B1
- 1 operação 1 (DELETE TAB_0049) não tem objeto próprio no texto
- 2 IDX_0034 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 2)
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 55,010146 | 53,5 | 1 | |
| não contabilizado | 41,699323 | 40,5 | 3 | |
| espera | 5,206170 | 5,1 | 1.656 | |
| espera | 0,501037 | 0,5 | 204 | |
| espera | 0,402370 | 0,4 | 146 | |
| espera | 0,052671 | 0,1 | 2 | |
| espera | 0,033119 | 0,0 | 2 | |
| espera | 0,000448 | 0,0 | 13 | |
| cpu | 0,000062 | 0,0 | 1 | |
| cpu | 0,000001 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000062 | 0,000099 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 55,010146 | 102,905247 | 66.988 | 20.280 | 13.153.243 | 2.953.545 | 1 |
| CLOSE | 1 | 0,000001 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3190475110
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · DELETE TAB_0049 98,1% do tempo · 17,8% das leituras lógicas
Gravou 66.842 blocos no TEMP: a workarea da PGA não bastou. - 2 Id 2 · INDEX RANGE SCAN IDX_0034 1,9% do tempo · 82,2% das leituras lógicas
Percorre uma faixa larga do índice: confira a seletividade e a ordem das colunas.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 100,952599 | 98,1 | 3.607 | 17,8 | 66.988 | 66.842 | 102,904714 | 20.280 | |||||
| 2 | 2 | 2.953.545 | 2.943.270 | 1,952115 | 1,9 | 16.673 | 82,2 | 0 | 0 | 1,952115 | 16.673 | 9.579 | 201288 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#8 · UPDATE
sql_id a4tzy6psxru35hv 1910237285Texto
update seq$ set increment$=:2,minvalue=:3,maxvalue=:4,cycle#=:5,order$=:6,cache=:7,highwater=:8,audit$=:9,flags=:10 where obj#=:1
- 1 I_SEQ1 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 2)
- 2 operação 1 (UPDATE SEQ$) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,750376 | 57,2 | 2.631 | |
| não contabilizado | 0,559023 | 42,6 | 5.265 | |
| cpu | 0,001464 | 0,1 | 2.631 | |
| cpu | 0,000256 | 0,0 | 3 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 3 | 0,000256 | 0,000416 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2.631 | 0,750376 | 1,307956 | 0 | 2.633 | 5.302 | 2.631 | 1 |
| CLOSE | 2.631 | 0,001464 | 0,002747 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 89955185
Das linhas STAT do trace; plano gravado 3 vezes, mostrando o último.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN I_SEQ1 3,1% do tempo · 100,0% das leituras lógicas
- 2 Id 1 · UPDATE SEQ$ 96,9% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000156 | 96,9 | 0 | 0,0 | 0 | 0 | 0,000161 | 1 | |||||
| 2 | 1 | 1 | 1 | 0,000005 | 3,1 | 1 | 100,0 | 0 | 0 | 0,000005 | 1 | 0 | 79 |
Alteração
UPDATE
Altera as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais vindas do row source abaixo; índices e triggers da tabela pesam.
- No plano, olhe
- Linhas do row source abaixo.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#9 · INSERT
sql_id cm2m46jyu6a10hv 2107844640Texto
INSERT INTO TAB_0069 (COL_0247, COL_0064, COL_0248, COL_0249, COL_0105, ROT_0008,COL_0044, COL_0250) VALUES (:B8 , :B7 , :B6 , :B5 , :B4 , :B3 ,:B2 , :B1 )
- 1 operação 1 (LOAD TABLE CONVENTIONAL) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| espera | 0,308187 | 89,7 | 47 | |
| cpu | 0,023448 | 6,8 | 43 | |
| não contabilizado | 0,011704 | 3,4 | 87 | |
| cpu | 0,000071 | 0,0 | 1 | |
| cpu | 0,000063 | 0,0 | 43 | |
| espera | 0,000011 | 0,0 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000071 | 0,000114 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 43 | 0,023448 | 0,343266 | 47 | 3 | 546 | 43 | 1 |
| CLOSE | 43 | 0,000063 | 0,000104 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 508576461
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,007791 | 100,0 | 1 | 100,0 | 2 | 0 | 0,007791 | 1 |
Inserção convencional
LOAD TABLE CONVENTIONAL
Insere as linhas na tabela pelo caminho normal do INSERT.
- Boa quando
- Inserções do dia a dia.
- Ruim quando
- Triggers, índices e constraints da tabela pesam aqui; em carga grande, o modo direto (APPEND) grava mais rápido.
- No plano, olhe
- Tempo próprio (s) e as esperas do comando.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#10 · SELECT
sql_id 70uypyj7247nzhv 1310858911Texto
SELECT COL_0401 FROM TAB_009212 WHERE COL_0204 = :B5 AND COL_0032 = :B4 AND COL_0039 = :B3 AND COL_0398 = :B2 AND COL_0235 = :B1
- 1 TAB_0092, tabela do índice IDX_0056: operação 2 do plano
- 2 TAB_0092: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,108749 | 51,7 | 868 | |
| não contabilizado | 0,098132 | 46,6 | 2.605 | |
| cpu | 0,002996 | 1,4 | 868 | |
| cpu | 0,000426 | 0,2 | 868 | |
| cpu | 0,000220 | 0,1 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000220 | 0,000362 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 868 | 0,108749 | 0,203343 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 868 | 0,002996 | 0,005930 | 0 | 970 | 0 | 102 | 0 |
| CLOSE | 868 | 0,000426 | 0,000888 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3055701094
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0056 57,1% do tempo · 50,0% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0092 42,9% do tempo · 50,0% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000006 | 42,9 | 1 | 50,0 | 0 | 0 | 0,000014 | 2 | 1 | 192622 | ||
| 2 | 1 | 1 | 1 | 0,000008 | 57,1 | 1 | 50,0 | 0 | 0 | 0,000008 | 1 | 0 | 200566 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#11 · DELETE
sql_id 5ngcz3h95ampnhv 307580596Texto
DELETE FROM TAB_0035 WHERE COL_0086 = :B1
- 1 operação 1 (DELETE TAB_0035) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,072850 | 43,5 | 1 | |
| não contabilizado | 0,061121 | 36,5 | 3 | |
| recursivo | 0,024826 | 14,8 | ||
| espera | 0,008612 | 5,1 | 2 | |
| cpu | 0,000177 | 0,1 | 1 | |
| cpu | 0,000002 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000177 | 0,000299 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,083011 | 0,167286 | 4 | 2.462 | 16.905 | 1 | 1 |
| CLOSE | 1 | 0,000002 | 0,000003 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2998992308
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · DELETE TAB_0035 100,0% do tempo · 100,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,165115 | 100,0 | 2.461 | 100,0 | 4 | 0 | 0,165136 | 2.462 | |||||
| 2 | 1 | 1 | 0,000021 | 0,0 | 1 | 0,0 | 0 | 0 | 0,000021 | 1 | 0 | 201278 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#12 · INSERT
sql_id 5cn2qgqk0s6mxhv 2752256637Texto
INSERT INTO TAB_0027 (COL_0104, COL_0064, DATA, COL_0105, COL_0106) VALUES (SEQ_003.NEXTVAL, :B3 , SYSDATE, :B2 , :B1 )
- 1 operação 1 (LOAD TABLE CONVENTIONAL) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| espera | 0,154872 | 93,9 | 26 | |
| cpu | 0,005830 | 3,5 | 12 | |
| não contabilizado | 0,002957 | 1,8 | 25 | |
| recursivo | 0,000771 | 0,5 | ||
| espera | 0,000378 | 0,2 | 15 | |
| cpu | 0,000073 | 0,0 | 1 | |
| cpu | 0,000011 | 0,0 | 12 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000073 | 0,000116 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 12 | 0,006284 | 0,164758 | 26 | 2 | 121 | 12 | 1 |
| CLOSE | 12 | 0,000011 | 0,000018 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3495871077
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · LOAD TABLE CONVENTIONAL 99,9% do tempo · 100,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,026417 | 99,9 | 1 | 100,0 | 4 | 0 | 0,026440 | 1 | |||||
| 2 | 1 | 0,000023 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000023 | 0 | 190035 |
Inserção convencional
LOAD TABLE CONVENTIONAL
Insere as linhas na tabela pelo caminho normal do INSERT.
- Boa quando
- Inserções do dia a dia.
- Ruim quando
- Triggers, índices e constraints da tabela pesam aqui; em carga grande, o modo direto (APPEND) grava mais rápido.
- No plano, olhe
- Tempo próprio (s) e as esperas do comando.
Sequence (NEXTVAL)
SEQUENCE
Gera os próximos números de uma sequence.
- Boa quando
- Cache adequado ao volume.
- Ruim quando
- Cache pequeno com muito uso: esperas em enq: SQ e no dicionário.
- No plano, olhe
- As esperas do comando, no perfil dele.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#13 · DELETE
sql_id 0pp5x87ncmkzshv 3905539064Texto
DELETE FROM TAB_0050 WHERE COL_0086 = :B1 AND ROWNUM <= ***
- 1 IDX_0035 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 3)
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,034567 | 39,6 | 1 | |
| não contabilizado | 0,027194 | 31,2 | 3 | |
| espera | 0,025351 | 29,0 | 4 | |
| cpu | 0,000185 | 0,2 | 1 | |
| cpu | 0,000001 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000185 | 0,000305 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,034567 | 0,086991 | 4 | 13.358 | 0 | 0 | 1 |
| CLOSE | 1 | 0,000001 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1076172561
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 3 · INDEX RANGE SCAN IDX_0035 100,0% do tempo · 100,0% das leituras lógicas
Percorre uma faixa larga do índice: confira a seletividade e a ordem das colunas.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0,000004 | 0,0 | 0 | 0,0 | 4 | 0 | 0,085908 | 13.358 | ||||||
| 2 | 0 | 0,000009 | 0,0 | 0 | 0,0 | 4 | 0 | 0,085904 | 13.358 | ||||||
| 3 | 1 | 0 | 1 | 0,085895 | 100,0 | 13.358 | 100,0 | 4 | 0 | 0,085895 | 13.358 | 2 | 201349 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Corte em N linhas
COUNT STOPKEY
Para de ler depois de N linhas (ROWNUM <= N ou FETCH FIRST).
- Boa quando
- Corta o trabalho cedo quando as linhas já chegam na ordem certa.
- Ruim quando
- Quando há uma ordenação completa embaixo: tudo é lido antes do corte.
- No plano, olhe
- Linhas das operações de baixo.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#14 · SELECT
sql_id aggvkb3vxk338hv 4158196840Texto
SELECT A.COL_0120, A.COL_0121, A.COL_0113, B.COL_0125, C.COL_0126, C.COL_0127, C.COL_0128, A.COL_0129, A.COL_0130, B.COL_0131, ROWNUM FROM TAB_0032 A, TAB_0033 B, TAB_0034 C WHERE B.COL_0120 = :B3 AND B.COL_0121 = :B2 AND B.COL_0113 = :B1 AND A.COL_0120 = B.COL_0120 AND A.COL_0121 = B.COL_0121 AND A.COL_0113 = B.COL_0113 AND C.COL_0125 = B.COL_0125
- 1 operação 2 (NESTED LOOPS) não tem objeto próprio no texto
- 2 operação 1 (COUNT) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,047491 | 55,0 | 621 | |
| não contabilizado | 0,033690 | 39,0 | 1.864 | |
| cpu | 0,004879 | 5,6 | 621 | |
| cpu | 0,000264 | 0,3 | 621 | |
| cpu | 0,000099 | 0,1 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000099 | 0,000158 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 621 | 0,047491 | 0,077781 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 621 | 0,004879 | 0,008027 | 0 | 2.732 | 0 | 0 | 0 |
| CLOSE | 621 | 0,000264 | 0,000457 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1908278932
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · NESTED LOOPS 40,0% do tempo · 0,0% das leituras lógicas
- 2 Id 1 · COUNT 30,0% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000003 | 30,0 | 0 | 0,0 | 0 | 0 | 0,000010 | 0 | |||||
| 2 | 1 | 0 | 1 | 0,000004 | 40,0 | 0 | 0,0 | 0 | 0 | 0,000007 | 0 | 3 | |||
| 3 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000003 | 0 | 3 | ||||
| 4 | 0 | 1 | 0,000001 | 10,0 | 0 | 0,0 | 0 | 0 | 0,000003 | 0 | 2 | ||||
| 5 | 0 | 1 | 0,000001 | 10,0 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 2 | 190916 | |||
| 6 | 0 | 1 | 0,000001 | 10,0 | 0 | 0,0 | 0 | 0 | 0,000001 | 0 | 1 | 199273 | |||
| 7 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 190918 | |||
| 8 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 199275 | |||
| 9 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 199274 | |||
| 10 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 190917 |
Numeração de linhas
COUNT
Numera as linhas (ROWNUM).
- Boa quando
- Não custa em si.
- Ruim quando
- Quase nunca.
Junção em laço (nested loops)
NESTED LOOPS
Para cada linha do row source externo (outer, driving), executa o row source interno (inner).
- Boa quando
- Poucas linhas no outer e acesso seletivo por índice no inner. Devolve as primeiras linhas rápido (bom para FIRST_ROWS).
- Ruim quando
- Muitas linhas no outer: o inner executa milhares de vezes. Costuma vir de cardinalidade subestimada no outer; um HASH JOIN leria cada lado uma vez só.
- No plano, olhe
- Exec das operações do inner e, no outer, Estimado comparado com Linhas/exec.
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#15 · SELECT
sql_id g6km04yyxuhtwhv 3185394492Texto
SELECT NVL(C.COL_0116,***), NVL(COL_0112, '***') FROM TAB_003212 C WHERE C.COL_0120 = :B3 AND C.COL_0121 = :B2 AND C.COL_0113 = :B1
- 1 TAB_0032: operação 1 do plano
- 2 TAB_0032, tabela do índice IDX_0019: operação 2 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,045931 | 54,3 | 621 | |
| não contabilizado | 0,035520 | 42,0 | 1.864 | |
| cpu | 0,002697 | 3,2 | 621 | |
| cpu | 0,000227 | 0,3 | 621 | |
| cpu | 0,000187 | 0,2 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000187 | 0,000326 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 621 | 0,045931 | 0,079058 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 621 | 0,002697 | 0,004772 | 0 | 1.640 | 0 | 546 | 0 |
| CLOSE | 621 | 0,000227 | 0,000406 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2246748672
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0032 60,0% do tempo · 0,0% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa. - 2 Id 2 · INDEX UNIQUE SCAN IDX_0019 40,0% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0,000003 | 60,0 | 0 | 0,0 | 0 | 0 | 0,000005 | 0 | 2 | 190916 | ||
| 2 | 2 | 0 | 1 | 0,000002 | 40,0 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 1 | 199273 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#16 · SELECT
sql_id fdnsdx5rvuzbrhv 1874689399Texto
SELECT DISTINCT a.COL_0056, a.COL_0057 FROM TAB_0013 a, (select distinct COL_0032,COL_0039 from TAB_0014) b WHERE b.COL_0032 = a.COL_0032 and b.COL_0039 = nvl(trim(a.COL_0039),b.COL_0039) AND ((a.COL_0032 = '***' AND '***' = '***' and a.ROT_0008 = '***' )OR ('***' = '***' AND a.ROT_0008 = '***')) ORDER BY 1, 6
- 1 operação 6 (LOAD AS SELECT) não tem objeto próprio no texto
- 2 TAB_0016 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 23)
- 3 TAB_0017 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 26)
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,019388 | 31,8 | 2 | |
| não contabilizado | 0,014445 | 23,7 | 10 | |
| recursivo | 0,010390 | 17,0 | ||
| espera | 0,008608 | 14,1 | 1 | |
| cpu | 0,004513 | 7,4 | 2 | |
| cpu | 0,001200 | 2,0 | 4 | |
| espera | 0,001118 | 1,8 | 1 | |
| espera | 0,000442 | 0,7 | 2 | |
| espera | 0,000415 | 0,7 | 2 | |
| espera | 0,000409 | 0,7 | 6 | |
| espera | 0,000066 | 0,1 | 2 | |
| cpu | 0,000042 | 0,1 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,025600 | 0,044120 | 0 | 54 | 0 | 0 | 1 |
| EXEC | 2 | 0,004513 | 0,014524 | 0 | 48 | 20 | 0 | 0 |
| FETCH | 4 | 0,001200 | 0,002322 | 2 | 150 | 2 | 2 | 0 |
| CLOSE | 2 | 0,000042 | 0,000070 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3453167744
Das linhas STAT do trace; plano gravado 2 vezes, mostrando o último.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 6 · LOAD AS SELECT 24,6% do tempo · 0,0% das leituras lógicas
Gravou 1 bloco no TEMP: a workarea da PGA não bastou. - 2 Id 23 · TABLE ACCESS BY INDEX ROWID TAB_0016 1,7% do tempo · 18,2% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa. - 3 Id 26 · TABLE ACCESS BY INDEX ROWID TAB_0017 1,0% do tempo · 18,2% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 0,000026 | 0,9 | 0 | 0,0 | 1 | 1 | 0,002843 | 99 | 4 | ||||
| 2 | 1 | 1 | 0,000163 | 5,4 | 0 | 0,0 | 1 | 1 | 0,002817 | 99 | 3 | ||||
| 3 | 1 | 1 | 0,000005 | 0,2 | 0 | 0,0 | 1 | 1 | 0,002654 | 99 | 2 | ||||
| 4 | 1 | 1 | 0,000004 | 0,1 | 0 | 0,0 | 1 | 1 | 0,002629 | 98 | 1 | 204006 | |||
| 5 | 1 | 0,000392 | 13,0 | 0 | 0,0 | 1 | 1 | 0,002625 | 98 | ||||||
| 6 | 1 | 0 | 0,000742 | 24,6 | 0 | 0,0 | 0 | 1 | 0,001335 | 24 | |||||
| 7 | 18 | 35 | 0,000002 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000593 | 24 | 6 | 203872 | |||
| 8 | 18 | 35 | 0,000055 | 1,8 | 0 | 0,0 | 0 | 0 | 0,000591 | 24 | 6 | ||||
| 9 | 18 | 0,000054 | 1,8 | 0 | 0,0 | 0 | 0 | 0,000536 | 24 | ||||||
| 10 | 0 | 17 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000289 | 18 | 2 | ||||
| 11 | 18 | 18 | 0,000142 | 4,7 | 2 | 2,0 | 0 | 0 | 0,000142 | 2 | 2 | 190772 | |||
| 12 | 0 | 1 | 0,000172 | 5,7 | 16 | 16,2 | 0 | 0 | 0,000172 | 16 | 0 | 200905 | |||
| 13 | 18 | 18 | 0,000058 | 1,9 | 0 | 0,0 | 0 | 0 | 0,000193 | 6 | 2 | ||||
| 14 | 18 | 18 | 0,000054 | 1,8 | 2 | 2,0 | 0 | 0 | 0,000054 | 2 | 2 | 190772 | |||
| 15 | 18 | 1 | 0,000081 | 2,7 | 4 | 4,0 | 0 | 0 | 0,000081 | 4 | 0 | 200904 | |||
| 16 | 1 | 0,000015 | 0,5 | 0 | 0,0 | 1 | 0 | 0,000898 | 74 | ||||||
| 17 | 1 | 0,000015 | 0,5 | 0 | 0,0 | 1 | 0 | 0,000883 | 74 | ||||||
| 18 | 1 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 1 | 0 | 0,000616 | 48 | 4 | ||||
| 19 | 18 | 1 | 0,000062 | 2,1 | 0 | 0,0 | 1 | 0 | 0,000723 | 30 | 4 | ||||
| 20 | 18 | 1 | 0,000065 | 2,2 | 0 | 0,0 | 1 | 0 | 0,000632 | 26 | 3 | ||||
| 21 | 18 | 1 | 0,000138 | 4,6 | 0 | 0,0 | 1 | 0 | 0,000478 | 4 | 2 | ||||
| 22 | 18 | 1 | 0,000340 | 11,3 | 4 | 4,0 | 1 | 0 | 0,000340 | 4 | 2 | 4254951128 | |||
| 23 | 2 | 18 | 1 | 0,000050 | 1,7 | 18 | 18,2 | 0 | 0 | 0,000089 | 22 | 1 | 190772 | ||
| 24 | 18 | 1 | 0,000039 | 1,3 | 4 | 4,0 | 0 | 0 | 0,000039 | 4 | 0 | 198973 | |||
| 25 | 18 | 1 | 0,000029 | 1,0 | 4 | 4,0 | 0 | 0 | 0,000029 | 4 | 0 | 199137 | |||
| 26 | 3 | 1 | 1 | 0,000030 | 1,0 | 18 | 18,2 | 0 | 0 | 0,000030 | 18 | 1 | 190850 | ||
| 27 | 0 | 1 | 0,000001 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000238 | 24 | 3 | ||||
| 28 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000237 | 24 | 3 | ||||
| 29 | 18 | 1 | 0,000120 | 4,0 | 0 | 0,0 | 0 | 0 | 0,000143 | 2 | 2 | ||||
| 30 | 18 | 1 | 0,000023 | 0,8 | 2 | 2,0 | 0 | 0 | 0,000023 | 2 | 2 | 4254951128 | |||
| 31 | 0 | 1 | 0,000064 | 2,1 | 4 | 4,0 | 0 | 0 | 0,000103 | 22 | 0 | 198973 | |||
| 32 | 18 | 1 | 0,000039 | 1,3 | 18 | 18,2 | 0 | 0 | 0,000039 | 18 | 0 | 199137 | |||
| 33 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 190772 | |||
| 34 | 0 | 1 | 0,000001 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000014 | 2 | 1 | ||||
| 35 | 1 | 1 | 0,000005 | 0,2 | 1 | 1,0 | 0 | 0 | 0,000010 | 2 | 1 | 192144 | |||
| 36 | 1 | 1 | 0,000005 | 0,2 | 1 | 1,0 | 0 | 0 | 0,000005 | 1 | 0 | 198971 | |||
| 37 | 0 | 0,000002 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000003 | 0 | ||||||
| 38 | 0 | 0,000001 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000001 | 0 | ||||||
| 39 | 0 | 35 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 4254951128 | |||
| 40 | 1 | 1 | 0,000020 | 0,7 | 1 | 1,0 | 0 | 0 | 0,000020 | 1 | 1 | 202288 |
Ordenação (ORDER BY)
SORT ORDER BY
Ordena as linhas para o ORDER BY.
- Boa quando
- Poucas linhas, ordenação em memória.
- Ruim quando
- Muitas linhas: a ordenação não cabe na workarea e grava no TEMP. Um índice na ordem pedida pode evitar o SORT, principalmente com ROWNUM ou FETCH FIRST.
- No plano, olhe
- PW maior que zero e Tempo próprio (s).
Remoção de repetidos por hash
HASH UNIQUE
Tira as linhas repetidas usando uma tabela hash em memória.
- Boa quando
- Poucas linhas distintas.
- Ruim quando
- Volume grande; DISTINCT colocado para esconder uma junção que multiplica linhas.
- No plano, olhe
- Linhas antes e depois da operação, e PW.
Junção em laço (nested loops)
NESTED LOOPS
Para cada linha do row source externo (outer, driving), executa o row source interno (inner).
- Boa quando
- Poucas linhas no outer e acesso seletivo por índice no inner. Devolve as primeiras linhas rápido (bom para FIRST_ROWS).
- Ruim quando
- Muitas linhas no outer: o inner executa milhares de vezes. Costuma vir de cardinalidade subestimada no outer; um HASH JOIN leria cada lado uma vez só.
- No plano, olhe
- Exec das operações do inner e, no outer, Estimado comparado com Linhas/exec.
View ou subconsulta
VIEW
Resultado de uma view ou subconsulta usado como fonte de linhas pela operação de cima.
- Boa quando
- Não custa em si: o trabalho está nas operações de baixo.
- Ruim quando
- Quando impede que o filtro de fora entre na view e ela é lida inteira.
- No plano, olhe
- As operações de baixo.
WITH materializado
TEMP TABLE TRANSFORMATION
Uma cláusula WITH foi gravada numa tabela temporária e é lida depois.
- Boa quando
- O WITH é usado várias vezes e é caro de calcular.
- Ruim quando
- O WITH é usado uma vez só: gravar e ler de novo custa mais.
- No plano, olhe
- A operação LOAD AS SELECT abaixo e PW.
Inserção em modo direto
LOAD AS SELECT
Insere em modo direto (APPEND ou CREATE TABLE AS SELECT), gravando acima da high water mark (HWM).
- Boa quando
- Cargas grandes.
- Ruim quando
- Trava a tabela para outras gravações até o commit.
Remoção de repetidos por ordenação
SORT UNIQUE
Tira as linhas repetidas (DISTINCT, UNION, IN com subconsulta) ordenando o resultado.
- Boa quando
- Poucas linhas.
- Ruim quando
- Volume grande; DISTINCT colocado para esconder uma junção que multiplica linhas.
- No plano, olhe
- Linhas antes e depois da operação, e PW.
União dos ramos (UNION ALL)
UNION-ALL
Devolve os resultados de cada ramo, um depois do outro, sem eliminar repetidos.
- Boa quando
- Não custa em si.
- Ruim quando
- Ramos que leem a mesma tabela várias vezes.
- No plano, olhe
- Cada ramo abaixo.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Filtro
FILTER
Aplica um predicado às linhas do row source abaixo. Com dois row sources, executa o segundo (subquery não desaninhada) para cada linha do primeiro.
- Boa quando
- Um row source só, ou subquery executada poucas vezes (o FILTER guarda em cache os resultados já calculados).
- Ruim quando
- Subquery executada linha a linha (Exec alto no segundo row source): permitir o unnesting ou reescrever como junção costuma resolver.
- No plano, olhe
- Exec do segundo row source.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#17 · SELECT
sql_id 7mp3qb0atz09bhv 362774827Texto
SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, COL_0217.COL_0210, COL_0217.COL_0218, COL_0219.COL_0207 COL_0220, COL_0221.COL_0207 COL_0222, NULL COL_0202, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0061 COL_0217, TAB_006213 COL_0219, TAB_006213 COL_0221, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND COL_0223.COL_0230 = COL_0219.COL_0231 AND COL_0223.COL_0232 = COL_0221.COL_0231 AND COL_0223.COL_0233 = COL_0217.COL_0233 AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, COL_0217.COL_0210, COL_0217.COL_0218, NULL, NULL, NULL, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0061 COL_0217, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND COL_0223.COL_0230 IS NULL AND COL_0223.COL_0233 = COL_0217.COL_0233 AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, NULL, NULL, COL_0219.COL_0207 COL_0220, COL_0221.COL_0207 COL_0222, NULL, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_006213 COL_0219, TAB_006213 COL_0221, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND COL_0223.COL_0233 IS NULL AND COL_0223.COL_0232 = COL_0221.COL_0231 AND COL_0223.COL_0230 = COL_0219.COL_0231 AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, '***', COL_0234.COL_0235, NULL, NULL, NULL, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0064 COL_0234, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND COL_0223.COL_0236 = COL_0234.COL_0236 AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, NULL, NULL, NULL, NULL, COL_0237.COL_0202, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0065 COL_0237, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND (COL_0223.COL_0173 IS NOT NULL OR COL_0223.COL_0226 IS NOT NULL) AND (COL_0223.COL_0225 IS NOT NULL OR COL_0223.COL_0227 IS NOT NULL) AND COL_0223.COL_0238 = COL_0237.COL_0238 AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, NULL, NULL, NULL, NULL, NULL, COL_0223.COL_0224, COL_0223.COL_0173, COL_0223.COL_0225, COL_0223.COL_0226, COL_0223.COL_0227, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0063 PKG_0007 WHERE COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0224 = '***' AND COL_0223.COL_0238 IS NULL AND (COL_0223.COL_0173 IS NOT NULL OR COL_0223.COL_0226 IS NOT NULL) AND (COL_0223.COL_0225 IS NOT NULL OR COL_0223.COL_0227 IS NOT NULL) AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, NULL, NULL, NULL, NULL, NULL, COL_0223.COL_0224, ***, ***, ***, ***, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0063 PKG_0007 WHERE COL_0223.COL_0224 = '***' AND COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0238 IS NULL AND COL_0223.COL_0173 IS NULL AND COL_0223.COL_0225 IS NULL AND COL_0223.COL_0226 IS NULL AND COL_0223.COL_0227 IS NULL AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) UNION ALL SELECT *** COL_0211, LPAD(COL_0212, ***, '***') COL_0213, COL_0214, COL_0215, COL_0216, NULL, NULL, NULL, NULL, NULL, COL_0223.COL_0224, ***, ***, ***, ***, COL_0223.COL_0057, PKG_0007.COL_0228, PKG_0007.COL_0229 FROM TAB_0060 COL_0223, TAB_0063 PKG_0007 WHERE COL_0223.COL_0224 = '***' AND COL_0223.COL_0032 = :B2 AND COL_0223.COL_0039 = :B1 AND COL_0223.COL_0238 IS NULL AND COL_0223.COL_0173 IS NULL AND COL_0223.COL_0225 IS NULL AND COL_0223.COL_0226 IS NULL AND COL_0223.COL_0227 IS NULL AND COL_0223.COL_0162 = PKG_0007.COL_0162(+) ORDER BY 6, 8, 5, 1
- 1 TAB_0062, tabela do índice IDX_0045: operação 36 do plano
- 2 IDX_0045 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 37)
- 3 TAB_0062: operação 35 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,009626 | 41,2 | 7 | |
| cpu | 0,009587 | 41,1 | 2 | |
| cpu | 0,003153 | 13,5 | 1 | |
| cpu | 0,000975 | 4,2 | 2 | |
| cpu | 0,000002 | 0,0 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,003153 | 0,005158 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0,009587 | 0,016618 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000975 | 0,001563 | 0 | 204 | 0 | 52 | 0 |
| CLOSE | 2 | 0,000002 | 0,000004 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 631057487
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 36 · INDEX UNIQUE SCAN IDX_0045 12,1% do tempo · 23,5% das leituras lógicas
- 2 Id 37 · INDEX UNIQUE SCAN IDX_0045 6,3% do tempo · 23,5% das leituras lógicas
- 3 Id 35 · TABLE ACCESS BY INDEX ROWID TAB_0062 7,7% do tempo · 21,6% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 26 | 25 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000741 | 102 | 43 | ||||
| 2 | 26 | 0,000151 | 16,6 | 0 | 0,0 | 0 | 0 | 0,000895 | 102 | ||||||
| 3 | 0 | 1 | 0,000003 | 0,3 | 0 | 0,0 | 0 | 0 | 0,000066 | 1 | 3 | ||||
| 4 | 0 | 1 | 0,000002 | 0,2 | 0 | 0,0 | 0 | 0 | 0,000063 | 1 | 3 | ||||
| 5 | 0 | 1 | 0,000001 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000061 | 1 | 2 | ||||
| 6 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000060 | 1 | 1 | ||||
| 7 | 0 | 1 | 0,000002 | 0,2 | 0 | 0,0 | 0 | 0 | 0,000060 | 1 | 1 | ||||
| 8 | 0 | 1 | 0,000004 | 0,4 | 0 | 0,0 | 0 | 0 | 0,000058 | 1 | 1 | 192229 | |||
| 9 | 0 | 1 | 0,000054 | 5,9 | 1 | 1,0 | 0 | 0 | 0,000054 | 1 | 1 | 202722 | |||
| 10 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 190757 | |||
| 11 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 202796 | |||
| 12 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 190751 | |||
| 13 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 198961 | |||
| 14 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 192152 | |||
| 15 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 198940 | |||
| 16 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 198940 | |||
| 17 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 192152 | |||
| 18 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000009 | 1 | 1 | ||||
| 19 | 0 | 1 | 0,000001 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000009 | 1 | 1 | ||||
| 20 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000008 | 1 | 1 | ||||
| 21 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000008 | 1 | 1 | 192229 | |||
| 22 | 0 | 1 | 0,000008 | 0,9 | 1 | 1,0 | 0 | 0 | 0,000008 | 1 | 1 | 202722 | |||
| 23 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 190757 | |||
| 24 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 202796 | |||
| 25 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 198961 | |||
| 26 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 190751 | |||
| 27 | 22 | 15 | 0,000023 | 2,5 | 0 | 0,0 | 0 | 0 | 0,000608 | 94 | 32 | ||||
| 28 | 22 | 15 | 0,000095 | 10,5 | 0 | 0,0 | 0 | 0 | 0,000539 | 72 | 32 | ||||
| 29 | 22 | 15 | 0,000089 | 9,8 | 0 | 0,0 | 0 | 0 | 0,000387 | 48 | 17 | ||||
| 30 | 22 | 15 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000118 | 2 | 2 | ||||
| 31 | 22 | 15 | 0,000088 | 9,7 | 1 | 1,0 | 0 | 0 | 0,000093 | 2 | 2 | 192229 | |||
| 32 | 22 | 21 | 0,000005 | 0,6 | 1 | 1,0 | 0 | 0 | 0,000005 | 1 | 1 | 202722 | |||
| 33 | 0 | 1 | 0,000021 | 2,3 | 0 | 0,0 | 0 | 0 | 0,000030 | 0 | 0 | 190757 | |||
| 34 | 0 | 1 | 0,000009 | 1,0 | 0 | 0,0 | 0 | 0 | 0,000009 | 0 | 0 | 202796 | |||
| 35 | 3 | 22 | 1 | 0,000070 | 7,7 | 22 | 21,6 | 0 | 0 | 0,000180 | 46 | 1 | 192152 | ||
| 36 | 1 | 22 | 1 | 0,000110 | 12,1 | 24 | 23,5 | 0 | 0 | 0,000110 | 24 | 0 | 198940 | ||
| 37 | 2 | 22 | 1 | 0,000057 | 6,3 | 24 | 23,5 | 0 | 0 | 0,000057 | 24 | 0 | 198940 | ||
| 38 | 22 | 1 | 0,000046 | 5,1 | 22 | 21,6 | 0 | 0 | 0,000046 | 22 | 1 | 192152 | |||
| 39 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000008 | 1 | 1 | ||||
| 40 | 0 | 1 | 0,000001 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000008 | 1 | 1 | ||||
| 41 | 0 | 1 | 0,000001 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000007 | 1 | 1 | 192229 | |||
| 42 | 0 | 1 | 0,000006 | 0,7 | 1 | 1,0 | 0 | 0 | 0,000006 | 1 | 1 | 202722 | |||
| 43 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 191482 | |||
| 44 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 200422 | |||
| 45 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 190757 | |||
| 46 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 202796 | |||
| 47 | 0 | 1 | 0,000002 | 0,2 | 0 | 0,0 | 0 | 0 | 0,000008 | 1 | 1 | ||||
| 48 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000006 | 1 | 1 | ||||
| 49 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000006 | 1 | 1 | 192229 | |||
| 50 | 0 | 1 | 0,000006 | 0,7 | 1 | 1,0 | 0 | 0 | 0,000006 | 1 | 1 | 202722 | |||
| 51 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 192133 | |||
| 52 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 198991 | |||
| 53 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 190757 | |||
| 54 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 202796 | |||
| 55 | 4 | 4 | 0,000001 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000030 | 2 | 2 | ||||
| 56 | 4 | 4 | 0,000000 | 0,0 | 1 | 1,0 | 0 | 0 | 0,000022 | 2 | 2 | 192229 | |||
| 57 | 26 | 25 | 0,000030 | 3,3 | 1 | 1,0 | 0 | 0 | 0,000030 | 1 | 1 | 202722 | |||
| 58 | 0 | 1 | 0,000004 | 0,4 | 0 | 0,0 | 0 | 0 | 0,000007 | 0 | 0 | 190757 | |||
| 59 | 0 | 1 | 0,000003 | 0,3 | 0 | 0,0 | 0 | 0 | 0,000003 | 0 | 0 | 202796 | |||
| 60 | 0 | 1 | 0,000001 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000008 | 1 | 1 | ||||
| 61 | 0 | 1 | 0,000001 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000007 | 1 | 1 | 192229 | |||
| 62 | 0 | 1 | 0,000006 | 0,7 | 1 | 1,0 | 0 | 0 | 0,000006 | 1 | 1 | 202722 | |||
| 63 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 190757 | |||
| 64 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 202796 | |||
| 65 | 0 | 1 | 0,000001 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000007 | 1 | 1 | ||||
| 66 | 0 | 1 | 0,000001 | 0,1 | 0 | 0,0 | 0 | 0 | 0,000006 | 1 | 1 | 192229 | |||
| 67 | 0 | 1 | 0,000005 | 0,6 | 1 | 1,0 | 0 | 0 | 0,000005 | 1 | 1 | 202722 | |||
| 68 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 190757 | |||
| 69 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 202796 |
Ordenação (ORDER BY)
SORT ORDER BY
Ordena as linhas para o ORDER BY.
- Boa quando
- Poucas linhas, ordenação em memória.
- Ruim quando
- Muitas linhas: a ordenação não cabe na workarea e grava no TEMP. Um índice na ordem pedida pode evitar o SORT, principalmente com ROWNUM ou FETCH FIRST.
- No plano, olhe
- PW maior que zero e Tempo próprio (s).
União dos ramos (UNION ALL)
UNION-ALL
Devolve os resultados de cada ramo, um depois do outro, sem eliminar repetidos.
- Boa quando
- Não custa em si.
- Ruim quando
- Ramos que leem a mesma tabela várias vezes.
- No plano, olhe
- Cada ramo abaixo.
Junção em laço (nested loops)
NESTED LOOPS
Para cada linha do row source externo (outer, driving), executa o row source interno (inner).
- Boa quando
- Poucas linhas no outer e acesso seletivo por índice no inner. Devolve as primeiras linhas rápido (bom para FIRST_ROWS).
- Ruim quando
- Muitas linhas no outer: o inner executa milhares de vezes. Costuma vir de cardinalidade subestimada no outer; um HASH JOIN leria cada lado uma vez só.
- No plano, olhe
- Exec das operações do inner e, no outer, Estimado comparado com Linhas/exec.
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#18 · SELECT
sql_id 3x9jshgkx2rpqhv 3855703734Texto
SELECT COL_0202 FROM TAB_006512 WHERE COL_0238 = :B1
- 1 TAB_0065, tabela do índice IDX_0047: operação 2 do plano
- 2 TAB_0065: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| espera | 0,018272 | 86,1 | 2 | |
| cpu | 0,001060 | 5,0 | 23 | |
| não contabilizado | 0,000888 | 4,2 | 70 | |
| cpu | 0,000880 | 4,1 | 23 | |
| cpu | 0,000104 | 0,5 | 1 | |
| cpu | 0,000012 | 0,1 | 23 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000104 | 0,000166 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 23 | 0,001060 | 0,001719 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 23 | 0,000880 | 0,019310 | 2 | 69 | 0 | 23 | 0 |
| CLOSE | 23 | 0,000012 | 0,000021 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2304785892
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0047 69,2% do tempo · 66,7% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0065 30,8% do tempo · 33,3% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000004 | 30,8 | 1 | 33,3 | 0 | 0 | 0,000013 | 3 | 2 | 192133 | ||
| 2 | 1 | 1 | 1 | 0,000009 | 69,2 | 2 | 66,7 | 0 | 0 | 0,000009 | 2 | 1 | 198991 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#19 · SELECT
sql_id d5h8zj9sz0qrghv 1911577327Texto
SELECT A.COL_0107, C.COL_0108, A.COL_0109, A.COL_0110, B.COL_0111, B.COL_0112, B.COL_0113, B.COL_0114, B.ROT_0008, B.COL_0115, B.COL_0116, B.COL_0117, B.COL_0118, B.COL_0119, A.COL_0120, A.COL_0121, A.COL_0122, (SELECT S.COL_0123 FROM TAB_0019 S WHERE S.COL_0059 = A.COL_0059 AND S.COL_0062 = :B1 ) COL_0123, B.COL_0124 FROM TAB_0028 A, TAB_00292 B, TAB_0030 C WHERE A.COL_0059 = :B2 AND A.COL_0059 = B.COL_0059 AND A.COL_0107 = B.COL_0107 AND A.COL_0109 = B.COL_0109 AND A.COL_0059 = C.COL_0059 AND A.COL_0107 = C.COL_0107 AND ( :B1 IS NULL OR EXISTS (SELECT '***' FROM TAB_0031 P WHERE P.COL_0059 = :B2 AND P.COL_0062 = :B1 AND P.COL_0107 = A.COL_0107 AND P.COL_0109 = A.COL_0109)) ORDER BY C.COL_0108, A.COL_0109, A.COL_0110, B.COL_0111
- 1 operação 3 (SORT ORDER BY) não tem objeto próprio no texto
- 2 TAB_0029: operação 9 do plano
- 3 IDX_0022 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 10)
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,010344 | 54,8 | 10 | |
| cpu | 0,005390 | 28,6 | 7 | |
| cpu | 0,002786 | 14,8 | 1 | |
| cpu | 0,000196 | 1,0 | 1 | |
| recursivo | 0,000146 | 0,8 | ||
| cpu | 0,000001 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000196 | 0,000317 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,002877 | 0,004953 | 0 | 2 | 0 | 0 | 1 |
| FETCH | 7 | 0,005390 | 0,013592 | 0 | 677 | 0 | 621 | 0 |
| CLOSE | 1 | 0,000001 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 4266619821
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 3 · SORT ORDER BY 60,7% do tempo · 0,3% das leituras lógicas
- 2 Id 9 · TABLE ACCESS FULL TAB_0029 12,5% do tempo · 49,2% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 3 Id 10 · INDEX UNIQUE SCAN IDX_0022 3,4% do tempo · 41,7% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 0,000006 | 0,0 | 1 | 0,1 | 0 | 0 | 0,000010 | 2 | 1 | 190865 | |||
| 2 | 1 | 1 | 0,000004 | 0,0 | 1 | 0,1 | 0 | 0 | 0,000004 | 1 | 0 | 199165 | |||
| 3 | 1 | 621 | 11 | 0,008924 | 60,7 | 2 | 0,3 | 0 | 0 | 0,011565 | 677 | 53 | |||
| 4 | 621 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,002641 | 675 | ||||||
| 5 | 1.453 | 111 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,004030 | 392 | 52 | ||||
| 6 | 169 | 108 | 0,000479 | 3,3 | 0 | 0,0 | 0 | 0 | 0,003414 | 58 | 10 | ||||
| 7 | 9 | 9 | 0,000050 | 0,3 | 6 | 0,9 | 0 | 0 | 0,000050 | 6 | 2 | 190798 | |||
| 8 | 169 | 169 | 0,002885 | 19,6 | 52 | 7,7 | 0 | 0 | 0,002885 | 52 | 7 | 192099 | |||
| 9 | 2 | 1.453 | 1.350 | 0,001842 | 12,5 | 334 | 49,2 | 0 | 0 | 0,001842 | 334 | 42 | 192036 | ||
| 10 | 3 | 78 | 1 | 0,000506 | 3,4 | 283 | 41,7 | 0 | 0 | 0,000506 | 283 | 1 | 199166 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Ordenação (ORDER BY)
SORT ORDER BY
Ordena as linhas para o ORDER BY.
- Boa quando
- Poucas linhas, ordenação em memória.
- Ruim quando
- Muitas linhas: a ordenação não cabe na workarea e grava no TEMP. Um índice na ordem pedida pode evitar o SORT, principalmente com ROWNUM ou FETCH FIRST.
- No plano, olhe
- PW maior que zero e Tempo próprio (s).
Filtro
FILTER
Aplica um predicado às linhas do row source abaixo. Com dois row sources, executa o segundo (subquery não desaninhada) para cada linha do primeiro.
- Boa quando
- Um row source só, ou subquery executada poucas vezes (o FILTER guarda em cache os resultados já calculados).
- Ruim quando
- Subquery executada linha a linha (Exec alto no segundo row source): permitir o unnesting ou reescrever como junção costuma resolver.
- No plano, olhe
- Exec do segundo row source.
Junção por hash
HASH JOIN
Monta uma hash table na PGA com o primeiro row source (build input, o menor) e lê o segundo (probe input) procurando as correspondências.
- Boa quando
- Juntar muitas linhas sem índice útil: cada lado é lido uma vez só.
- Ruim quando
- O build input é grande e não cabe na workarea da PGA: a junção vira one-pass ou multipass e grava no TEMP. Ou poucas linhas bastariam e um NESTED LOOPS com índice seria mais barato.
- No plano, olhe
- PW maior que zero (gravação no TEMP), Tempo próprio (s) e as Linhas do build input.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
| # | Duração (s) | Texto |
|---|---|---|
| 108 | 0,000 | select COL_0016 from cdef$ where rowid=:1 |
#21 · SELECT
sql_id bduun358kp94rhv 1361749143Texto
SELECT COL_0414 FROM TAB_009512 WHERE COL_0329 = :B1
- 1 TAB_0095, tabela do índice IDX_0060: operação 2 do plano
- 2 TAB_0095: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| espera | 0,013574 | 85,8 | 2 | |
| não contabilizado | 0,001034 | 6,5 | 22 | |
| cpu | 0,000564 | 3,6 | 7 | |
| cpu | 0,000552 | 3,5 | 7 | |
| cpu | 0,000090 | 0,6 | 1 | |
| cpu | 0,000006 | 0,0 | 7 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000090 | 0,000692 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 7 | 0,000564 | 0,000900 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 7 | 0,000552 | 0,014218 | 2 | 14 | 0 | 7 | 0 |
| CLOSE | 7 | 0,000006 | 0,000010 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 4207326742
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0060 56,9% do tempo · 50,0% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0095 43,1% do tempo · 50,0% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,006083 | 43,1 | 1 | 50,0 | 2 | 0 | 0,014117 | 2 | 1 | 190981 | ||
| 2 | 1 | 1 | 1 | 0,008034 | 56,9 | 1 | 50,0 | 1 | 0 | 0,008034 | 1 | 0 | 199392 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#23 · DELETE
sql_id ckb4zrms9xgf3hv 4036935107Texto
delete from "ESQ_01"."TAB_00362" where "COL_0086" = :1
- 1 operação 1 (DELETE TAB_0036) não tem objeto próprio no texto
- 2 TAB_0036: operação 2 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| espera | 0,005402 | 39,8 | 1 | |
| recursivo | 0,004510 | 33,3 | ||
| não contabilizado | 0,001600 | 11,8 | 3 | |
| cpu | 0,001573 | 11,6 | 1 | |
| cpu | 0,000474 | 3,5 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000474 | 0,000833 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,004088 | 0,012725 | 1 | 40 | 91 | 2 | 1 |
| CLOSE | 1 | 0,000000 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2264448958
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · DELETE TAB_0036 99,3% do tempo · 85,0% das leituras lógicas
- 2 Id 2 · TABLE ACCESS FULL TAB_0036 0,7% do tempo · 15,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,011284 | 99,3 | 34 | 85,0 | 1 | 0 | 0,011365 | 40 | |||||
| 2 | 2 | 2 | 2 | 0,000081 | 0,7 | 6 | 15,0 | 0 | 0 | 0,000081 | 6 | 2 | 190485 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
| # | Duração (s) | Texto |
|---|---|---|
| 63 | 0,003 | delete from "ESQ_01"."TAB_0054" where "COL_0155" = :1 |
| 109 | 0,002 | delete from "ESQ_01"."TAB_0037" where "COL_0155" = :1 |
#24 · SELECT
sql_id 305ug0679zghahv 2392833546Texto
SELECT COL_0229, COL_0228 FROM TAB_006312 WHERE COL_0162 = :B1
- 1 TAB_0063, tabela do índice IDX_0043: operação 2 do plano
- 2 TAB_0063: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| espera | 0,009025 | 69,3 | 1 | |
| não contabilizado | 0,001911 | 14,7 | 19 | |
| cpu | 0,001585 | 12,2 | 6 | |
| cpu | 0,000415 | 3,2 | 6 | |
| cpu | 0,000080 | 0,6 | 1 | |
| cpu | 0,000007 | 0,1 | 6 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000080 | 0,000128 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 6 | 0,001585 | 0,003313 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 6 | 0,000415 | 0,009570 | 1 | 18 | 0 | 6 | 0 |
| CLOSE | 6 | 0,000007 | 0,000012 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2069586320
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0043 67,2% do tempo · 66,7% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0063 32,8% do tempo · 33,3% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000020 | 32,8 | 1 | 33,3 | 0 | 0 | 0,000061 | 3 | 2 | 190757 | ||
| 2 | 1 | 1 | 1 | 0,000041 | 67,2 | 2 | 66,7 | 0 | 0 | 0,000041 | 2 | 1 | 202796 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#27 · SELECT
sql_id drt86kmzq1dbhhv 4284527984Texto
SELECT * FROM TAB_00231 T WHERE ((T.COL_0088 = *** AND :B1 = '***') OR (T.COL_0088 = *** AND T.COL_0032 = COL_0089.COL_0090 AND :B1 = '***') OR (T.COL_0088 = *** AND T.COL_0032 = COL_0089.COL_0090 AND :B1 = '***') ) AND T.COL_0091 <= COL_0089.COL_0092 AND ( T.COL_0093 >= COL_0089.COL_0094 OR T.COL_0093 IS NULL) ORDER BY T.COL_0095, T.COL_0096
- 1 TAB_0023: operação 2 do plano
- 2 operação 1 (SORT ORDER BY) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,004538 | 36,9 | 9 | |
| cpu | 0,003259 | 26,5 | 6 | |
| cpu | 0,002024 | 16,4 | 1 | |
| cpu | 0,001296 | 10,5 | 1 | |
| recursivo | 0,001191 | 9,7 | ||
| cpu | 0,000001 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,001296 | 0,002087 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,002625 | 0,004446 | 0 | 16 | 0 | 0 | 0 |
| FETCH | 6 | 0,003259 | 0,005776 | 0 | 12 | 0 | 552 | 0 |
| CLOSE | 1 | 0,000001 | 0,000000 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2769640011
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · TABLE ACCESS FULL TAB_0023 63,5% do tempo · 100,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 2 Id 1 · SORT ORDER BY 36,5% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 552 | 1 | 0,001434 | 36,5 | 0 | 0,0 | 0 | 0 | 0,003926 | 12 | 4 | |||
| 2 | 1 | 552 | 1 | 0,002492 | 63,5 | 12 | 100,0 | 0 | 0 | 0,002492 | 12 | 3 | 192745 |
Ordenação (ORDER BY)
SORT ORDER BY
Ordena as linhas para o ORDER BY.
- Boa quando
- Poucas linhas, ordenação em memória.
- Ruim quando
- Muitas linhas: a ordenação não cabe na workarea e grava no TEMP. Um índice na ordem pedida pode evitar o SORT, principalmente com ROWNUM ou FETCH FIRST.
- No plano, olhe
- PW maior que zero e Tempo próprio (s).
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#28 · INSERT
sql_id bmnrd2u43bap2hv 2285218466Texto
INSERT INTO TAB_0035 (COL_0086, COL_0032, COL_0039, COL_0137, COL_0132, COL_0133, COL_0134, COL_0198, COL_0199, COL_0136, COL_0059, COL_0062, COL_0101) VALUES (:B13 , :B12 , :B11 , :B10 , :B9 , :B8 , :B7 , :B6 , :B5 , :B4 , :B3 , :B2 , :B1 )
- 1 operação 1 (LOAD TABLE CONVENTIONAL) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| espera | 0,009060 | 73,7 | 2 | |
| cpu | 0,001761 | 14,3 | 1 | |
| não contabilizado | 0,001201 | 9,8 | 3 | |
| cpu | 0,000274 | 2,2 | 1 | |
| cpu | 0,000003 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000274 | 0,000479 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,001761 | 0,011816 | 2 | 1 | 10 | 1 | 1 |
| CLOSE | 1 | 0,000003 | 0,000004 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 0
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,009993 | 100,0 | 1 | 100,0 | 2 | 0 | 0,009993 | 1 |
Inserção convencional
LOAD TABLE CONVENTIONAL
Insere as linhas na tabela pelo caminho normal do INSERT.
- Boa quando
- Inserções do dia a dia.
- Ruim quando
- Triggers, índices e constraints da tabela pesam aqui; em carga grande, o modo direto (APPEND) grava mais rápido.
- No plano, olhe
- Tempo próprio (s) e as esperas do comando.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#29 · SELECT
sql_id 61x5n662780a6hv 2222195014Texto
select u.name, o.name, a.COL_0052, o.obj# from association$1 a, user$ u, obj$ o where a.obj# = :1 and a.property = :2 and a.COL_0053 = o.obj# and u.user# = o.owner#
- 1 ASSOCIATION$: operação 3 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,005217 | 42,4 | 260 | |
| cpu | 0,005181 | 42,2 | 65 | |
| cpu | 0,000894 | 7,3 | 65 | |
| cpu | 0,000862 | 7,0 | 65 | |
| cpu | 0,000136 | 1,1 | 65 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 65 | 0,000862 | 0,001414 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 65 | 0,005181 | 0,009158 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 65 | 0,000894 | 0,001491 | 0 | 130 | 0 | 0 | 0 |
| CLOSE | 65 | 0,000136 | 0,000227 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2485131612
Das linhas STAT do trace; plano gravado 4 vezes, mostrando o último.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 3 · TABLE ACCESS FULL ASSOCIATION$ 93,3% do tempo · 100,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 0,000004 | 4,5 | 0 | 0,0 | 0 | 0 | 0,000089 | 2 | 5 | ||||
| 2 | 0 | 1 | 0,000002 | 2,2 | 0 | 0,0 | 0 | 0 | 0,000085 | 2 | 4 | ||||
| 3 | 1 | 0 | 1 | 0,000083 | 93,3 | 2 | 100,0 | 0 | 0 | 0,000083 | 2 | 2 | 440 | ||
| 4 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 18 | |||
| 5 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 36 | |||
| 6 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 22 | |||
| 7 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 11 |
Junção em laço (nested loops)
NESTED LOOPS
Para cada linha do row source externo (outer, driving), executa o row source interno (inner).
- Boa quando
- Poucas linhas no outer e acesso seletivo por índice no inner. Devolve as primeiras linhas rápido (bom para FIRST_ROWS).
- Ruim quando
- Muitas linhas no outer: o inner executa milhares de vezes. Costuma vir de cardinalidade subestimada no outer; um HASH JOIN leria cada lado uma vez só.
- No plano, olhe
- Exec das operações do inner e, no outer, Estimado comparado com Linhas/exec.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Acesso à tabela pelo cluster
TABLE ACCESS CLUSTER
Lê a tabela guardada num cluster, pela chave do cluster.
- Boa quando
- Tabelas que são sempre lidas juntas pela mesma chave.
- Ruim quando
- Cluster mal dimensionado, com blocos encadeados.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#32 · SELECT
sql_id dhxd3kb4f5ybdhv 3370318189Texto
SELECT COL_0086, COL_0132, COL_0133, DECODE(COL_0134, '***', '***', '***', '***', '***') COL_0135, COL_0136, COL_0137 FROM TAB_00351 WHERE COL_0032 = COL_0089.COL_0090 AND COL_0039 = COL_0089.COL_0138 AND COL_0101 IS NULL AND ( (((COL_0089.COL_0094 > COL_0132 AND COL_0089.COL_0094 < COL_0133) OR (COL_0089.COL_0092 > COL_0132 AND COL_0089.COL_0092 < COL_0133) AND COL_0134 IN ('***')) ) OR ( ( COL_0089.COL_0094 > COL_0132) AND COL_0134 IN ('***','***') AND COL_0137 <> '***'))
- 1 TAB_0035: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,005553 | 49,7 | 1 | |
| não contabilizado | 0,003892 | 34,8 | 4 | |
| recursivo | 0,001550 | 13,9 | ||
| cpu | 0,000168 | 1,5 | 1 | |
| cpu | 0,000007 | 0,1 | 1 | |
| cpu | 0,000001 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,006530 | 0,010883 | 0 | 28 | 0 | 0 | 1 |
| EXEC | 1 | 0,000007 | 0,000012 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000168 | 0,000275 | 0 | 6 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000001 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 508576461
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0,000272 | 100,0 | 6 | 100,0 | 0 | 0 | 0,000272 | 6 | 2 | 190484 |
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#33 · SELECT
sql_id 4gh2v4tbkq9a5hv 1462445381Texto
SELECT '***' FROM TAB_0017 COL_0260, TAB_0016123 COL_0241 WHERE COL_0260.COL_0032 = COL_0089.COL_0090 AND COL_0260.COL_0261 = COL_0089.COL_0138 AND COL_0241.COL_0262 <> '***' AND COL_0260.COL_0032 = COL_0241.COL_0032 AND COL_0260.COL_0039 = COL_0241.COL_0039 UNION SELECT '***' FROM TAB_0016123 COL_0241 WHERE COL_0241.COL_0032 = COL_0089.COL_0090 AND COL_0241.COL_0039 = COL_0089.COL_0138 AND COL_0241.COL_0262 <> '***'
- 1 TAB_0016, tabela do índice IDX_0010: operação 7 do plano
- 2 TAB_0016: operação 4 do plano
- 3 TAB_0016: operação 6 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,005034 | 50,6 | 1 | |
| não contabilizado | 0,003474 | 34,9 | 4 | |
| recursivo | 0,001319 | 13,3 | ||
| cpu | 0,000096 | 1,0 | 1 | |
| cpu | 0,000019 | 0,2 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,005832 | 0,009751 | 0 | 16 | 0 | 0 | 1 |
| EXEC | 1 | 0,000019 | 0,000029 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000096 | 0,000160 | 0 | 4 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2719423886
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 7 · INDEX UNIQUE SCAN IDX_0010 63,3% do tempo · 25,0% das leituras lógicas
- 2 Id 4 · TABLE ACCESS FULL TAB_0016 17,5% do tempo · 50,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 3 Id 6 · TABLE ACCESS BY INDEX ROWID TAB_0016 4,8% do tempo · 25,0% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 2 | 0,000018 | 10,8 | 0 | 0,0 | 0 | 0 | 0,000166 | 4 | 5 | ||||
| 2 | 0 | 0,000005 | 3,0 | 0 | 0,0 | 0 | 0 | 0,000148 | 4 | ||||||
| 3 | 0 | 1 | 0,000001 | 0,6 | 0 | 0,0 | 0 | 0 | 0,000030 | 2 | 2 | ||||
| 4 | 2 | 0 | 1 | 0,000029 | 17,5 | 2 | 50,0 | 0 | 0 | 0,000029 | 2 | 2 | 190772 | ||
| 5 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 199136 | |||
| 6 | 3 | 0 | 1 | 0,000008 | 4,8 | 1 | 25,0 | 0 | 0 | 0,000113 | 2 | 1 | 190772 | ||
| 7 | 1 | 1 | 1 | 0,000105 | 63,3 | 1 | 25,0 | 0 | 0 | 0,000105 | 1 | 0 | 198973 |
Remoção de repetidos por ordenação
SORT UNIQUE
Tira as linhas repetidas (DISTINCT, UNION, IN com subconsulta) ordenando o resultado.
- Boa quando
- Poucas linhas.
- Ruim quando
- Volume grande; DISTINCT colocado para esconder uma junção que multiplica linhas.
- No plano, olhe
- Linhas antes e depois da operação, e PW.
União dos ramos (UNION ALL)
UNION-ALL
Devolve os resultados de cada ramo, um depois do outro, sem eliminar repetidos.
- Boa quando
- Não custa em si.
- Ruim quando
- Ramos que leem a mesma tabela várias vezes.
- No plano, olhe
- Cada ramo abaixo.
Junção em laço (nested loops)
NESTED LOOPS
Para cada linha do row source externo (outer, driving), executa o row source interno (inner).
- Boa quando
- Poucas linhas no outer e acesso seletivo por índice no inner. Devolve as primeiras linhas rápido (bom para FIRST_ROWS).
- Ruim quando
- Muitas linhas no outer: o inner executa milhares de vezes. Costuma vir de cardinalidade subestimada no outer; um HASH JOIN leria cada lado uma vez só.
- No plano, olhe
- Exec das operações do inner e, no outer, Estimado comparado com Linhas/exec.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#34 · SELECT
sql_id 3nvfb7mqmg15mhv 3979838643Texto
Select PKG_0003.ROT_0003 ( '***' , TO_DATE('***','***') , '***' , '***' ) From Dual
- 1 operação 1 (FAST DUAL) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,003730 | 42,4 | 5 | |
| cpu | 0,002364 | 26,9 | 1 | |
| cpu | 0,001827 | 20,8 | 2 | |
| recursivo | 0,000815 | 9,3 | ||
| espera | 0,000033 | 0,4 | 1 | |
| cpu | 0,000018 | 0,2 | 1 | |
| cpu | 0,000005 | 0,1 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,002364 | 0,003855 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000018 | 0,000031 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,002327 | 0,004897 | 0 | 7 | 34 | 1 | 0 |
| CLOSE | 1 | 0,000005 | 0,000009 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1546270724
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0,000003 | 100,0 | 0 | 0,0 | 0 | 0 | 0,000003 | 0 | 2 |
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#35 · DELETE
sql_id 4qms6yajbu8wchv 2730304396Texto
delete from "ESQ_01"."TAB_00402" where "COL_0086" = :1
- 1 operação 1 (DELETE TAB_0040) não tem objeto próprio no texto
- 2 TAB_0040: operação 2 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| recursivo | 0,005970 | 71,2 | ||
| não contabilizado | 0,000996 | 11,9 | 3 | |
| cpu | 0,000932 | 11,1 | 1 | |
| cpu | 0,000486 | 5,8 | 1 | |
| cpu | 0,000001 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000486 | 0,000901 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,003345 | 0,007483 | 1 | 26 | 58 | 2 | 1 |
| CLOSE | 1 | 0,000001 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2302209967
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · DELETE TAB_0040 99,3% do tempo · 76,9% das leituras lógicas
- 2 Id 2 · TABLE ACCESS FULL TAB_0040 0,7% do tempo · 23,1% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,006512 | 99,3 | 20 | 76,9 | 1 | 0 | 0,006559 | 26 | |||||
| 2 | 2 | 2 | 2 | 0,000047 | 0,7 | 6 | 23,1 | 0 | 0 | 0,000047 | 6 | 2 | 192742 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
| # | Duração (s) | Texto |
|---|---|---|
| 46 | 0,005 | delete from "ESQ_01"."TAB_0041" where "COL_0170" = :1 |
| 136 | 0,001 | delete from "ESQ_01"."TAB_0039" where "COL_0170" = :1 |
#39 · SELECT
sql_id 7mxr9pjnj9tkahv 1762977354Texto
select a.COL_0054, a.COL_0055 from association$1 a where a.obj# = :1 and a.property = :2
- 1 ASSOCIATION$: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,003439 | 45,1 | 60 | |
| não contabilizado | 0,003128 | 41,0 | 240 | |
| cpu | 0,000498 | 6,5 | 60 | |
| cpu | 0,000471 | 6,2 | 60 | |
| cpu | 0,000085 | 1,1 | 60 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 60 | 0,000498 | 0,000812 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 60 | 0,003439 | 0,005882 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 60 | 0,000471 | 0,000781 | 0 | 120 | 0 | 0 | 0 |
| CLOSE | 60 | 0,000085 | 0,000146 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1783251294
Das linhas STAT do trace; plano gravado 4 vezes, mostrando o último.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0,000025 | 100,0 | 2 | 100,0 | 0 | 0 | 0,000025 | 2 | 2 | 440 |
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#41 · SELECT
sql_id 08ndunzrd46fnhv 4006746580Texto
SELECT DISTINCT COL_0095 FROM TAB_00231 COL_0098 WHERE COL_0098.COL_0032 = COL_0089.COL_0090 AND :B1 = '***' UNION ALL SELECT DISTINCT COL_0095 FROM TAB_00231 COL_0098 WHERE COL_0098.COL_0032 = '***' AND :B1 = '***'
- 1 TAB_0023: operação 7 do plano
- 2 operação 5 (HASH UNIQUE) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,002527 | 38,9 | 4 | |
| cpu | 0,002274 | 35,0 | 1 | |
| cpu | 0,000961 | 14,8 | 1 | |
| cpu | 0,000471 | 7,3 | 1 | |
| recursivo | 0,000254 | 3,9 | ||
| cpu | 0,000001 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000471 | 0,000762 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,001116 | 0,001929 | 0 | 4 | 0 | 0 | 0 |
| FETCH | 1 | 0,002274 | 0,003796 | 0 | 12 | 0 | 14 | 0 |
| CLOSE | 1 | 0,000001 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 913560347
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 7 · TABLE ACCESS FULL TAB_0023 3,4% do tempo · 100,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 2 Id 5 · HASH UNIQUE 92,7% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 14 | 0,000004 | 0,1 | 0 | 0,0 | 0 | 0 | 0,003816 | 12 | ||||||
| 2 | 0 | 14 | 0,000036 | 0,9 | 0 | 0,0 | 0 | 0 | 0,000037 | 0 | 5 | ||||
| 3 | 0 | 0,000001 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000001 | 0 | ||||||
| 4 | 0 | 446 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 4 | 192745 | |||
| 5 | 2 | 14 | 14 | 0,003536 | 92,7 | 0 | 0,0 | 0 | 0 | 0,003775 | 12 | 4 | |||
| 6 | 552 | 0,000111 | 2,9 | 0 | 0,0 | 0 | 0 | 0,000239 | 12 | ||||||
| 7 | 1 | 552 | 552 | 0,000128 | 3,4 | 12 | 100,0 | 0 | 0 | 0,000128 | 12 | 3 | 192745 |
União dos ramos (UNION ALL)
UNION-ALL
Devolve os resultados de cada ramo, um depois do outro, sem eliminar repetidos.
- Boa quando
- Não custa em si.
- Ruim quando
- Ramos que leem a mesma tabela várias vezes.
- No plano, olhe
- Cada ramo abaixo.
Remoção de repetidos por hash
HASH UNIQUE
Tira as linhas repetidas usando uma tabela hash em memória.
- Boa quando
- Poucas linhas distintas.
- Ruim quando
- Volume grande; DISTINCT colocado para esconder uma junção que multiplica linhas.
- No plano, olhe
- Linhas antes e depois da operação, e PW.
Filtro
FILTER
Aplica um predicado às linhas do row source abaixo. Com dois row sources, executa o segundo (subquery não desaninhada) para cada linha do primeiro.
- Boa quando
- Um row source só, ou subquery executada poucas vezes (o FILTER guarda em cache os resultados já calculados).
- Ruim quando
- Subquery executada linha a linha (Exec alto no segundo row source): permitir o unnesting ou reescrever como junção costuma resolver.
- No plano, olhe
- Exec do segundo row source.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#46 · DELETE
sql_id dfrsttzpa81pmhv 3936618163Texto
delete from "ESQ_01"."TAB_00412" where "COL_0170" = :1
- 1 operação 1 (DELETE TAB_0041) não tem objeto próprio no texto
- 2 TAB_0041: operação 2 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| espera | 0,001936 | 37,6 | 1 | |
| recursivo | 0,001427 | 27,7 | ||
| cpu | 0,000888 | 17,2 | 2 | |
| não contabilizado | 0,000673 | 13,1 | 5 | |
| cpu | 0,000226 | 4,4 | 1 | |
| cpu | 0,000001 | 0,0 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000226 | 0,000361 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0,001708 | 0,004790 | 1 | 17 | 37 | 4 | 1 |
| CLOSE | 2 | 0,000001 | 0,000000 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2946369044
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · DELETE TAB_0041 99,1% do tempo · 25,0% das leituras lógicas
- 2 Id 2 · TABLE ACCESS FULL TAB_0041 0,9% do tempo · 75,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,003744 | 99,1 | 2 | 25,0 | 1 | 0 | 0,003779 | 8 | |||||
| 2 | 2 | 2 | 2 | 0,000035 | 0,9 | 6 | 75,0 | 0 | 0 | 0,000035 | 6 | 2 | 192743 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
| # | Duração (s) | Texto |
|---|---|---|
| 116 | 0,001 | delete from "ESQ_01"."TAB_0043" where "COL_0180" = :1 |
#47 · SELECT
sql_id 70690x7jfswszhv 3807146783Texto
SELECT *** COL_0086 FROM TAB_0023 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = '***' GROUP BY COL_0087.COL_0088 UNION SELECT *** COL_0086 FROM TAB_0023 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = COL_0089.COL_0090 GROUP BY COL_0087.COL_0088 UNION SELECT *** COL_0086 FROM TAB_0023 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = COL_0089.COL_0090 GROUP BY COL_0087.COL_0088
- 1 IDX_0016 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 4)
- 2 IDX_0016 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 8)
- 3 operação 7 (SORT GROUP BY NOSORT) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,002361 | 46,6 | 1 | |
| não contabilizado | 0,001975 | 39,0 | 4 | |
| recursivo | 0,000501 | 9,9 | ||
| cpu | 0,000212 | 4,2 | 1 | |
| cpu | 0,000014 | 0,3 | 1 | |
| cpu | 0,000001 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,002656 | 0,004700 | 0 | 8 | 0 | 0 | 1 |
| EXEC | 1 | 0,000014 | 0,000022 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000212 | 0,000341 | 0 | 8 | 0 | 2 | 0 |
| CLOSE | 1 | 0,000001 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3312525320
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 4 · INDEX RANGE SCAN IDX_0016 37,5% do tempo · 37,5% das leituras lógicas
Percorre uma faixa larga do índice: confira a seletividade e a ordem das colunas. - 2 Id 8 · INDEX RANGE SCAN IDX_0016 4,8% do tempo · 37,5% das leituras lógicas
Percorre uma faixa larga do índice: confira a seletividade e a ordem das colunas. - 3 Id 7 · SORT GROUP BY NOSORT 27,3% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 0,000022 | 6,6 | 0 | 0,0 | 0 | 0 | 0,000333 | 8 | 7 | ||||
| 2 | 2 | 0,000007 | 2,1 | 0 | 0,0 | 0 | 0 | 0,000311 | 8 | ||||||
| 3 | 1 | 1 | 0,000026 | 7,8 | 0 | 0,0 | 0 | 0 | 0,000151 | 3 | 3 | ||||
| 4 | 1 | 552 | 342 | 0,000125 | 37,5 | 3 | 37,5 | 0 | 0 | 0,000125 | 3 | 2 | 202345 | ||
| 5 | 0 | 1 | 0,000003 | 0,9 | 0 | 0,0 | 0 | 0 | 0,000046 | 2 | 2 | ||||
| 6 | 0 | 85 | 0,000043 | 12,9 | 2 | 25,0 | 0 | 0 | 0,000043 | 2 | 1 | 202345 | |||
| 7 | 3 | 1 | 1 | 0,000091 | 27,3 | 0 | 0,0 | 0 | 0 | 0,000107 | 3 | 2 | |||
| 8 | 2 | 339 | 169 | 0,000016 | 4,8 | 3 | 37,5 | 0 | 0 | 0,000016 | 3 | 1 | 202345 |
Remoção de repetidos por ordenação
SORT UNIQUE
Tira as linhas repetidas (DISTINCT, UNION, IN com subconsulta) ordenando o resultado.
- Boa quando
- Poucas linhas.
- Ruim quando
- Volume grande; DISTINCT colocado para esconder uma junção que multiplica linhas.
- No plano, olhe
- Linhas antes e depois da operação, e PW.
União dos ramos (UNION ALL)
UNION-ALL
Devolve os resultados de cada ramo, um depois do outro, sem eliminar repetidos.
- Boa quando
- Não custa em si.
- Ruim quando
- Ramos que leem a mesma tabela várias vezes.
- No plano, olhe
- Cada ramo abaixo.
Agrupamento por ordenação
SORT GROUP BY
Agrupa as linhas para o GROUP BY ordenando pela chave do grupo.
- Boa quando
- Poucas linhas, ou o resultado precisa sair ordenado.
- Ruim quando
- Muitas linhas, com gravação no TEMP.
- No plano, olhe
- PW e Tempo próprio (s).
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#48 · CREATE TABLE
4 variantesTexto
CREATE GLOBAL TEMPORARY T
Texto cortado: o trace declara 184 caracteres.
Texto da forma: os literais viraram :s (texto) e :n (número).
Variantes que mais gastaram
| Chamadas | Inclusivo (s) | Literais |
|---|---|---|
| 3 | 0,001 | |
| 3 | 0,001 | |
| 3 | 0,001 | |
| 3 | 0,001 |
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,002002 | 41,9 | 4 | |
| não contabilizado | 0,001644 | 34,4 | 12 | |
| recursivo | 0,000622 | 13,0 | ||
| cpu | 0,000500 | 10,5 | 4 | |
| cpu | 0,000005 | 0,1 | 4 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 4 | 0,002002 | 0,003326 | 0 | 0 | 0 | 0 | 4 |
| EXEC | 4 | 0,000871 | 0,001436 | 0 | 12 | 0 | 0 | 0 |
| CLOSE | 4 | 0,000005 | 0,000011 | 0 | 0 | 0 | 0 | 0 |
SQL recursivo executado por este comando
#51 · SELECT
sql_id 87x10zx4cp3y0hv 1221234624Texto
SELECT *** COL_0086 FROM TAB_0024123 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = '***' GROUP BY COL_0087.COL_0088 UNION SELECT *** COL_0086 FROM TAB_0024123 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = COL_0089.COL_0090 GROUP BY COL_0087.COL_0088 UNION SELECT *** COL_0086 FROM TAB_0024123 COL_0087 WHERE COL_0087.COL_0088 = '***' AND COL_0087.COL_0032 = COL_0089.COL_0090 GROUP BY COL_0087.COL_0088
- 1 TAB_0024: operação 8 do plano
- 2 TAB_0024: operação 4 do plano
- 3 TAB_0024: operação 6 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,002410 | 52,6 | 1 | |
| não contabilizado | 0,001586 | 34,6 | 4 | |
| recursivo | 0,000486 | 10,6 | ||
| cpu | 0,000086 | 1,9 | 1 | |
| cpu | 0,000011 | 0,2 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,002703 | 0,004418 | 0 | 8 | 0 | 0 | 1 |
| EXEC | 1 | 0,000011 | 0,000019 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000086 | 0,000141 | 0 | 6 | 0 | 2 | 0 |
| CLOSE | 1 | 0,000000 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 891646665
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 8 · TABLE ACCESS FULL TAB_0024 52,1% do tempo · 33,3% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 2 Id 4 · TABLE ACCESS FULL TAB_0024 20,0% do tempo · 33,3% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 3 Id 6 · TABLE ACCESS FULL TAB_0024 8,6% do tempo · 33,3% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 0,000017 | 12,1 | 0 | 0,0 | 0 | 0 | 0,000137 | 6 | 9 | ||||
| 2 | 2 | 0,000007 | 5,0 | 0 | 0,0 | 0 | 0 | 0,000120 | 6 | ||||||
| 3 | 1 | 1 | 0,000001 | 0,7 | 0 | 0,0 | 0 | 0 | 0,000029 | 2 | 3 | ||||
| 4 | 2 | 13 | 7 | 0,000028 | 20,0 | 2 | 33,3 | 0 | 0 | 0,000028 | 2 | 2 | 192750 | ||
| 5 | 0 | 1 | 0,000002 | 1,4 | 0 | 0,0 | 0 | 0 | 0,000014 | 2 | 3 | ||||
| 6 | 3 | 0 | 3 | 0,000012 | 8,6 | 2 | 33,3 | 0 | 0 | 0,000012 | 2 | 2 | 192750 | ||
| 7 | 1 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000070 | 2 | 3 | ||||
| 8 | 1 | 13 | 6 | 0,000073 | 52,1 | 2 | 33,3 | 0 | 0 | 0,000073 | 2 | 2 | 192750 |
Remoção de repetidos por ordenação
SORT UNIQUE
Tira as linhas repetidas (DISTINCT, UNION, IN com subconsulta) ordenando o resultado.
- Boa quando
- Poucas linhas.
- Ruim quando
- Volume grande; DISTINCT colocado para esconder uma junção que multiplica linhas.
- No plano, olhe
- Linhas antes e depois da operação, e PW.
União dos ramos (UNION ALL)
UNION-ALL
Devolve os resultados de cada ramo, um depois do outro, sem eliminar repetidos.
- Boa quando
- Não custa em si.
- Ruim quando
- Ramos que leem a mesma tabela várias vezes.
- No plano, olhe
- Cada ramo abaixo.
Agrupamento por ordenação
SORT GROUP BY
Agrupa as linhas para o GROUP BY ordenando pela chave do grupo.
- Boa quando
- Poucas linhas, ou o resultado precisa sair ordenado.
- Ruim quando
- Muitas linhas, com gravação no TEMP.
- No plano, olhe
- PW e Tempo próprio (s).
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#52 · SELECT
sql_id 0fxxq8umxumv3hv 2816298851Texto
select count(COL_0251) from SYS_FBA_TRACKEDTABLES1 where OBJ# = :1 and bitand(FLAGS, :2)=***
- 1 SYS_FBA_TRACKEDTABLES, tabela do índice SYS_C001489: operação 3 do plano
- 2 operação 1 (SORT AGGREGATE) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,002012 | 44,8 | 24 | |
| não contabilizado | 0,002001 | 44,5 | 95 | |
| cpu | 0,000273 | 6,1 | 24 | |
| cpu | 0,000116 | 2,6 | 24 | |
| cpu | 0,000091 | 2,0 | 23 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 24 | 0,000273 | 0,000475 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 24 | 0,002012 | 0,003684 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 24 | 0,000116 | 0,000185 | 0 | 24 | 0 | 24 | 0 |
| CLOSE | 23 | 0,000091 | 0,000149 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 832246118
Das linhas STAT do trace; plano gravado 3 vezes, mostrando o último.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 3 · INDEX UNIQUE SCAN SYS_C001489 50,0% do tempo · 100,0% das leituras lógicas
- 2 Id 1 · SORT AGGREGATE 40,0% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 0,000004 | 40,0 | 0 | 0,0 | 0 | 0 | 0,000010 | 1 | |||||
| 2 | 0 | 1 | 0,000001 | 10,0 | 0 | 0,0 | 0 | 0 | 0,000006 | 1 | 1 | 1271 | |||
| 3 | 1 | 0 | 1 | 0,000005 | 50,0 | 1 | 100,0 | 0 | 0 | 0,000005 | 1 | 0 | 1272 |
Agregação (COUNT, SUM, MAX...)
SORT AGGREGATE
Calcula as funções de agregação e devolve uma linha.
- Boa quando
- Barata em si: o custo está nas operações abaixo.
- Ruim quando
- Quase nunca.
- No plano, olhe
- As operações abaixo dela.
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#53 · PL/SQL
sql_id d7kdjgkfuxcpnhv 2645471924Texto
DECLARE COL_0074 INTEGER; ROT_0010 COL_0075.COL_0076; BEGIN FOR c1 IN (SELECT * FROM TAB_0021 WHERE COL_0064 = *** AND UPPER( ROT_0008 ) = '***' ORDER BY COL_0070 ) LOOP ROT_0010(ROT_0010.count + ***) := c1.COL_0071; END LOOP; PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); COL_0074 := PKG_0005.ROT_0011( '***','***','***','***','***',NULL,'***',NULL,NULL,NULL,'***','***' ); UPDATE TAB_0021 SET COL_0064 = COL_0074 WHERE COL_0064 = ***; DELETE FROM TAB_0020 WHERE COL_0064 = ***; END;
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,002675 | 61,4 | 1 | |
| não contabilizado | 0,001681 | 38,6 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,002675 | 0,004356 | 0 | 0 | 0 | 0 | 1 |
#54 · SELECT
sql_id 2pta3vm59y7tahv 3399425834Texto
SELECT PKG_0005.ROT_0006(), PKG_0005.ROT_0007(), PKG_0005.ROT_0008() FROM dual
- 1 operação 1 (FAST DUAL) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,002369 | 54,9 | 1 | |
| não contabilizado | 0,001667 | 38,6 | 4 | |
| cpu | 0,000239 | 5,5 | 1 | |
| cpu | 0,000027 | 0,6 | 1 | |
| cpu | 0,000017 | 0,4 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,002369 | 0,003858 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000027 | 0,000046 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000239 | 0,000387 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000017 | 0,000028 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1546270724
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0,000002 | 100,0 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 2 |
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#55 · INSERT
8 variantesTexto
INSERT INTO TAB_0021 ( COL_0070 , COL_0064 , ROT_0007 , COL_0071 , ROT_0008 , COL_0072 , COL_0073 ) VALUES ( SEQ_002.NEXTVAL , :n , :s , :s , :s , :s , :s )
- 1 operação 1 (LOAD TABLE CONVENTIONAL) não tem objeto próprio no texto
Texto da forma: os literais viraram :s (texto) e :n (número).
Variantes que mais gastaram
| Chamadas | Inclusivo (s) | Literais |
|---|---|---|
| 3 | 0,001 | ***, '***', '***', '***', '***', '*** |
| 3 | 0,001 | ***, '***', '***', '***', '***', '***' |
| 3 | 0,001 | ***, '***', '***', '***', '***', '***' |
| 3 | 0,001 | ***, '***', '***', '***', '***', '***' |
| 3 | 0,000 | ***, '***', '***', '***', '***', '***' |
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,002054 | 48,8 | 8 | |
| não contabilizado | 0,001699 | 40,4 | 24 | |
| cpu | 0,000437 | 10,4 | 8 | |
| cpu | 0,000019 | 0,5 | 8 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 8 | 0,002054 | 0,003455 | 0 | 0 | 0 | 0 | 8 |
| EXEC | 8 | 0,000437 | 0,000724 | 0 | 8 | 57 | 8 | 0 |
| CLOSE | 8 | 0,000019 | 0,000030 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 287011443
Das linhas STAT do trace; plano gravado 8 vezes, mostrando o da gravação mais demorada.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · LOAD TABLE CONVENTIONAL 94,4% do tempo · 100,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,000153 | 94,4 | 1 | 100,0 | 0 | 0 | 0,000162 | 1 | |||||
| 2 | 1 | 0,000009 | 5,6 | 0 | 0,0 | 0 | 0 | 0,000009 | 0 | 190036 |
Inserção convencional
LOAD TABLE CONVENTIONAL
Insere as linhas na tabela pelo caminho normal do INSERT.
- Boa quando
- Inserções do dia a dia.
- Ruim quando
- Triggers, índices e constraints da tabela pesam aqui; em carga grande, o modo direto (APPEND) grava mais rápido.
- No plano, olhe
- Tempo próprio (s) e as esperas do comando.
Sequence (NEXTVAL)
SEQUENCE
Gera os próximos números de uma sequence.
- Boa quando
- Cache adequado ao volume.
- Ruim quando
- Cache pequeno com muito uso: esperas em enq: SQ e no dicionário.
- No plano, olhe
- As esperas do comando, no perfil dele.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#57 · INSERT
4 variantesTexto
INSERT INTO TAB_0021 ( COL_0070 , COL_0064 , ROT_0007 , COL_0071 , ROT_0008 , COL_0072 , COL_0073 ) VALUES ( SEQ_002.NEXTVAL , :n , :s , null , :s , :s , :s )
- 1 operação 2 (SEQUENCE SEQ_002) não tem objeto próprio no texto
- 2 operação 1 (LOAD TABLE CONVENTIONAL) não tem objeto próprio no texto
Texto da forma: os literais viraram :s (texto) e :n (número).
Variantes que mais gastaram
| Chamadas | Inclusivo (s) | Literais |
|---|---|---|
| 3 | 0,002 | ***, '***', '***', '***', '***' |
| 3 | 0,001 | ***, '***', '***', '***', '***' |
| 3 | 0,001 | ***, '***', '***', '***', '***' |
| 3 | 0,000 | ***, '***', '***', '***', '***' |
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| recursivo | 0,001476 | 40,6 | ||
| cpu | 0,000942 | 25,9 | 4 | |
| não contabilizado | 0,000879 | 24,2 | 12 | |
| cpu | 0,000326 | 9,0 | 4 | |
| cpu | 0,000010 | 0,3 | 4 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 4 | 0,000942 | 0,001602 | 0 | 0 | 0 | 0 | 4 |
| EXEC | 4 | 0,001239 | 0,002011 | 0 | 6 | 33 | 4 | 0 |
| CLOSE | 4 | 0,000010 | 0,000020 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 287011443
Das linhas STAT do trace; plano gravado 4 vezes, mostrando o da gravação mais demorada.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · SEQUENCE SEQ_002 96,6% do tempo · 50,0% das leituras lógicas
- 2 Id 1 · LOAD TABLE CONVENTIONAL 3,4% do tempo · 50,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000060 | 3,4 | 1 | 50,0 | 0 | 0 | 0,001766 | 2 | |||||
| 2 | 1 | 1 | 0,001706 | 96,6 | 1 | 50,0 | 0 | 0 | 0,001706 | 1 | 190036 |
Inserção convencional
LOAD TABLE CONVENTIONAL
Insere as linhas na tabela pelo caminho normal do INSERT.
- Boa quando
- Inserções do dia a dia.
- Ruim quando
- Triggers, índices e constraints da tabela pesam aqui; em carga grande, o modo direto (APPEND) grava mais rápido.
- No plano, olhe
- Tempo próprio (s) e as esperas do comando.
Sequence (NEXTVAL)
SEQUENCE
Gera os próximos números de uma sequence.
- Boa quando
- Cache adequado ao volume.
- Ruim quando
- Cache pequeno com muito uso: esperas em enq: SQ e no dicionário.
- No plano, olhe
- As esperas do comando, no perfil dele.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
#60 · SELECT
sql_id 54944trf4zjwthv 3696215961Texto
Select COL_0017 From TAB_000212 where COL_0018 ='***'
- 1 TAB_0002, tabela do índice IDX_0001: operação 2 do plano
- 2 TAB_0002: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| recursivo | 0,001417 | 45,2 | ||
| cpu | 0,001003 | 32,0 | 1 | |
| não contabilizado | 0,000671 | 21,4 | 5 | |
| cpu | 0,000022 | 0,7 | 2 | |
| cpu | 0,000012 | 0,4 | 1 | |
| cpu | 0,000012 | 0,4 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,001827 | 0,003061 | 0 | 2 | 0 | 0 | 1 |
| EXEC | 1 | 0,000012 | 0,000019 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000022 | 0,000036 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000012 | 0,000021 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1532307768
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0001 70,4% do tempo · 50,0% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0002 29,6% do tempo · 50,0% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000008 | 29,6 | 1 | 50,0 | 0 | 0 | 0,000027 | 2 | 1 | 191790 | ||
| 2 | 1 | 1 | 1 | 0,000019 | 70,4 | 1 | 50,0 | 0 | 0 | 0,000019 | 1 | 0 | 200547 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
| # | Duração (s) | Texto |
|---|---|---|
| 108 | 0,001 | select COL_0016 from cdef$ where rowid=:1 |
#63 · DELETE
sql_id 6xwgapzx2uwy2hv 4197282754Texto
delete from "ESQ_01"."TAB_00541" where "COL_0155" = :1
- 1 TAB_0054: operação 2 do plano
- 2 operação 1 (DELETE TAB_0054) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,001314 | 44,5 | 5 | |
| cpu | 0,001142 | 38,7 | 2 | |
| cpu | 0,000494 | 16,7 | 1 | |
| cpu | 0,000001 | 0,0 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000494 | 0,000967 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0,001142 | 0,001981 | 0 | 30 | 68 | 22 | 1 |
| CLOSE | 2 | 0,000001 | 0,000003 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2430698258
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · TABLE ACCESS FULL TAB_0054 21,1% do tempo · 100,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 2 Id 1 · DELETE TAB_0054 78,9% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000487 | 78,9 | 0 | 0,0 | 0 | 0 | 0,000617 | 15 | |||||
| 2 | 1 | 11 | 9 | 0,000130 | 21,1 | 15 | 100,0 | 0 | 0 | 0,000130 | 15 | 3 | 192740 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#64 · DELETE
sql_id frn64wn5tg6huhv 194484762Texto
delete from "ESQ_01"."TAB_0052" where "COL_0086" = :1
- 1 operação 1 (DELETE TAB_0052) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| recursivo | 0,001430 | 49,6 | ||
| cpu | 0,000733 | 25,4 | 1 | |
| não contabilizado | 0,000557 | 19,3 | 3 | |
| cpu | 0,000161 | 5,6 | 1 | |
| cpu | 0,000001 | 0,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000161 | 0,000260 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,001605 | 0,002621 | 0 | 42 | 58 | 6 | 1 |
| CLOSE | 1 | 0,000001 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2128490758
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · DELETE TAB_0052 97,1% do tempo · 85,7% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,002055 | 97,1 | 36 | 85,7 | 0 | 0 | 0,002116 | 42 | |||||
| 2 | 6 | 6 | 0,000061 | 2,9 | 6 | 14,3 | 0 | 0 | 0,000061 | 6 | 2 | 190688 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
SQL recursivo executado por este comando
| # | Duração (s) | Texto |
|---|---|---|
| 115 | 0,001 | delete from "ESQ_01"."TAB_0053" where "COL_0197" = :1 |
#67 · SELECT
sql_id 4gnsbw8gt82wdhv 529795981Texto
select COL_0048 from xdb.TAB_00111 where COL_0049=:1 or COL_0050=:2
- 1 TAB_0011: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,001439 | 55,1 | 2 | |
| não contabilizado | 0,000990 | 37,9 | 8 | |
| cpu | 0,000107 | 4,1 | 2 | |
| cpu | 0,000071 | 2,7 | 2 | |
| cpu | 0,000003 | 0,1 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000107 | 0,000173 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0,001439 | 0,002314 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 2 | 0,000071 | 0,000117 | 0 | 12 | 0 | 0 | 0 |
| CLOSE | 2 | 0,000003 | 0,000006 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 439120039
Das linhas STAT do trace; plano gravado 2 vezes, mostrando o último.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0,000038 | 100,0 | 6 | 100,0 | 0 | 0 | 0,000038 | 6 | 2 | 57884 |
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#73 · SELECT
sql_id b96cv5jc82ku3hv 1484868419Texto
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE NO_PARALLEL(TAB_0097) opt_param('parallel_execution_enabled', 'false') NO_PARALLEL_INDEX(TAB_0097) NO_SQL_TUNE */ NVL(SUM(C1),***), NVL(SUM(C2),***) FROM (SELECT /*+ IGNORE_WHERE_CLAUSE NO_PARALLEL("TAB_0074") FULL("TAB_0074") NO_PARALLEL_INDEX("TAB_0074") */ *** AS C1, CASE WHEN "TAB_0074"."COL_0412"=:B1 THEN *** ELSE *** END AS C2 FROM "ESQ_01"."TAB_0074" "TAB_0074") TAB_0097
- 1 operação 1 (SORT AGGREGATE) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,001245 | 50,0 | 8 | |
| cpu | 0,000843 | 33,8 | 2 | |
| cpu | 0,000377 | 15,1 | 2 | |
| cpu | 0,000021 | 0,8 | 2 | |
| cpu | 0,000006 | 0,2 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000377 | 0,000608 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0,000843 | 0,001838 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 2 | 0,000021 | 0,000036 | 0 | 0 | 0 | 2 | 0 |
| CLOSE | 2 | 0,000006 | 0,000010 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3817987311
Das linhas STAT do trace; plano gravado 2 vezes, mostrando o último.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · SORT AGGREGATE 88,2% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 0,000015 | 88,2 | 0 | 0,0 | 0 | 0 | 0,000017 | 0 | |||||
| 2 | 0 | 8.168 | 0,000002 | 11,8 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 13 | 194163 |
Agregação (COUNT, SUM, MAX...)
SORT AGGREGATE
Calcula as funções de agregação e devolve uma linha.
- Boa quando
- Barata em si: o custo está nas operações abaixo.
- Ruim quando
- Quase nunca.
- No plano, olhe
- As operações abaixo dela.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#78 · SELECT
sql_id 8nxf3aj3j6kadhv 1192446285Texto
SELECT PKG_0005.ROT_0009() FROM dual
- 1 operação 1 (FAST DUAL) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,001315 | 57,5 | 1 | |
| não contabilizado | 0,000892 | 39,0 | 4 | |
| cpu | 0,000042 | 1,8 | 1 | |
| cpu | 0,000025 | 1,1 | 1 | |
| cpu | 0,000011 | 0,5 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,001315 | 0,002153 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000025 | 0,000044 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000042 | 0,000070 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000011 | 0,000018 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1546270724
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0,000002 | 100,0 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 2 |
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#90 · SELECT
sql_id 396wrcr5bfgpthv 3401006777Texto
select COL_0029 , COL_0030 from TAB_00061 where COL_0031 ='***'
- 1 TAB_0006: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000882 | 45,5 | 1 | |
| não contabilizado | 0,000765 | 39,5 | 5 | |
| cpu | 0,000251 | 13,0 | 2 | |
| cpu | 0,000026 | 1,3 | 1 | |
| cpu | 0,000013 | 0,7 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000882 | 0,001465 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000026 | 0,000043 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000251 | 0,000398 | 0 | 31 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000013 | 0,000031 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3402230504
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000178 | 100,0 | 31 | 100,0 | 0 | 0 | 0,000178 | 31 | 5 | 190385 |
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#95 · SELECT
sql_id 4zvma3j1yp48uhv 1139446042Texto
select COL_0027 from TAB_000512 where COL_0028 ='***'
- 1 TAB_0005, tabela do índice IDX_0002: operação 2 do plano
- 2 TAB_0005: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,001011 | 54,4 | 1 | |
| não contabilizado | 0,000738 | 39,7 | 5 | |
| cpu | 0,000053 | 2,9 | 2 | |
| cpu | 0,000043 | 2,3 | 1 | |
| cpu | 0,000012 | 0,6 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,001011 | 0,001677 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000043 | 0,000073 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000053 | 0,000087 | 0 | 3 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000012 | 0,000020 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1723849645
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0002 72,7% do tempo · 66,7% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0005 27,3% do tempo · 33,3% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000021 | 27,3 | 1 | 33,3 | 0 | 0 | 0,000077 | 3 | 2 | 191511 | ||
| 2 | 1 | 1 | 1 | 0,000056 | 72,7 | 2 | 66,7 | 0 | 0 | 0,000056 | 2 | 1 | 200480 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#98 · SELECT
sql_id cgt43dspav74qhv 716020886Texto
SELECT TAB_00061.COL_0031 , TAB_00061.COL_0029 FROM TAB_00061 WHERE lower ( TAB_00061.COL_0045 ) =lower ( '***' )
- 1 TAB_0006: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000755 | 41,7 | 5 | |
| cpu | 0,000746 | 41,2 | 1 | |
| cpu | 0,000294 | 16,2 | 2 | |
| cpu | 0,000011 | 0,6 | 1 | |
| cpu | 0,000004 | 0,2 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000746 | 0,001322 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000011 | 0,000019 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000294 | 0,000463 | 0 | 31 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000004 | 0,000006 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3402230504
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000184 | 100,0 | 31 | 100,0 | 0 | 0 | 0,000184 | 31 | 5 | 190385 |
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#101 · SELECT
sql_id c60v92x85ws0jhv 1348362257Texto
select text from view$1 where rowid=:1
- 1 VIEW$: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000747 | 42,6 | 24 | |
| cpu | 0,000607 | 34,6 | 6 | |
| cpu | 0,000265 | 15,1 | 6 | |
| cpu | 0,000067 | 3,8 | 6 | |
| cpu | 0,000066 | 3,8 | 6 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 6 | 0,000265 | 0,000524 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 6 | 0,000607 | 0,001000 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 6 | 0,000066 | 0,000112 | 0 | 12 | 0 | 6 | 0 |
| CLOSE | 6 | 0,000067 | 0,000116 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1028580536
Das linhas STAT do trace; plano gravado 4 vezes, mostrando o último.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000010 | 100,0 | 1 | 100,0 | 0 | 0 | 0,000010 | 1 | 1 | 69 |
Acesso à tabela pelo ROWID do próprio SQL
TABLE ACCESS BY USER ROWID
Lê a linha direto pelo ROWID que veio no comando.
- Boa quando
- Quase sempre: um bloco por linha.
- Ruim quando
- Quase nunca; ROWID guardado e usado depois de a linha mudar de lugar (MOVE, SHRINK, partição).
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#106 · SELECT
sql_id 9gvxp7q2g5jgshv 2230502904Texto
SELECT COL_0058.COL_0059, COL_0058.COL_0059 || '***' || COL_0058.COL_0060 FROM TAB_001812 COL_0058 WHERE ((COL_0058.COL_0059 = '***' AND '***' < to_date('***','***')) OR (COL_0058.COL_0059 in ('***') AND '***' >= to_date('***','***')))
- 1 TAB_0018, tabela do índice IDX_0013: operação 2 do plano
- 2 TAB_0018: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000839 | 53,5 | 1 | |
| não contabilizado | 0,000663 | 42,3 | 5 | |
| cpu | 0,000030 | 1,9 | 2 | |
| cpu | 0,000022 | 1,4 | 1 | |
| cpu | 0,000015 | 1,0 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000839 | 0,001460 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000022 | 0,000036 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000030 | 0,000048 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000015 | 0,000025 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3761481271
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0013 68,3% do tempo · 50,0% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0018 31,7% do tempo · 50,0% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000013 | 31,7 | 1 | 50,0 | 0 | 0 | 0,000041 | 2 | 1 | 190797 | ||
| 2 | 1 | 1 | 1 | 0,000028 | 68,3 | 1 | 50,0 | 0 | 0 | 0,000028 | 1 | 0 | 202894 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#107 · SELECT
sql_id dk43aj6c43v86hv 2554457350Texto
SELECT COL_0061.COL_0062, COL_0061.COL_0062 || '***' || COL_0061.COL_0063 FROM TAB_001912 COL_0061 WHERE COL_0059 = '***'
- 1 TAB_0019, tabela do índice IDX_0014: operação 2 do plano
- 2 TAB_0019: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000808 | 51,7 | 1 | |
| não contabilizado | 0,000642 | 41,0 | 5 | |
| cpu | 0,000063 | 4,0 | 2 | |
| cpu | 0,000042 | 2,7 | 1 | |
| cpu | 0,000009 | 0,6 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000808 | 0,001341 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000042 | 0,000073 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000063 | 0,000134 | 0 | 3 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000009 | 0,000016 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1040197197
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX RANGE SCAN IDX_0014 82,4% do tempo · 66,7% das leituras lógicas
Percorre uma faixa larga do índice: confira a seletividade e a ordem das colunas. - 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0019 17,6% do tempo · 33,3% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000015 | 17,6 | 1 | 33,3 | 0 | 0 | 0,000085 | 3 | 2 | 190865 | ||
| 2 | 1 | 1 | 1 | 0,000070 | 82,4 | 2 | 66,7 | 0 | 0 | 0,000070 | 2 | 1 | 199165 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#108 · SELECT
sql_id caf77n4gx5n0whv 533909532Texto
select COL_0016 from cdef$1 where rowid=:1
- 1 CDEF$: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000648 | 41,5 | 8 | |
| cpu | 0,000617 | 39,5 | 2 | |
| cpu | 0,000208 | 13,3 | 2 | |
| cpu | 0,000048 | 3,1 | 2 | |
| cpu | 0,000042 | 2,7 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000208 | 0,000336 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0,000617 | 0,001079 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 2 | 0,000048 | 0,000080 | 0 | 4 | 0 | 2 | 0 |
| CLOSE | 2 | 0,000042 | 0,000068 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1615075166
Das linhas STAT do trace; plano gravado 2 vezes, mostrando o último.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000020 | 100,0 | 1 | 100,0 | 0 | 0 | 0,000020 | 1 | 1 | 31 |
Acesso à tabela pelo ROWID do próprio SQL
TABLE ACCESS BY USER ROWID
Lê a linha direto pelo ROWID que veio no comando.
- Boa quando
- Quase sempre: um bloco por linha.
- Ruim quando
- Quase nunca; ROWID guardado e usado depois de a linha mudar de lugar (MOVE, SHRINK, partição).
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#109 · DELETE
sql_id ab0ujqa0zg0hjhv 2180481553Texto
delete from "ESQ_01"."TAB_00371" where "COL_0155" = :1
- 1 TAB_0037: operação 2 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000681 | 43,7 | 5 | |
| cpu | 0,000676 | 43,4 | 2 | |
| cpu | 0,000200 | 12,8 | 1 | |
| cpu | 0,000002 | 0,1 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000200 | 0,000321 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0,000676 | 0,001235 | 0 | 2 | 0 | 0 | 1 |
| CLOSE | 2 | 0,000002 | 0,000003 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3020594291
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · TABLE ACCESS FULL TAB_0037 93,9% do tempo · 100,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0,000004 | 6,1 | 0 | 0,0 | 0 | 0 | 0,000066 | 1 | ||||||
| 2 | 1 | 0 | 1 | 0,000062 | 93,9 | 1 | 100,0 | 0 | 0 | 0,000062 | 1 | 2 | 192741 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#110 · SELECT
sql_id 9ksy7maahssuqhv 2500617046Texto
select obj#,type#,ctime,mtime,stime, status, dataobj#, flags, oid$, spare1, spare2 from obj$1 where owner#=:1 and name=:2 and namespace=:3 and remoteowner is null and linkname is null and subname is null
- 1 OBJ$, tabela do índice I_OBJ2: operação 2 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000706 | 45,9 | 8 | |
| não contabilizado | 0,000648 | 42,2 | 26 | |
| cpu | 0,000097 | 6,3 | 2 | |
| cpu | 0,000083 | 5,4 | 8 | |
| cpu | 0,000003 | 0,2 | 8 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000097 | 0,000207 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 8 | 0,000706 | 0,001162 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 8 | 0,000083 | 0,000157 | 0 | 24 | 0 | 0 | 0 |
| CLOSE | 8 | 0,000003 | 0,000011 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 853875749
Das linhas STAT do trace; plano gravado 2 vezes, mostrando o último.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX RANGE SCAN I_OBJ2 92,9% do tempo · 100,0% das leituras lógicas
Percorre uma faixa larga do índice: confira a seletividade e a ordem das colunas.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 0,000003 | 7,1 | 0 | 0,0 | 0 | 0 | 0,000042 | 3 | 4 | 18 | |||
| 2 | 1 | 0 | 1 | 0,000039 | 92,9 | 3 | 100,0 | 0 | 0 | 0,000039 | 3 | 3 | 37 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#111 · SELECT
sql_id a2czyy0t875yuhv 847484890Texto
Select COL_0046 from TAB_001012 Where COL_0047 ='***'
- 1 TAB_0010, tabela do índice IDX_0006: operação 2 do plano
- 2 TAB_0010: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000742 | 50,6 | 1 | |
| não contabilizado | 0,000657 | 44,8 | 5 | |
| cpu | 0,000031 | 2,1 | 2 | |
| cpu | 0,000026 | 1,8 | 1 | |
| cpu | 0,000011 | 0,7 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000742 | 0,001355 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000026 | 0,000043 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000031 | 0,000050 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000011 | 0,000019 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2787323455
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0006 65,0% do tempo · 50,0% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0010 35,0% do tempo · 50,0% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000014 | 35,0 | 1 | 50,0 | 0 | 0 | 0,000040 | 2 | 1 | 191798 | ||
| 2 | 1 | 1 | 1 | 0,000026 | 65,0 | 1 | 50,0 | 0 | 0 | 0,000026 | 1 | 0 | 200497 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#113 · SELECT
sql_id d26b92as16n6rhv 2954055895Texto
select default$ from col$1 where rowid=:1
- 1 COL$: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000557 | 38,8 | 24 | |
| cpu | 0,000519 | 36,1 | 6 | |
| cpu | 0,000259 | 18,0 | 6 | |
| cpu | 0,000059 | 4,1 | 6 | |
| cpu | 0,000042 | 2,9 | 6 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 6 | 0,000259 | 0,000425 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 6 | 0,000519 | 0,000848 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 6 | 0,000042 | 0,000071 | 0 | 12 | 0 | 6 | 0 |
| CLOSE | 6 | 0,000059 | 0,000092 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3213098354
Das linhas STAT do trace; plano gravado 3 vezes, mostrando o último.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000003 | 100,0 | 1 | 100,0 | 0 | 0 | 0,000003 | 1 | 1 | 21 |
Acesso à tabela pelo ROWID do próprio SQL
TABLE ACCESS BY USER ROWID
Lê a linha direto pelo ROWID que veio no comando.
- Boa quando
- Quase sempre: um bloco por linha.
- Ruim quando
- Quase nunca; ROWID guardado e usado depois de a linha mudar de lugar (MOVE, SHRINK, partição).
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#115 · DELETE
sql_id 0g5361p55vdu4hv 1247655748Texto
delete from "ESQ_01"."TAB_00531" where "COL_0197" = :1
- 1 TAB_0053: operação 2 do plano
- 2 operação 1 (DELETE TAB_0053) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000739 | 51,7 | 6 | |
| não contabilizado | 0,000558 | 39,0 | 13 | |
| cpu | 0,000130 | 9,1 | 1 | |
| cpu | 0,000003 | 0,2 | 6 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000130 | 0,000210 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 6 | 0,000739 | 0,001215 | 0 | 36 | 25 | 8 | 1 |
| CLOSE | 6 | 0,000003 | 0,000005 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2820097506
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · TABLE ACCESS FULL TAB_0053 28,3% do tempo · 100,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 2 Id 1 · DELETE TAB_0053 71,7% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000081 | 71,7 | 0 | 0,0 | 0 | 0 | 0,000113 | 6 | |||||
| 2 | 1 | 2 | 1 | 0,000032 | 28,3 | 6 | 100,0 | 0 | 0 | 0,000032 | 6 | 2 | 190689 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#116 · DELETE
sql_id 7kpkq6dqyufnphv 1844263573Texto
delete from "ESQ_01"."TAB_00431" where "COL_0180" = :1
- 1 TAB_0043: operação 2 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000607 | 42,5 | 9 | |
| cpu | 0,000528 | 37,0 | 4 | |
| cpu | 0,000289 | 20,3 | 1 | |
| cpu | 0,000003 | 0,2 | 4 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000289 | 0,000565 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 4 | 0,000528 | 0,000859 | 0 | 4 | 0 | 0 | 1 |
| CLOSE | 4 | 0,000003 | 0,000003 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2092666831
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · TABLE ACCESS FULL TAB_0043 91,3% do tempo · 100,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0,000002 | 8,7 | 0 | 0,0 | 0 | 0 | 0,000023 | 1 | ||||||
| 2 | 1 | 0 | 1 | 0,000021 | 91,3 | 1 | 100,0 | 0 | 0 | 0,000021 | 1 | 2 | 192744 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#117 · SELECT
2 variantesTexto
SELECT SEQ_001.NEXTVAL FROM dual
- 1 operação 1 (SEQUENCE SEQ_001) não tem objeto próprio no texto
Texto da forma: os literais viraram :s (texto) e :n (número).
Variantes que mais gastaram
| Chamadas | Inclusivo (s) | Literais |
|---|---|---|
| 5 | 0,001 | |
| 4 | 0,000 |
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000793 | 56,5 | 2 | |
| não contabilizado | 0,000550 | 39,2 | 9 | |
| cpu | 0,000032 | 2,3 | 2 | |
| cpu | 0,000025 | 1,8 | 3 | |
| cpu | 0,000003 | 0,2 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000793 | 0,001302 | 0 | 0 | 0 | 0 | 2 |
| EXEC | 2 | 0,000032 | 0,000052 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 3 | 0,000025 | 0,000042 | 0 | 0 | 0 | 2 | 0 |
| CLOSE | 2 | 0,000003 | 0,000007 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1008247387
Das linhas STAT do trace; plano gravado 2 vezes, mostrando o da gravação mais demorada.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · SEQUENCE SEQ_001 96,3% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 0,000026 | 96,3 | 0 | 0,0 | 0 | 0 | 0,000027 | 0 | 190038 | ||||
| 2 | FAST DUAL | 1 | 1 | 0,000001 | 3,7 | 0 | 0,0 | 0 | 0 | 0,000001 | 0 | 2 |
Sequence (NEXTVAL)
SEQUENCE
Gera os próximos números de uma sequence.
- Boa quando
- Cache adequado ao volume.
- Ruim quando
- Cache pequeno com muito uso: esperas em enq: SQ e no dicionário.
- No plano, olhe
- As esperas do comando, no perfil dele.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#121 · SELECT
sql_id 7vrnqwrm6shamhv 3865854291Texto
select a.COL_0102 from association$1 a where a.obj# = :1 and a.property = :2
- 1 ASSOCIATION$: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000567 | 42,2 | 5 | |
| não contabilizado | 0,000534 | 39,7 | 20 | |
| cpu | 0,000192 | 14,3 | 5 | |
| cpu | 0,000037 | 2,8 | 5 | |
| cpu | 0,000015 | 1,1 | 5 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 5 | 0,000192 | 0,000310 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 5 | 0,000567 | 0,000950 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 5 | 0,000037 | 0,000060 | 0 | 10 | 0 | 0 | 0 |
| CLOSE | 5 | 0,000015 | 0,000025 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1783251294
Das linhas STAT do trace; plano gravado 3 vezes, mostrando o último.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0,000011 | 100,0 | 2 | 100,0 | 0 | 0 | 0,000011 | 2 | 2 | 440 |
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#124 · INSERT
sql_id 6tabdfs2u7b83hv 94612739Texto
INSERT INTO TAB_0020 ( COL_0064 , COL_0065 , COL_0066 , COL_0067 , COL_0068 , COL_0032 , COL_0069 ) VALUES ( *** , '***' , TO_DATE('***','***') , '***' , '***' , '***' , '***' )
- 1 operação 1 (LOAD TABLE CONVENTIONAL) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000637 | 51,0 | 1 | |
| não contabilizado | 0,000474 | 38,0 | 3 | |
| cpu | 0,000135 | 10,8 | 1 | |
| cpu | 0,000002 | 0,2 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000637 | 0,001022 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000135 | 0,000222 | 0 | 1 | 7 | 1 | 0 |
| CLOSE | 1 | 0,000002 | 0,000004 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1546270724
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,000161 | 100,0 | 1 | 100,0 | 0 | 0 | 0,000161 | 1 |
Inserção convencional
LOAD TABLE CONVENTIONAL
Insere as linhas na tabela pelo caminho normal do INSERT.
- Boa quando
- Inserções do dia a dia.
- Ruim quando
- Triggers, índices e constraints da tabela pesam aqui; em carga grande, o modo direto (APPEND) grava mais rápido.
- No plano, olhe
- Tempo próprio (s) e as esperas do comando.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#126 · PL/SQL
sql_id gyas258427y28hv 136575048Texto
BEGIN ROT_0017(COL_0257, COL_0258, COL_0259); END;
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000461 | 38,4 | 36 | |
| cpu | 0,000345 | 28,8 | 12 | |
| cpu | 0,000288 | 24,0 | 12 | |
| cpu | 0,000106 | 8,8 | 12 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 12 | 0,000288 | 0,000479 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 12 | 0,000345 | 0,000552 | 0 | 0 | 0 | 12 | 0 |
| CLOSE | 12 | 0,000106 | 0,000169 | 0 | 0 | 0 | 0 | 0 |
#127 · SELECT
sql_id 5vg126g0wh68uhv 3251116314Texto
Select p.COL_0046 from TAB_001012 p where p.COL_0047 ='***'
- 1 TAB_0010, tabela do índice IDX_0006: operação 2 do plano
- 2 TAB_0010: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000662 | 55,7 | 1 | |
| não contabilizado | 0,000472 | 39,7 | 5 | |
| cpu | 0,000022 | 1,9 | 2 | |
| cpu | 0,000020 | 1,7 | 1 | |
| cpu | 0,000013 | 1,1 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000662 | 0,001099 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000020 | 0,000034 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000022 | 0,000035 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000013 | 0,000021 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2787323455
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0006 65,5% do tempo · 50,0% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0010 34,5% do tempo · 50,0% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000010 | 34,5 | 1 | 50,0 | 0 | 0 | 0,000029 | 2 | 1 | 191798 | ||
| 2 | 1 | 1 | 1 | 0,000019 | 65,5 | 1 | 50,0 | 0 | 0 | 0,000019 | 1 | 0 | 200497 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#132 · SELECT
sql_id 30pcsux4mmwqzhv 1228534495Texto
select max(COL_0048) from xdb.TAB_0012 where COL_0051=:1
- 1 IDX_0007 não aparece no texto; vem de uma view, de um sinônimo ou de SQL recursivo (operação 3)
- 2 operação 1 (SORT AGGREGATE) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000477 | 47,2 | 8 | |
| cpu | 0,000402 | 39,8 | 2 | |
| cpu | 0,000112 | 11,1 | 2 | |
| cpu | 0,000018 | 1,8 | 2 | |
| cpu | 0,000002 | 0,2 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000112 | 0,000228 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0,000402 | 0,000748 | 0 | 0 | 0 | 0 | 1 |
| FETCH | 2 | 0,000018 | 0,000031 | 0 | 2 | 0 | 0 | 0 |
| CLOSE | 2 | 0,000002 | 0,000004 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3081016048
Das linhas STAT do trace; plano gravado 2 vezes, mostrando o último.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 3 · INDEX FULL SCAN (MIN/MAX) IDX_0007 60,0% do tempo · 100,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 2 Id 1 · SORT AGGREGATE 40,0% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 0,000004 | 40,0 | 0 | 0,0 | 0 | 0 | 0,000010 | 1 | |||||
| 2 | FIRST ROW | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000006 | 1 | 1 | |||
| 3 | 1 | 0 | 1 | 0,000006 | 60,0 | 1 | 100,0 | 0 | 0 | 0,000006 | 1 | 1 | 57920 |
Agregação (COUNT, SUM, MAX...)
SORT AGGREGATE
Calcula as funções de agregação e devolve uma linha.
- Boa quando
- Barata em si: o custo está nas operações abaixo.
- Ruim quando
- Quase nunca.
- No plano, olhe
- As operações abaixo dela.
Ponta do índice para MIN ou MAX
INDEX FULL SCAN (MIN/MAX)
Lê só uma ponta do índice para achar o menor ou o maior valor.
- Boa quando
- Sempre barata.
- Ruim quando
- Quase nunca.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#136 · DELETE
sql_id gtv9y0tu9pcbwhv 1956295036Texto
delete from "ESQ_01"."TAB_00391" where "COL_0170" = :1
- 1 TAB_0039: operação 2 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000341 | 41,6 | 5 | |
| cpu | 0,000332 | 40,5 | 2 | |
| cpu | 0,000144 | 17,6 | 1 | |
| cpu | 0,000002 | 0,2 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000144 | 0,000232 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0,000332 | 0,000585 | 0 | 2 | 0 | 0 | 1 |
| CLOSE | 2 | 0,000002 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1294023273
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · TABLE ACCESS FULL TAB_0039 91,7% do tempo · 100,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0,000001 | 8,3 | 0 | 0,0 | 0 | 0 | 0,000012 | 1 | ||||||
| 2 | 1 | 0 | 1 | 0,000011 | 91,7 | 1 | 100,0 | 0 | 0 | 0,000011 | 1 | 2 | 193211 |
Exclusão
DELETE
Apaga as linhas que o row source abaixo devolveu.
- Boa quando
- Poucas linhas, encontradas por índice.
- Ruim quando
- Linhas demais; chave estrangeira sem índice na tabela filha trava a tabela inteira.
- No plano, olhe
- Linhas do row source abaixo.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#137 · SELECT
sql_id 4fugx7sv8y32bhv 915344459Texto
SELECT /*+ RESULT_CACHE */ B.COL_0032, B.COL_0038, A.ROT_0004, C.COL_0039, C.COL_0040, NVL(C.COL_0041,'***') COL_0042 FROM TAB_00083 A, TAB_0009 C, TAB_00072 B WHERE A.COL_0032 = C.COL_0032(+) AND A.ROT_0004 = C.ROT_0004(+) AND A.COL_0032(+) = B.COL_0032 AND B.COL_0035 = :B2 AND B.COL_0034 = :B1 ORDER BY B.COL_0043, A.COL_0044, C.ROWID
- 1 operação 3 (NESTED LOOPS OUTER) não tem objeto próprio no texto
- 2 TAB_0007: operação 4 do plano
- 3 TAB_0008, tabela do índice IDX_0004: operação 6 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000392 | 48,1 | 1 | |
| não contabilizado | 0,000315 | 38,7 | 4 | |
| cpu | 0,000078 | 9,6 | 1 | |
| cpu | 0,000029 | 3,6 | 1 | |
| cpu | 0,000001 | 0,1 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000029 | 0,000049 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000078 | 0,000136 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000392 | 0,000628 | 0 | 6 | 0 | 86 | 0 |
| CLOSE | 1 | 0,000001 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1441506424
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 3 · NESTED LOOPS OUTER 47,4% do tempo · 0,0% das leituras lógicas
- 2 Id 4 · TABLE ACCESS FULL TAB_0007 12,2% do tempo · 33,3% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 3 Id 6 · INDEX RANGE SCAN IDX_0004 6,1% do tempo · 33,3% das leituras lógicas
Percorre uma faixa larga do índice: confira a seletividade e a ordem das colunas.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 86 | 32 | 0,000062 | 11,8 | 0 | 0,0 | 0 | 0 | 0,000525 | 6 | 5 | ||||
| 2 | 86 | 32 | 0,000008 | 1,5 | 0 | 0,0 | 0 | 0 | 0,000463 | 6 | 4 | ||||
| 3 | 1 | 86 | 32 | 0,000249 | 47,4 | 0 | 0,0 | 0 | 0 | 0,000366 | 5 | 4 | |||
| 4 | 2 | 2 | 1 | 0,000064 | 12,2 | 2 | 33,3 | 0 | 0 | 0,000064 | 2 | 2 | 192144 | ||
| 5 | 86 | 43 | 0,000021 | 4,0 | 1 | 16,7 | 0 | 0 | 0,000053 | 3 | 2 | 191468 | |||
| 6 | 3 | 86 | 43 | 0,000032 | 6,1 | 2 | 33,3 | 0 | 0 | 0,000032 | 2 | 1 | 200401 | ||
| 7 | 0 | 1 | 0,000057 | 10,9 | 0 | 0,0 | 0 | 0 | 0,000089 | 1 | 0 | 192370 | |||
| 8 | 0 | 1 | 0,000032 | 6,1 | 1 | 16,7 | 0 | 0 | 0,000032 | 1 | 0 | 201139 |
Ordenação (ORDER BY)
SORT ORDER BY
Ordena as linhas para o ORDER BY.
- Boa quando
- Poucas linhas, ordenação em memória.
- Ruim quando
- Muitas linhas: a ordenação não cabe na workarea e grava no TEMP. Um índice na ordem pedida pode evitar o SORT, principalmente com ROWNUM ou FETCH FIRST.
- No plano, olhe
- PW maior que zero e Tempo próprio (s).
Junção em laço (nested loops)
NESTED LOOPS
Para cada linha do row source externo (outer, driving), executa o row source interno (inner).
- Boa quando
- Poucas linhas no outer e acesso seletivo por índice no inner. Devolve as primeiras linhas rápido (bom para FIRST_ROWS).
- Ruim quando
- Muitas linhas no outer: o inner executa milhares de vezes. Costuma vir de cardinalidade subestimada no outer; um HASH JOIN leria cada lado uma vez só.
- No plano, olhe
- Exec das operações do inner e, no outer, Estimado comparado com Linhas/exec.
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#138 · SELECT
sql_id 45r4tc0zhtfjuhv 1057798714Texto
SELECT PKG_0002.ROT_0002 ( nvl ( LTRIM ( RTRIM ( COL_0034 ) ) , '***' ) , '***' ) , COL_0035 , COL_0036 , COL_0033 , COL_0037 , PKG_0002.ROT_0002 ( nvl ( LTRIM ( RTRIM ( COL_0034 ) ) , '***' ) , '***' ) FROM TAB_000712 WHERE COL_0032 ='***'
- 1 TAB_0007, tabela do índice IDX_0003: operação 2 do plano
- 2 TAB_0007: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000336 | 42,2 | 2 | |
| não contabilizado | 0,000311 | 39,0 | 5 | |
| cpu | 0,000099 | 12,4 | 1 | |
| cpu | 0,000042 | 5,3 | 1 | |
| cpu | 0,000009 | 1,1 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000099 | 0,000166 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000042 | 0,000069 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000336 | 0,000546 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000009 | 0,000016 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 904532920
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0003 63,2% do tempo · 50,0% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0007 36,8% do tempo · 50,0% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000028 | 36,8 | 1 | 50,0 | 0 | 0 | 0,000076 | 2 | 1 | 192144 | ||
| 2 | 1 | 1 | 1 | 0,000048 | 63,2 | 1 | 50,0 | 0 | 0 | 0,000048 | 1 | 0 | 198971 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#140 · PL/SQL
sql_id 067p5vfcywqvvhv 2582535035Texto
BEGIN PKG_0001.ROT_0001( '***' );END;
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000463 | 69,7 | 3 | |
| cpu | 0,000110 | 16,6 | 1 | |
| cpu | 0,000063 | 9,5 | 1 | |
| cpu | 0,000028 | 4,2 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000110 | 0,000445 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000063 | 0,000172 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000028 | 0,000047 | 0 | 0 | 0 | 0 | 0 |
#143 · SELECT
sql_id 00s7ysm70x6cjhv 3457063313Texto
SELECT SYSDATE FROM dual
- 1 operação 1 (FAST DUAL) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000326 | 57,7 | 1 | |
| não contabilizado | 0,000221 | 39,1 | 5 | |
| cpu | 0,000010 | 1,8 | 1 | |
| cpu | 0,000006 | 1,1 | 2 | |
| cpu | 0,000002 | 0,4 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000326 | 0,000533 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000010 | 0,000018 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000006 | 0,000011 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000002 | 0,000003 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1546270724
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0,000002 | 100,0 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 2 |
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#145 · PL/SQL
sql_id 2dxa01wy0h164hv 1007158468Texto
BEGIN PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); PKG_0004.ROT_0005( '***', '***' ); END;
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000212 | 39,9 | 6 | |
| cpu | 0,000181 | 34,1 | 2 | |
| cpu | 0,000098 | 18,5 | 2 | |
| cpu | 0,000040 | 7,5 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000098 | 0,000163 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000181 | 0,000300 | 0 | 0 | 0 | 2 | 0 |
| CLOSE | 2 | 0,000040 | 0,000068 | 0 | 0 | 0 | 0 | 0 |
#146 · SELECT
sql_id 2np7ccgsn83hphv 4047769109Texto
SELECT TAB_000712.COL_0032 , TAB_000712.COL_0033 , TAB_000712.COL_0034 FROM TAB_000712 WHERE ( TAB_000712.COL_0032 ='***' )
- 1 TAB_0007, tabela do índice IDX_0003: operação 2 do plano
- 2 TAB_0007: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000202 | 40,5 | 10 | |
| cpu | 0,000129 | 25,9 | 2 | |
| cpu | 0,000077 | 15,4 | 2 | |
| cpu | 0,000063 | 12,6 | 4 | |
| cpu | 0,000028 | 5,6 | 2 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000129 | 0,000216 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000077 | 0,000130 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 4 | 0,000063 | 0,000105 | 0 | 4 | 0 | 2 | 0 |
| CLOSE | 2 | 0,000028 | 0,000048 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 904532920
Das linhas STAT do trace; plano gravado 2 vezes, mostrando o último.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0003 64,6% do tempo · 50,0% das leituras lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0007 35,4% do tempo · 50,0% das leituras lógicas
Visita a tabela linha a linha a partir do índice: índice pouco seletivo ou sem as colunas que o filtro usa.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000017 | 35,4 | 1 | 50,0 | 0 | 0 | 0,000048 | 2 | 1 | 192144 | ||
| 2 | 1 | 1 | 1 | 0,000031 | 64,6 | 1 | 50,0 | 0 | 0 | 0,000031 | 1 | 0 | 198971 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Busca por chave única
INDEX UNIQUE SCAN
Busca uma única chave num índice único (PK ou UNIQUE): desce do root block pelos branch blocks até o leaf block da chave.
- Boa quando
- Quase sempre: lê só a altura do índice (BLEVEL + 1 blocos).
- Ruim quando
- Como inner de um NESTED LOOPS com milhões de linhas no outer: barato por execução, caro no total.
- No plano, olhe
- Exec: milhares de execuções pesam mesmo com LIO próprio baixo em cada uma.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#148 · SELECT
sql_id 284hap0bawbhmhv 380513811Texto
SELECT COL_0022 , COL_0023 , COL_0024 , COL_0025 FROM TAB_00041
- 1 TAB_0004: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000161 | 41,5 | 5 | |
| cpu | 0,000089 | 22,9 | 1 | |
| cpu | 0,000087 | 22,4 | 2 | |
| cpu | 0,000039 | 10,1 | 1 | |
| cpu | 0,000012 | 3,1 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000089 | 0,000153 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000039 | 0,000066 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000087 | 0,000148 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000012 | 0,000021 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2713300837
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000108 | 100,0 | 2 | 100,0 | 0 | 0 | 0,000108 | 2 | 2 | 191789 |
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#149 · SELECT
sql_id 0121r2r059gdhhv 3226779056Texto
SELECT TAB_000312.COL_0019 FROM TAB_000312 WHERE TAB_000312.COL_0020 =( SELECT max ( TAB_000312.COL_0020 ) FROM TAB_000312 )
- 1 TAB_0003: operação 1 do plano
- 2 TAB_0003: operação 3 do plano
- 3 operação 2 (SORT AGGREGATE) não tem objeto próprio no texto
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000160 | 42,0 | 5 | |
| cpu | 0,000100 | 26,2 | 2 | |
| cpu | 0,000073 | 19,2 | 1 | |
| cpu | 0,000035 | 9,2 | 1 | |
| cpu | 0,000013 | 3,4 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000073 | 0,000133 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000035 | 0,000059 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000100 | 0,000167 | 0 | 4 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000013 | 0,000022 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 3233408604
Das linhas STAT do trace.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 1 · TABLE ACCESS FULL TAB_0003 73,4% do tempo · 50,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 2 Id 3 · TABLE ACCESS FULL TAB_0003 10,1% do tempo · 50,0% das leituras lógicas
Lê o objeto inteiro: confira se o filtro é seletivo e se há índice para ele. - 3 Id 2 · SORT AGGREGATE 16,5% do tempo · 0,0% das leituras lógicas
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000102 | 73,4 | 2 | 50,0 | 0 | 0 | 0,000139 | 4 | 2 | 190396 | ||
| 2 | 3 | 1 | 0,000023 | 16,5 | 0 | 0,0 | 0 | 0 | 0,000037 | 2 | |||||
| 3 | 2 | 2 | 2 | 0,000014 | 10,1 | 2 | 50,0 | 0 | 0 | 0,000014 | 2 | 2 | 190396 |
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Agregação (COUNT, SUM, MAX...)
SORT AGGREGATE
Calcula as funções de agregação e devolve uma linha.
- Boa quando
- Barata em si: o custo está nas operações abaixo.
- Ruim quando
- Quase nunca.
- No plano, olhe
- As operações abaixo dela.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#150 · SELECT
sql_id 045fnpnbhh6qghv 386407119Texto
select o.owner#,o.name,o.namespace,o.remoteowner,o.linkname,o.subname from obj$1 o where o.obj#=:1
- 1 OBJ$, tabela do índice I_OBJ1: operação 2 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| cpu | 0,000157 | 44,9 | 4 | |
| não contabilizado | 0,000141 | 40,3 | 14 | |
| cpu | 0,000027 | 7,7 | 2 | |
| cpu | 0,000023 | 6,6 | 4 | |
| cpu | 0,000002 | 0,6 | 4 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000027 | 0,000044 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 4 | 0,000157 | 0,000267 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 4 | 0,000023 | 0,000037 | 0 | 8 | 0 | 0 | 0 |
| CLOSE | 4 | 0,000002 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2863542513
Das linhas STAT do trace; plano gravado 2 vezes, mostrando o último.
Onde o plano gasta pelo valor próprio de cada operação, sem o das operações abaixo dela
- 1 Id 2 · INDEX RANGE SCAN I_OBJ1 91,7% do tempo · 100,0% das leituras lógicas
Percorre uma faixa larga do índice: confira a seletividade e a ordem das colunas.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 0,000001 | 8,3 | 0 | 0,0 | 0 | 0 | 0,000012 | 2 | 3 | 18 | |||
| 2 | 1 | 0 | 1 | 0,000011 | 91,7 | 2 | 100,0 | 0 | 0 | 0,000011 | 2 | 2 | 36 |
Acesso à tabela pelo ROWID do índice
TABLE ACCESS BY INDEX ROWID
Acessa a tabela, uma linha por vez, pelos ROWIDs que o index scan logo abaixo devolveu.
- Boa quando
- Poucas linhas, ou linhas guardadas perto umas das outras na tabela (clustering factor baixo).
- Ruim quando
- Muitas linhas espalhadas (clustering factor alto): quase um bloco lido por linha. Ou um filter predicate aplicado só aqui, que descarta a maior parte do que o índice trouxe: falta no índice a coluna desse predicado.
- No plano, olhe
- Linhas desta operação comparadas com as do index scan logo abaixo: se aqui sobram bem menos, o filtro está na tabela e não no índice.
Varredura de faixa do índice
INDEX RANGE SCAN
Desce até o primeiro leaf block da faixa e percorre em ordem os leaf blocks dentro da faixa definida pelo access predicate.
- Boa quando
- Faixa estreita: o access predicate usa as colunas iniciais do índice com igualdade e sobram poucas chaves.
- Ruim quando
- Faixa larga (muitos leaf blocks), predicado que não usa a coluna inicial do índice (vira filter predicate dentro do índice), ou muitas execuções como inner de um NESTED LOOPS. Se o TABLE ACCESS acima descarta quase tudo, falta no índice a coluna do filtro.
- No plano, olhe
- Linhas devolvidas e LIO próprio, comparados com os da operação de tabela logo acima.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#151 · SELECT
sql_id asauc96whczkshv 3104210520Texto
SELECT COL_0026 , COL_0025 FROM TAB_00041
- 1 TAB_0004: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000137 | 41,6 | 5 | |
| cpu | 0,000077 | 23,4 | 1 | |
| cpu | 0,000060 | 18,2 | 2 | |
| cpu | 0,000033 | 10,0 | 1 | |
| cpu | 0,000022 | 6,7 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000077 | 0,000129 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000033 | 0,000056 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000060 | 0,000108 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000022 | 0,000036 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 2713300837
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000085 | 100,0 | 2 | 100,0 | 0 | 0 | 0,000085 | 2 | 2 | 191789 |
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
#152 · SELECT
sql_id a7az3bk606ddrhv 2349020599Texto
SELECT COL_0018 , COL_0021 FROM TAB_00021
- 1 TAB_0002: operação 1 do plano
Perfil do comando
| Componente | Duração (s) | % | Ocorrências | |
|---|---|---|---|---|
| não contabilizado | 0,000130 | 40,8 | 5 | |
| cpu | 0,000075 | 23,5 | 1 | |
| cpu | 0,000072 | 22,6 | 2 | |
| cpu | 0,000033 | 10,3 | 1 | |
| cpu | 0,000009 | 2,8 | 1 |
Chamadas
| Chamada | Quantidade | CPU (s) | Duração (s) | Disco (PIO) | Consistente (CR) | Corrente (CU) | Linhas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000075 | 0,000126 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000033 | 0,000055 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000072 | 0,000122 | 0 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000009 | 0,000016 | 0 | 0 | 0 | 0 | 0 |
Plano de execução 1566035411
Das linhas STAT do trace.
| Id | Operação | Exec. | Linhas | Linhas/exec | Estimado | Tempo próprio (s) | % tempo | LIO próprio | % LIO | PR | PW | Tempo (s) | CR | Custo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000084 | 100,0 | 2 | 100,0 | 0 | 0 | 0,000084 | 2 | 2 | 191790 |
Leitura completa da tabela (full table scan)
TABLE ACCESS FULL
Lê todos os blocos do segmento até a high water mark (HWM), com multiblock reads (db file scattered read, ou direct path read na leitura direta).
- Boa quando
- A consulta precisa de boa parte das linhas, a tabela é pequena, ou a leitura é em lote. No Exadata (STORAGE FULL) o filtro roda nas células de armazenamento (smart scan).
- Ruim quando
- O predicado é seletivo e sobram poucas linhas: o custo cresce com o tamanho do segmento, não com o resultado. Pior como inner de um NESTED LOOPS: o full scan se repete para cada linha do outer.
- No plano, olhe
- LIO próprio alto com poucas Linhas devolvidas: predicado seletivo sem índice útil. Exec maior que 1: full scan repetido.
Clique numa operação para ver o que ela faz, quando é boa, quando é ruim e que colunas do plano conferir. Tempo (s) e CR são acumulados: incluem as operações abaixo de cada uma (os row sources de entrada); os valores próprios descontam essas operações. O Oracle mede o tempo por operação por amostragem, então ele pode não fechar entre uma operação e as de baixo; as leituras lógicas são contadas sempre. Linhas/exec e Estimado em vermelho: o otimizador errou a cardinalidade por 10 vezes ou mais.
Objeto 192892
- Espera (s)
- 404,790
- Ocorrências
- 290.860
- Eventos principais
- db file sequential read · direct path read · direct path read temp
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202849
- Espera (s)
- 66,670
- Ocorrências
- 33.428
- Eventos principais
- db file sequential read
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192893
- Espera (s)
- 15,837
- Ocorrências
- 9.559
- Eventos principais
- db file sequential read · direct path read · direct path write temp
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202854
- Espera (s)
- 3,822
- Ocorrências
- 873
- Eventos principais
- db file sequential read
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201999
- Espera (s)
- 0,696
- Ocorrências
- 419
- Eventos principais
- direct path read temp · db file sequential read · Disk file operations I/O
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201287
- Espera (s)
- 0,628
- Ocorrências
- 475
- Eventos principais
- direct path read temp · db file sequential read · Disk file operations I/O
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192746
- Espera (s)
- 0,533
- Ocorrências
- 192
- Eventos principais
- db file sequential read · direct path read temp · Disk file operations I/O
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201286
- Espera (s)
- 0,328
- Ocorrências
- 322
- Eventos principais
- direct path read temp · db file sequential read
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202867
- Espera (s)
- 0,305
- Ocorrências
- 47
- Eventos principais
- db file sequential read · Disk file operations I/O
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202865
- Espera (s)
- 0,143
- Ocorrências
- 36
- Eventos principais
- db file sequential read · Disk file operations I/O
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201288 · IDX_0034
índice- Espera (s)
- 0,064
- Ocorrências
- 13
- Eventos principais
- db file sequential read
Onde aparece no trace
- Comando #7, operação 2 INDEX RANGE SCAN IDX_0034
- Comando #71, operação 6 (sem detalhe neste arquivo) INDEX RANGE SCAN IDX_0034
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192133 · TAB_0065
tabela- Espera (s)
- 0,037
- Ocorrências
- 6
- Eventos principais
- direct path read temp · db file sequential read
Onde aparece no trace
- Comando #17, operação 51 TABLE ACCESS BY INDEX ROWID TAB_0065
- Comando #18, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0065
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201349 · IDX_0035
índice- Espera (s)
- 0,025
- Ocorrências
- 4
- Eventos principais
- db file sequential read
Onde aparece no trace
- Comando #13, operação 3 INDEX RANGE SCAN IDX_0035
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 191473
- Espera (s)
- 0,012
- Ocorrências
- 5
- Eventos principais
- db file sequential read · Disk file operations I/O
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190484 · TAB_0035
tabela- Espera (s)
- 0,009
- Ocorrências
- 2
- Eventos principais
- db file sequential read
Onde aparece no trace
- Comando #32, operação 1 TABLE ACCESS FULL TAB_0035
- Comando #37, operação 1 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0035
- Comando #59, operação 6 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0035
- Comando #71, operação 3 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0035
- Comando #71, operação 5 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0035
- Comando #77, operação 5 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0035
- Comando #89, operação 5 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0035
- Comando #91, operação 5 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0035
- Comando #94, operação 5 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0035
- Comando #99, operação 5 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0035
- Comando #105, operação 4 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0035
- Comando #112, operação 4 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0035
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190757 · TAB_0063
tabela- Espera (s)
- 0,009
- Ocorrências
- 1
- Eventos principais
- db file sequential read
Onde aparece no trace
- Comando #17, operação 10 TABLE ACCESS BY INDEX ROWID TAB_0063
- Comando #17, operação 23 TABLE ACCESS BY INDEX ROWID TAB_0063
- Comando #17, operação 33 TABLE ACCESS BY INDEX ROWID TAB_0063
- Comando #17, operação 45 TABLE ACCESS BY INDEX ROWID TAB_0063
- Comando #17, operação 53 TABLE ACCESS BY INDEX ROWID TAB_0063
- Comando #17, operação 58 TABLE ACCESS BY INDEX ROWID TAB_0063
- Comando #17, operação 63 TABLE ACCESS BY INDEX ROWID TAB_0063
- Comando #17, operação 68 TABLE ACCESS BY INDEX ROWID TAB_0063
- Comando #24, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0063
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 199392 · IDX_0060
índice- Espera (s)
- 0,008
- Ocorrências
- 1
- Eventos principais
- db file sequential read
Onde aparece no trace
- Comando #21, operação 2 INDEX UNIQUE SCAN IDX_0060
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202853
- Espera (s)
- 0,006
- Ocorrências
- 1
- Eventos principais
- db file sequential read
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190981 · TAB_0095
tabela- Espera (s)
- 0,006
- Ocorrências
- 1
- Eventos principais
- db file sequential read
Onde aparece no trace
- Comando #21, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0095
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 191816
- Espera (s)
- 0,006
- Ocorrências
- 3
- Eventos principais
- db file sequential read · Disk file operations I/O
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202751 · IDX_0036
índice- Espera (s)
- 0,005
- Ocorrências
- 1
- Eventos principais
- db file sequential read
Onde aparece no trace
- Comando #40, operação 2 (sem detalhe neste arquivo) INDEX RANGE SCAN IDX_0036
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201296
- Espera (s)
- 0,005
- Ocorrências
- 1
- Eventos principais
- db file sequential read
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201299
- Espera (s)
- 0,004
- Ocorrências
- 1
- Eventos principais
- db file sequential read
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201293
- Espera (s)
- 0,004
- Ocorrências
- 1
- Eventos principais
- db file sequential read
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 198940 · IDX_0045
índice- Espera (s)
- 0,004
- Ocorrências
- 1
- Eventos principais
- db file sequential read
Onde aparece no trace
- Comando #17, operação 15 INDEX UNIQUE SCAN IDX_0045
- Comando #17, operação 16 INDEX UNIQUE SCAN IDX_0045
- Comando #17, operação 36 INDEX UNIQUE SCAN IDX_0045
- Comando #17, operação 37 INDEX UNIQUE SCAN IDX_0045
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 191815
- Espera (s)
- 0,003
- Ocorrências
- 2
- Eventos principais
- db file sequential read · Disk file operations I/O
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201315
- Espera (s)
- 0,002
- Ocorrências
- 1
- Eventos principais
- db file sequential read
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201226 · IDX_0062
índiceOnde aparece no trace
- Comando #1, operação 2 INDEX UNIQUE SCAN IDX_0062
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201225 · IDX_0063
índiceOnde aparece no trace
- Comando #2, operação 2 INDEX RANGE SCAN IDX_0063
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192404 · TAB_0093
tabelaOnde aparece no trace
- Comando #3, operação 6 TABLE ACCESS BY INDEX ROWID TAB_0093
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201077 · IDX_0057
índiceOnde aparece no trace
- Comando #3, operação 7 INDEX RANGE SCAN IDX_0057
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 193177 · TAB_0026
tabelaOnde aparece no trace
- Comando #3, operação 8 TABLE ACCESS BY INDEX ROWID TAB_0026
- Comando #36, operação 6 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0026
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202263 · IDX_0018
índiceOnde aparece no trace
- Comando #3, operação 9 INDEX UNIQUE SCAN IDX_0018
- Comando #36, operação 7 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0018
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 198982 · IDX_0058
índiceOnde aparece no trace
- Comando #3, operação 10 INDEX UNIQUE SCAN IDX_0058
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190770 · TAB_0088
tabelaOnde aparece no trace
- Comando #3, operação 11 TABLE ACCESS BY INDEX ROWID TAB_0088
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190050
sequenceOnde aparece no trace
- Comando #4, operação 2 SEQUENCE SEQ_007
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 79 · I_SEQ1
índiceOnde aparece no trace
- Comando #8, operação 2 INDEX UNIQUE SCAN I_SEQ1
- Comando #74, operação 2 (sem detalhe neste arquivo) INDEX UNIQUE SCAN I_SEQ1
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192622 · TAB_0092
tabelaOnde aparece no trace
- Comando #10, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0092
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 200566 · IDX_0056
índiceOnde aparece no trace
- Comando #10, operação 2 INDEX UNIQUE SCAN IDX_0056
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201278 · IDX_0024
índiceOnde aparece no trace
- Comando #11, operação 2 INDEX UNIQUE SCAN IDX_0024
- Comando #59, operação 7 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0024
- Comando #71, operação 4 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0024
- Comando #77, operação 6 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0024
- Comando #89, operação 6 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0024
- Comando #91, operação 6 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0024
- Comando #94, operação 6 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0024
- Comando #99, operação 6 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0024
- Comando #105, operação 5 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0024
- Comando #112, operação 5 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0024
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190035
sequenceOnde aparece no trace
- Comando #12, operação 2 SEQUENCE SEQ_003
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190916 · TAB_0032
tabelaOnde aparece no trace
- Comando #14, operação 5 TABLE ACCESS BY INDEX ROWID TAB_0032
- Comando #15, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0032
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 199273 · IDX_0019
índiceOnde aparece no trace
- Comando #14, operação 6 INDEX UNIQUE SCAN IDX_0019
- Comando #15, operação 2 INDEX UNIQUE SCAN IDX_0019
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190918 · TAB_0033
tabelaOnde aparece no trace
- Comando #14, operação 7 TABLE ACCESS BY INDEX ROWID TAB_0033
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 199275 · IDX_0020
índiceOnde aparece no trace
- Comando #14, operação 8 INDEX RANGE SCAN IDX_0020
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 199274 · IDX_0021
índiceOnde aparece no trace
- Comando #14, operação 9 INDEX UNIQUE SCAN IDX_0021
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190917 · TAB_0034
tabelaOnde aparece no trace
- Comando #14, operação 10 TABLE ACCESS BY INDEX ROWID TAB_0034
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 204006 · TAB_0013
viewOnde aparece no trace
- Comando #16, operação 4 VIEW TAB_0013
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 203872 · TAB_0015
viewOnde aparece no trace
- Comando #16, operação 7 VIEW TAB_0015
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190772 · TAB_0016
tabelaOnde aparece no trace
- Comando #16, operação 11 TABLE ACCESS FULL TAB_0016
- Comando #16, operação 14 TABLE ACCESS FULL TAB_0016
- Comando #16, operação 23 TABLE ACCESS BY INDEX ROWID TAB_0016
- Comando #16, operação 33 TABLE ACCESS BY INDEX ROWID TAB_0016
- Comando #33, operação 4 TABLE ACCESS FULL TAB_0016
- Comando #33, operação 6 TABLE ACCESS BY INDEX ROWID TAB_0016
- Comando #68, operação 2 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0016
- Comando #80, operação 1 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0016
- Comando #114, operação 1 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0016
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 200905 · IDX_0008
índiceOnde aparece no trace
- Comando #16, operação 12 INDEX UNIQUE SCAN IDX_0008
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 200904 · IDX_0009
índiceOnde aparece no trace
- Comando #16, operação 15 INDEX UNIQUE SCAN IDX_0009
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 4254951128 · SYS_TEMP_0FD9D66D8_1257732A
tabelaOnde aparece no trace
- Comando #16, operação 22 TABLE ACCESS FULL SYS_TEMP_0FD9D66D8_1257732A
- Comando #16, operação 30 TABLE ACCESS FULL SYS_TEMP_0FD9D66D8_1257732A
- Comando #16, operação 39 TABLE ACCESS FULL SYS_TEMP_0FD9D66D8_1257732A
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 198973 · IDX_0010
índiceOnde aparece no trace
- Comando #16, operação 24 INDEX UNIQUE SCAN IDX_0010
- Comando #16, operação 31 INDEX UNIQUE SCAN IDX_0010
- Comando #33, operação 7 INDEX UNIQUE SCAN IDX_0010
- Comando #68, operação 3 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0010
- Comando #80, operação 2 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0010
- Comando #114, operação 2 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0010
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 199137 · IDX_0011
índiceOnde aparece no trace
- Comando #16, operação 25 INDEX UNIQUE SCAN IDX_0011
- Comando #16, operação 32 INDEX UNIQUE SCAN IDX_0011
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190850 · TAB_0017
tabelaOnde aparece no trace
- Comando #16, operação 26 TABLE ACCESS BY INDEX ROWID TAB_0017
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192144 · TAB_0007
tabelaOnde aparece no trace
- Comando #16, operação 35 TABLE ACCESS BY INDEX ROWID TAB_0007
- Comando #133, operação 1 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0007
- Comando #137, operação 4 TABLE ACCESS FULL TAB_0007
- Comando #138, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0007
- Comando #146, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0007
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 198971 · IDX_0003
índiceOnde aparece no trace
- Comando #16, operação 36 INDEX UNIQUE SCAN IDX_0003
- Comando #133, operação 2 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0003
- Comando #138, operação 2 INDEX UNIQUE SCAN IDX_0003
- Comando #146, operação 2 INDEX UNIQUE SCAN IDX_0003
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202288 · IDX_0012
índiceOnde aparece no trace
- Comando #16, operação 40 INDEX RANGE SCAN IDX_0012
- Comando #42, operação 2 (sem detalhe neste arquivo) INDEX RANGE SCAN IDX_0012
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192229 · TAB_0060
tabelaOnde aparece no trace
- Comando #17, operação 8 TABLE ACCESS BY INDEX ROWID TAB_0060
- Comando #17, operação 21 TABLE ACCESS BY INDEX ROWID TAB_0060
- Comando #17, operação 31 TABLE ACCESS BY INDEX ROWID TAB_0060
- Comando #17, operação 41 TABLE ACCESS BY INDEX ROWID TAB_0060
- Comando #17, operação 49 TABLE ACCESS BY INDEX ROWID TAB_0060
- Comando #17, operação 56 TABLE ACCESS BY INDEX ROWID TAB_0060
- Comando #17, operação 61 TABLE ACCESS BY INDEX ROWID TAB_0060
- Comando #17, operação 66 TABLE ACCESS BY INDEX ROWID TAB_0060
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202722 · IDX_0042
índiceOnde aparece no trace
- Comando #17, operação 9 INDEX RANGE SCAN IDX_0042
- Comando #17, operação 22 INDEX RANGE SCAN IDX_0042
- Comando #17, operação 32 INDEX RANGE SCAN IDX_0042
- Comando #17, operação 42 INDEX RANGE SCAN IDX_0042
- Comando #17, operação 50 INDEX RANGE SCAN IDX_0042
- Comando #17, operação 57 INDEX RANGE SCAN IDX_0042
- Comando #17, operação 62 INDEX RANGE SCAN IDX_0042
- Comando #17, operação 67 INDEX RANGE SCAN IDX_0042
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202796 · IDX_0043
índiceOnde aparece no trace
- Comando #17, operação 11 INDEX UNIQUE SCAN IDX_0043
- Comando #17, operação 24 INDEX UNIQUE SCAN IDX_0043
- Comando #17, operação 34 INDEX UNIQUE SCAN IDX_0043
- Comando #17, operação 46 INDEX UNIQUE SCAN IDX_0043
- Comando #17, operação 54 INDEX UNIQUE SCAN IDX_0043
- Comando #17, operação 59 INDEX UNIQUE SCAN IDX_0043
- Comando #17, operação 64 INDEX UNIQUE SCAN IDX_0043
- Comando #17, operação 69 INDEX UNIQUE SCAN IDX_0043
- Comando #24, operação 2 INDEX UNIQUE SCAN IDX_0043
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190751 · TAB_0061
tabelaOnde aparece no trace
- Comando #17, operação 12 TABLE ACCESS BY INDEX ROWID TAB_0061
- Comando #17, operação 26 TABLE ACCESS BY INDEX ROWID TAB_0061
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 198961 · IDX_0044
índiceOnde aparece no trace
- Comando #17, operação 13 INDEX UNIQUE SCAN IDX_0044
- Comando #17, operação 25 INDEX UNIQUE SCAN IDX_0044
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192152 · TAB_0062
tabelaOnde aparece no trace
- Comando #17, operação 14 TABLE ACCESS BY INDEX ROWID TAB_0062
- Comando #17, operação 17 TABLE ACCESS BY INDEX ROWID TAB_0062
- Comando #17, operação 35 TABLE ACCESS BY INDEX ROWID TAB_0062
- Comando #17, operação 38 TABLE ACCESS BY INDEX ROWID TAB_0062
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 191482 · TAB_0064
tabelaOnde aparece no trace
- Comando #17, operação 43 TABLE ACCESS BY INDEX ROWID TAB_0064
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 200422 · IDX_0046
índiceOnde aparece no trace
- Comando #17, operação 44 INDEX UNIQUE SCAN IDX_0046
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 198991 · IDX_0047
índiceOnde aparece no trace
- Comando #17, operação 52 INDEX UNIQUE SCAN IDX_0047
- Comando #18, operação 2 INDEX UNIQUE SCAN IDX_0047
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190865 · TAB_0019
tabelaOnde aparece no trace
- Comando #19, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0019
- Comando #107, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0019
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 199165 · IDX_0014
índiceOnde aparece no trace
- Comando #19, operação 2 INDEX UNIQUE SCAN IDX_0014
- Comando #107, operação 2 INDEX RANGE SCAN IDX_0014
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190798 · TAB_0030
tabelaOnde aparece no trace
- Comando #19, operação 7 TABLE ACCESS FULL TAB_0030
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192099 · TAB_0028
tabelaOnde aparece no trace
- Comando #19, operação 8 TABLE ACCESS FULL TAB_0028
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192036 · TAB_0029
tabelaOnde aparece no trace
- Comando #19, operação 9 TABLE ACCESS FULL TAB_0029
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 199166 · IDX_0022
índiceOnde aparece no trace
- Comando #19, operação 10 INDEX UNIQUE SCAN IDX_0022
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190485 · TAB_0036
tabelaOnde aparece no trace
- Comando #23, operação 2 TABLE ACCESS FULL TAB_0036
- Comando #77, operação 11 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0036
- Comando #105, operação 8 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0036
- Comando #123, operação 6 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0036
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192745 · TAB_0023
tabelaOnde aparece no trace
- Comando #27, operação 2 TABLE ACCESS FULL TAB_0023
- Comando #41, operação 4 TABLE ACCESS FULL TAB_0023
- Comando #41, operação 7 TABLE ACCESS FULL TAB_0023
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 440 · ASSOCIATION$
tabelaOnde aparece no trace
- Comando #29, operação 3 TABLE ACCESS FULL ASSOCIATION$
- Comando #39, operação 1 TABLE ACCESS FULL ASSOCIATION$
- Comando #121, operação 1 TABLE ACCESS FULL ASSOCIATION$
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 18 · OBJ$
tabelaOnde aparece no trace
- Comando #29, operação 4 TABLE ACCESS BY INDEX ROWID OBJ$
- Comando #110, operação 1 TABLE ACCESS BY INDEX ROWID OBJ$
- Comando #150, operação 1 TABLE ACCESS BY INDEX ROWID OBJ$
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 36 · I_OBJ1
índiceOnde aparece no trace
- Comando #29, operação 5 INDEX RANGE SCAN I_OBJ1
- Comando #150, operação 2 INDEX RANGE SCAN I_OBJ1
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 22 · USER$
tabelaOnde aparece no trace
- Comando #29, operação 6 TABLE ACCESS CLUSTER USER$
- Comando #30, operação 7 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID USER$
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 11 · I_USER#
índiceOnde aparece no trace
- Comando #29, operação 7 INDEX UNIQUE SCAN I_USER#
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 199136 · IDX_0052
índiceOnde aparece no trace
- Comando #33, operação 5 INDEX RANGE SCAN IDX_0052
- Comando #82, operação 2 (sem detalhe neste arquivo) INDEX RANGE SCAN IDX_0052
- Comando #82, operação 5 (sem detalhe neste arquivo) INDEX RANGE SCAN IDX_0052
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192742 · TAB_0040
tabelaOnde aparece no trace
- Comando #35, operação 2 TABLE ACCESS FULL TAB_0040
- Comando #59, operação 14 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0040
- Comando #88, operação 9 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0040
- Comando #89, operação 11 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0040
- Comando #91, operação 11 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0040
- Comando #94, operação 11 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0040
- Comando #99, operação 11 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0040
- Comando #102, operação 9 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0040
- Comando #103, operação 9 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0040
- Comando #112, operação 8 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0040
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192743 · TAB_0041
tabelaOnde aparece no trace
- Comando #46, operação 2 TABLE ACCESS FULL TAB_0041
- Comando #59, operação 11 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0041
- Comando #88, operação 6 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0041
- Comando #89, operação 8 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0041
- Comando #91, operação 8 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0041
- Comando #94, operação 8 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0041
- Comando #99, operação 8 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0041
- Comando #102, operação 6 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0041
- Comando #103, operação 6 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0041
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202345 · IDX_0016
índiceOnde aparece no trace
- Comando #47, operação 4 INDEX RANGE SCAN IDX_0016
- Comando #47, operação 6 INDEX RANGE SCAN IDX_0016
- Comando #47, operação 8 INDEX RANGE SCAN IDX_0016
- Comando #84, operação 2 (sem detalhe neste arquivo) INDEX RANGE SCAN IDX_0016
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192750 · TAB_0024
tabelaOnde aparece no trace
- Comando #25, operação 2 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0024
- Comando #51, operação 4 TABLE ACCESS FULL TAB_0024
- Comando #51, operação 6 TABLE ACCESS FULL TAB_0024
- Comando #51, operação 8 TABLE ACCESS FULL TAB_0024
- Comando #58, operação 2 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0024
- Comando #70, operação 4 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0024
- Comando #70, operação 7 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0024
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 1271 · SYS_FBA_TRACKEDTABLES
tabelaOnde aparece no trace
- Comando #52, operação 2 TABLE ACCESS BY INDEX ROWID SYS_FBA_TRACKEDTABLES
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 1272 · SYS_C001489
índiceOnde aparece no trace
- Comando #52, operação 3 INDEX UNIQUE SCAN SYS_C001489
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190036
sequenceOnde aparece no trace
- Comando #55, operação 2 SEQUENCE SEQ_002
- Comando #57, operação 2 SEQUENCE SEQ_002
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 191790 · TAB_0002
tabelaOnde aparece no trace
- Comando #60, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0002
- Comando #147, operação 1 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0002
- Comando #152, operação 1 TABLE ACCESS FULL TAB_0002
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 200547 · IDX_0001
índiceOnde aparece no trace
- Comando #60, operação 2 INDEX UNIQUE SCAN IDX_0001
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192740 · TAB_0054
tabelaOnde aparece no trace
- Comando #63, operação 2 TABLE ACCESS FULL TAB_0054
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190688 · TAB_0052
tabelaOnde aparece no trace
- Comando #64, operação 2 TABLE ACCESS FULL TAB_0052
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 57884 · TAB_0011
tabelaOnde aparece no trace
- Comando #67, operação 1 TABLE ACCESS FULL TAB_0011
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 194163 · TAB_0074
tabelaOnde aparece no trace
- Comando #73, operação 2 TABLE ACCESS FULL TAB_0074
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190385 · TAB_0006
tabelaOnde aparece no trace
- Comando #90, operação 1 TABLE ACCESS FULL TAB_0006
- Comando #98, operação 1 TABLE ACCESS FULL TAB_0006
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 191511 · TAB_0005
tabelaOnde aparece no trace
- Comando #95, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0005
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 200480 · IDX_0002
índiceOnde aparece no trace
- Comando #95, operação 2 INDEX UNIQUE SCAN IDX_0002
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 69 · VIEW$
tabelaOnde aparece no trace
- Comando #101, operação 1 TABLE ACCESS BY USER ROWID VIEW$
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190797 · TAB_0018
tabelaOnde aparece no trace
- Comando #106, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0018
- Comando #135, operação 1 (sem detalhe neste arquivo) TABLE ACCESS BY INDEX ROWID TAB_0018
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 202894 · IDX_0013
índiceOnde aparece no trace
- Comando #106, operação 2 INDEX UNIQUE SCAN IDX_0013
- Comando #135, operação 2 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0013
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 31 · CDEF$
tabelaOnde aparece no trace
- Comando #108, operação 1 TABLE ACCESS BY USER ROWID CDEF$
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192741 · TAB_0037
tabelaOnde aparece no trace
- Comando #77, operação 7 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0037
- Comando #105, operação 6 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0037
- Comando #109, operação 2 TABLE ACCESS FULL TAB_0037
- Comando #123, operação 4 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0037
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 37 · I_OBJ2
índiceOnde aparece no trace
- Comando #110, operação 2 INDEX RANGE SCAN I_OBJ2
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 191798 · TAB_0010
tabelaOnde aparece no trace
- Comando #111, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0010
- Comando #127, operação 1 TABLE ACCESS BY INDEX ROWID TAB_0010
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 200497 · IDX_0006
índiceOnde aparece no trace
- Comando #111, operação 2 INDEX UNIQUE SCAN IDX_0006
- Comando #127, operação 2 INDEX UNIQUE SCAN IDX_0006
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 21 · COL$
tabelaOnde aparece no trace
- Comando #113, operação 1 TABLE ACCESS BY USER ROWID COL$
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190689 · TAB_0053
tabelaOnde aparece no trace
- Comando #115, operação 2 TABLE ACCESS FULL TAB_0053
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192744 · TAB_0043
tabelaOnde aparece no trace
- Comando #59, operação 8 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0043
- Comando #88, operação 5 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0043
- Comando #99, operação 7 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0043
- Comando #116, operação 2 TABLE ACCESS FULL TAB_0043
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190038
sequenceOnde aparece no trace
- Comando #117, operação 1 SEQUENCE SEQ_001
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 57920 · IDX_0007
índiceOnde aparece no trace
- Comando #132, operação 3 INDEX FULL SCAN (MIN/MAX) IDX_0007
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 193211 · TAB_0039
tabelaOnde aparece no trace
- Comando #112, operação 6 (sem detalhe neste arquivo) TABLE ACCESS FULL TAB_0039
- Comando #136, operação 2 TABLE ACCESS FULL TAB_0039
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 191468 · TAB_0008
tabelaOnde aparece no trace
- Comando #137, operação 5 TABLE ACCESS BY INDEX ROWID TAB_0008
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 200401 · IDX_0004
índiceOnde aparece no trace
- Comando #137, operação 6 INDEX RANGE SCAN IDX_0004
- Comando #165, operação 2 (sem detalhe neste arquivo) INDEX UNIQUE SCAN IDX_0004
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 192370 · TAB_0009
tabelaOnde aparece no trace
- Comando #137, operação 7 TABLE ACCESS BY INDEX ROWID TAB_0009
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 201139 · IDX_0005
índiceOnde aparece no trace
- Comando #137, operação 8 INDEX RANGE SCAN IDX_0005
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 191789 · TAB_0004
tabelaOnde aparece no trace
- Comando #148, operação 1 TABLE ACCESS FULL TAB_0004
- Comando #151, operação 1 TABLE ACCESS FULL TAB_0004
As consultas prontas para rodar no banco ficam na página do objeto, na console.
Objeto 190396 · TAB_0003
tabelaOnde aparece no trace
- Comando #149, operação 1 TABLE ACCESS FULL TAB_0003
- Comando #149, operação 3 TABLE ACCESS FULL TAB_0003
As consultas prontas para rodar no banco ficam na página do objeto, na console.
WaitScope 1.7.0 · análise feita no servidor · relatório exportado em 29/10/2026 10:19:56