caso-1.trc
Sesión y entorno
- Base de datos
- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
- Instancia
- INST_01
- Servidor
- MAQ_01 · Linux · x86_64
- Sesión
- 151.464 · pid 79628
- Servicio
- SYS$USERS
- Módulo
- MOD_01
- Acción
- Unidad de tiempo
- microsegundos
- Archivo en el servidor
- caso1.trc
Diagnóstico
Patrones que suelen explicar lo que muestra el trace, en orden de gravedad. Son pistas para el análisis, no conclusiones.
El 73,6% del tiempo total (37,419 s) viene de un único componente. El análisis empieza por él. Ver en el perfil
Tiempo entre llamadas de nivel 0 sin espera registrada. El trace pudo activarse y desactivarse en medio de la sesión, o el proceso estuvo detenido fuera de la base de datos. Ver en el perfil
SQL recursivo ejecutado una vez por fila, típico de un bucle en PL/SQL. El procesamiento en conjunto (un único SQL o FORALL) suele reducir mucho el tiempo. Ver sentencia #1
SQL recursivo ejecutado una vez por fila, típico de un bucle en PL/SQL. El procesamiento en conjunto (un único SQL o FORALL) suele reducir mucho el tiempo. Ver sentencia #2
Operación TABLE ACCESS FULL TAB_0005. Lee el objeto completo: compruebe si el filtro es selectivo y si hay un índice para él. Las operaciones están resaltadas en el plan, en el detalle de la sentencia. Ver en el plan de la sentencia #1
Operación TABLE ACCESS FULL TAB_0005. Lee el objeto completo: compruebe si el filtro es selectivo y si hay un índice para él. Las operaciones están resaltadas en el plan, en el detalle de la sentencia. Ver en el plan de la sentencia #2
El cursor se abre y se cierra en cada uso. Mantener el cursor abierto en la aplicación (caché de statements del driver) o session_cached_cursors evita el PARSE repetido. Ver sentencia #1
El cursor se abre y se cierra en cada uso. Mantener el cursor abierto en la aplicación (caché de statements del driver) o session_cached_cursors evita el PARSE repetido. Ver sentencia #2
La aplicación escribe los valores en el texto del SQL en lugar de usar bind variables, y cada valor diferente se convierte en una sentencia nueva para la base de datos. Los 1.217 PARSE de las variantes, 1.217 de ellos hard parse, tardaron 1,295 s (2,5% del tiempo total); con todas las 3.651 llamadas y el SQL recursivo, las variantes suman 1,451 s. La corrección es usar bind variables en la aplicación. CURSOR_SHARING=FORCE en la base de datos reduce los hard parse mientras la aplicación no cambia, pero es solo un paliativo. Ver sentencia #3
Perfil del tiempo de respuesta
Cada fila es una parte del tiempo total; sumadas, dan 100%. Haga clic en el nombre de un componente o de una clase para ver qué significa ese tiempo, cuándo es normal, cuándo indica un problema y dónde revisarlo en el informe. El tiempo no contabilizado es lo que el trace no explica por CPU ni por esperas: dentro de las llamadas, suele ser cola de CPU o código sin instrumentación; el valor negativo viene de la granularidad de la medición de CPU.
| Componente | Duración (s) | % del total | gráfico | Ocurrencias | Media (s) | Mín (s) | Máx (s) |
|---|---|---|---|---|---|---|---|
| no contabilizado | 37,419211 | 73,6 | |||||
| cpu | 5,125233 | 10,1 | 180.117 | 0,000028 | 0,000000 | 0,008999 | |
| cpu | 4,550304 | 9,0 | 178.460 | 0,000025 | 0,000000 | 0,008999 | |
| cpu | 2,189671 | 4,3 | 180.269 | 0,000012 | 0,000000 | 0,124981 | |
| User I/O | 1,047610 | 2,1 | 1.962 | 0,000534 | 0,000005 | 0,035303 | |
| cpu | 0,255954 | 0,5 | 180.268 | 0,000001 | 0,000000 | 0,001999 | |
| User I/O | 0,165164 | 0,3 | 18.337 | 0,000009 | 0,000003 | 0,018484 | |
| no contabilizado | 0,055133 | 0,1 | 719.114 | 0,000000 | |||
| Application | 0,014392 | 0,0 | 1 | 0,014392 | 0,014392 | 0,014392 | |
| User I/O | 0,008094 | 0,0 | 3 | 0,002698 | 0,001960 | 0,003773 | |
| Idle | 0,001212 | 0,0 | 2 | 0,000606 | 0,000489 | 0,000723 | |
| Other | 0,000616 | 0,0 | 3 | 0,000205 | 0,000005 | 0,000385 | |
| User I/O | 0,000524 | 0,0 | 10 | 0,000052 | 0,000023 | 0,000082 | |
| Network | 0,000007 | 0,0 | 2 | 0,000003 | 0,000003 | 0,000004 | |
| Total | 50,833125 | 100,0 | |||||
Por clase de espera
Los mismos componentes agrupados por la clase de espera de Oracle (wait_class), con CPU y tiempo no contabilizado aparte. La suma también es el tiempo total.
| Clase | Duración (s) | % del total | gráfico | Ocurrencias | Componentes principales |
|---|---|---|---|---|---|
| 37,474344 | 73,7 | tiempo no contabilizado entre llamadas · tiempo no contabilizado dentro de las llamadas | |||
| 12,121162 | 23,8 | 719.114 | CPU: PARSE dbcalls · CPU: FETCH dbcalls · CPU: EXEC dbcalls · CPU: CLOSE dbcalls | ||
| 1,221392 | 2,4 | 20.312 | db file sequential read · direct path read · local write wait · Disk file operations I/O | ||
| 0,014392 | 0,0 | 1 | enq: RO - fast object reuse | ||
| 0,001212 | 0,0 | 2 | SQL*Net message from client | ||
| 0,000616 | 0,0 | 3 | reliable message | ||
| 0,000007 | 0,0 | 2 | SQL*Net message to client |
Sentencias principales por componente y por clase
Cuánto gastó cada sentencia en cada componente del perfil y en cada clase de espera, según el perfil exclusivo de la sentencia (sin el SQL recursivo que dispara). Hasta 10 sentencias por lista: cámbielo en la parte superior de la página.
Por componente del perfil
CPU: PARSE dbcalls cpu5,125 s · 10,1% del tiempo total · 10 sentencias
CPU: FETCH dbcalls cpu4,550 s · 9,0% del tiempo total · 10 de 12 sentencias
2 sentencias más gastaron tiempo aquí; aumente el número en la parte superior de la página para verlas.
CPU: EXEC dbcalls cpu2,190 s · 4,3% del tiempo total · 10 de 29 sentencias
19 sentencias más gastaron tiempo aquí; aumente el número en la parte superior de la página para verlas.
db file sequential read espera1,048 s · 2,1% del tiempo total · 10 de 23 sentencias
13 sentencias más gastaron tiempo aquí; aumente el número en la parte superior de la página para verlas.
CPU: CLOSE dbcalls cpu0,256 s · 0,5% del tiempo total · 3 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 2 | 0,130972 | 51,2 | 49 variantes SELECT (SELECT COL_0075 FROM TAB_0005 WHERE COL_0074 = :n AND ROWNUM <=:n) AS COL_0075 FROM DUAL | ||
| 1 | 0,123982 | 48,4 | 49 variantes SELECT (SELECT COL_0073 FROM TAB_0005 WHERE COL_0074 = :n AND ROWNUM <=:n) AS COL_0073 FROM DUAL | ||
| 8 | 0,001000 | 0,4 | 350 variantes INSERT INTO TAB_0001 (COL_0076,COL_0077, … :s,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL… |
direct path read espera0,165 s · 0,3% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 4 | 0,066395 | 40,2 | 9sxjs1fk1qc9g | BEGIN ROT_0001('***',*** ); END; |
tiempo no contabilizado dentro de las llamadas no contabilizado0,055 s · 0,1% del tiempo total · 10 de 41 sentencias
31 sentencias más gastaron tiempo aquí; aumente el número en la parte superior de la página para verlas.
enq: RO - fast object reuse espera0,014 s · 0,0% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 10 | 0,014392 | 100,0 | 9y5d9x2wwc9nn | TRUNCATE TABLE TAB_0005 |
local write wait espera0,008 s · 0,0% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 10 | 0,008094 | 100,0 | 9y5d9x2wwc9nn | TRUNCATE TABLE TAB_0005 |
SQL*Net message from client espera0,001 s · 0,0% del tiempo total · 2 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 6 | 0,000723 | 59,7 | #140548883950424 | ||
| 5 | 0,000489 | 40,3 | 68ngguy15jsj7 | alter session set events='***' |
Por clase de espera
No contabilizado37,474 s · 73,7% del tiempo total · 10 de 41 sentencias
31 sentencias más gastaron tiempo aquí; aumente el número en la parte superior de la página para verlas.
CPU12,121 s · 23,8% del tiempo total · 10 de 38 sentencias
28 sentencias más gastaron tiempo aquí; aumente el número en la parte superior de la página para verlas.
User I/O1,221 s · 2,4% del tiempo total · 10 de 24 sentencias
14 sentencias más gastaron tiempo aquí; aumente el número en la parte superior de la página para verlas.
Application0,014 s · 0,0% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 10 | 0,014392 | 100,0 | 9y5d9x2wwc9nn | TRUNCATE TABLE TAB_0005 |
Idle0,001 s · 0,0% del tiempo total · 2 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 6 | 0,000723 | 59,7 | #140548883950424 | ||
| 5 | 0,000489 | 40,3 | 68ngguy15jsj7 | alter session set events='***' |
Other0,001 s · 0,0% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 10 | 0,000616 | 100,0 | 9y5d9x2wwc9nn | TRUNCATE TABLE TAB_0005 |
Network0,000 s · 0,0% del tiempo total · 2 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 6 | 0,000004 | 57,1 | #140548883950424 | ||
| 5 | 0,000003 | 42,9 | 68ngguy15jsj7 | alter session set events='***' |
Sentencias SQL por contribución
Contribución: duración de las llamadas de nivel 0 de la sentencia sumada a las esperas entre llamadas en su cursor. Inclusivo: suma de todas las llamadas de la sentencia, en cualquier profundidad.
| # | Contribución (s) | % del total | Inclusivo (s) | Tipo | Prof. | Exec | Fetch | Filas | LIO | PIO | SQL ID | Texto |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1,415 | 2,8 | 4,941 | SELECT | 1 | 89.112 | 89.112 | 89.112 | 445.560 | 0 | 49 variantes SELECT (SELECT COL_0073 FROM TAB_0005 WHERE COL_0074 = :n AND ROWNUM <=:n) AS COL_0073 FROM DUAL | |
| 2 | 1,405 | 2,8 | 4,842 | SELECT | 1 | 89.112 | 89.112 | 89.112 | 445.560 | 0 | 49 variantes SELECT (SELECT COL_0075 FROM TAB_0005 WHERE COL_0074 = :n AND ROWNUM <=:n) AS COL_0075 FROM DUAL | |
| 3 | 0,623 | 1,2 | 1,451 | INSERT | 1 | 1.217 | 0 | 1.217 | 8.761 | 32 | 1.217 variantes INSERT INTO TAB_0001 (COL_0076,COL_0077, … NULL,NULL,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,:s,NULL,NULL,NULL,NULL… | |
| 4 | 0,137 | 0,3 | 0,070 | PL/SQL | 0 | 0 | 0 | 0 | 24 | 8 | 9sxjs1fk1qc9g | BEGIN ROT_0001('***',*** ); END; |
| 5 | 0,040 | 0,1 | 0,040 | ALTER SESSION | 0 | 1 | 0 | 0 | 0 | 0 | 68ngguy15jsj7 | alter session set events='***' |
| 6 | 0,027 | 0,1 | 0,026 | ? | 0 | 1 | 0 | 0 | 0 | 0 | #140548883950424 | |
| 7 | 0,000 | 0,0 | 1,023 | DELETE | 1 | 2 | 0 | 0 | 3.740 | 1.870 | 42q0kx6suxhw2 | DELETE FROM TAB_0001 |
| 8 | 0,000 | 0,0 | 0,417 | INSERT | 1 | 350 | 0 | 350 | 2.590 | 18 | 350 variantes INSERT INTO TAB_0001 (COL_0076,COL_0077, … :s,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL… | |
| 9 | 0,000 | 0,0 | 0,288 | INSERT | 1 | 251 | 0 | 251 | 1.800 | 5 | 251 variantes INSERT INTO TAB_0001 (COL_0076,COL_0077, … NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,… | |
| 10 | 0,000 | 0,0 | 0,082 | TRUNCATE TABLE | 1 | 1 | 0 | 0 | 110 | 17 | 9y5d9x2wwc9nn | TRUNCATE TABLE TAB_0005 |
Las filas marcadas con variantes suman sentencias que solo difieren en los literales; en el texto, :s y :n ocupan el lugar de los literales.
Mostrando 10 de 65 sentencias; aumente el número en la parte superior de la página para ver más.
Tiempo no atribuido a ninguna sentencia: 47,186 s.
Tipos de llamada
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 180.117 | 5,140 | 5,156 | 19 | 126 | 1 | 0 | 1.920 |
| FETCH | 178.460 | 4,550 | 4,726 | 28 | 893.297 | 0 | 178.432 | 0 |
| EXEC | 180.269 | 2,212 | 3,245 | 1.940 | 5.703 | 11.363 | 1.878 | 1 |
| CLOSE | 180.268 | 0,256 | 0,250 | 0 | 0 | 0 | 0 | 0 |
Llamadas de nivel 0 más largas
| Llamada | Duración (s) | CPU (s) | Inicio (+s) | Línea | LIO | PIO | Filas | Sentencia |
|---|---|---|---|---|---|---|---|---|
| PARSE | 0,070229 | 0,010998 | 0,068 | 101 | 24 | 8 | 0 | #4 BEGIN ROT_0001('***',*** ); END; |
| EXEC | 0,039483 | 0,002000 | 0,028 | 36 | 0 | 0 | 0 | #5 alter session set events='***' |
| EXEC | 0,025924 | 0,001000 | 0,000 | 27 | 0 | 0 | 0 | #6 #140548883950424 |
| PARSE | 0,000157 | 0,000000 | 0,027 | 35 | 0 | 0 | 0 | #5 alter session set events='***' |
| CLOSE | 0,000014 | 0,000000 | 0,068 | 39 | 0 | 0 | 0 | #5 alter session set events='***' |
| CLOSE | 0,000010 | 0,000000 | 0,027 | 30 | 0 | 0 | 0 | #6 #140548883950424 |
Distribución de latencia
Rangos en potencias de 10, por evento de espera y por tipo de llamada. Muestra si el tiempo viene de muchas ocurrencias rápidas o de pocas lentas.
db file sequential read1.962 ocurrencias · 1,048 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 921 | 46,9 | 0,007373 | 0,7 | |
| 10 µs ≤ e < 100 µs | 792 | 40,4 | 0,013459 | 1,3 | |
| 100 µs ≤ e < 1 ms | 138 | 7,0 | 0,063020 | 6,0 | |
| 1 ms ≤ e < 10 ms | 81 | 4,1 | 0,492727 | 47,0 | |
| 10 ms ≤ e < 100 ms | 30 | 1,5 | 0,471031 | 45,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 |
direct path read18.337 ocurrencias · 0,165 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 15.931 | 86,9 | 0,088894 | 53,8 | |
| 10 µs ≤ e < 100 µs | 2.399 | 13,1 | 0,031524 | 19,1 | |
| 100 µs ≤ e < 1 ms | 3 | 0,0 | 0,000871 | 0,5 | |
| 1 ms ≤ e < 10 ms | 2 | 0,0 | 0,012198 | 7,4 | |
| 10 ms ≤ e < 100 ms | 2 | 0,0 | 0,031677 | 19,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 |
enq: RO - fast object reuse1 ocurrencias · 0,014 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 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 | 1 | 100,0 | 0,014392 | 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 |
local write wait3 ocurrencias · 0,008 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 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 | 3 | 100,0 | 0,008094 | 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 |
SQL*Net message from client2 ocurrencias · 0,001 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 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,001212 | 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 |
reliable message3 ocurrencias · 0,001 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 1 | 33,3 | 0,000005 | 0,8 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 2 | 66,7 | 0,000611 | 99,2 | |
| 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 |
Disk file operations I/O10 ocurrencias · 0,001 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 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 | 10 | 100,0 | 0,000524 | 100,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 |
SQL*Net message to client2 ocurrencias · 0,000 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 2 | 100,0 | 0,000007 | 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 |
PARSE (duración e de la llamada)180.117 ocurrencias · 5,156 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 5 | 0,0 | 0,000035 | 0,0 | |
| 10 µs ≤ e < 100 µs | 178.111 | 98,9 | 3,000978 | 58,2 | |
| 100 µs ≤ e < 1 ms | 1.275 | 0,7 | 1,125226 | 21,8 | |
| 1 ms ≤ e < 10 ms | 722 | 0,4 | 0,910699 | 17,7 | |
| 10 ms ≤ e < 100 ms | 4 | 0,0 | 0,118877 | 2,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 |
FETCH (duración e de la llamada)178.460 ocurrencias · 4,726 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 78 | 0,0 | 0,000438 | 0,0 | |
| 10 µs ≤ e < 100 µs | 178.059 | 99,8 | 4,514086 | 95,5 | |
| 100 µs ≤ e < 1 ms | 303 | 0,2 | 0,048463 | 1,0 | |
| 1 ms ≤ e < 10 ms | 14 | 0,0 | 0,062255 | 1,3 | |
| 10 ms ≤ e < 100 ms | 6 | 0,0 | 0,100307 | 2,1 | |
| 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 (duración e de la llamada)180.269 ocurrencias · 3,245 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 118.350 | 65,7 | 0,977253 | 30,1 | |
| 10 µs ≤ e < 100 µs | 59.907 | 33,2 | 0,785548 | 24,2 | |
| 100 µs ≤ e < 1 ms | 1.991 | 1,1 | 0,262669 | 8,1 | |
| 1 ms ≤ e < 10 ms | 16 | 0,0 | 0,046673 | 1,4 | |
| 10 ms ≤ e < 100 ms | 4 | 0,0 | 0,155844 | 4,8 | |
| 100 ms ≤ e < 1 s | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 s ≤ e < 10 s | 1 | 0,0 | 1,017115 | 31,3 | |
| 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 (duración e de la llamada)180.268 ocurrencias · 0,250 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 1 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 µs ≤ e < 10 µs | 179.926 | 99,8 | 0,240244 | 96,0 | |
| 10 µs ≤ e < 100 µs | 338 | 0,2 | 0,008739 | 3,5 | |
| 100 µs ≤ e < 1 ms | 4 | 0,0 | 0,001227 | 0,5 | |
| 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 |
Lecturas
lecturas (rangos de disco)20.299 ocurrencias · 1,213 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 5 ms | 20.208 | 99,6 | 0,269748 | 22,2 | |
| 5 ms ≤ e < 10 ms | 59 | 0,3 | 0,440318 | 36,3 | |
| 10 ms ≤ e < 15 ms | 17 | 0,1 | 0,200554 | 16,5 | |
| 15 ms ≤ e < 20 ms | 10 | 0,0 | 0,171484 | 14,1 | |
| 20 ms ≤ e < 25 ms | 3 | 0,0 | 0,067689 | 5,6 | |
| 25 ms ≤ e < 50 ms | 2 | 0,0 | 0,062981 | 5,2 | |
| 50 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 < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
lecturas (rangos de SSD)20.299 ocurrencias · 1,213 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 15 µs | 19.496 | 96,0 | 0,126062 | 10,4 | |
| 15 µs ≤ e < 25 µs | 295 | 1,5 | 0,005464 | 0,5 | |
| 25 µs ≤ e < 50 µs | 209 | 1,0 | 0,006839 | 0,6 | |
| 50 µs ≤ e < 100 µs | 43 | 0,2 | 0,002885 | 0,2 | |
| 100 µs ≤ e < 500 µs | 93 | 0,5 | 0,031763 | 2,6 | |
| 500 µs ≤ e < 1 ms | 48 | 0,2 | 0,032128 | 2,6 | |
| 1 ms ≤ e < 10 ms | 83 | 0,4 | 0,504925 | 41,6 | |
| 10 ms ≤ e < ∞ | 32 | 0,2 | 0,502708 | 41,5 |
Primera lectura y relectura del mismo bloque
La relectura frecuente del mismo bloque indica una caché pequeña o acceso repetido al mismo dato.
| Evento | Bloques distintos | 1.ª lectura | 1.ª lectura (s) | Relecturas | Relecturas (s) |
|---|---|---|---|---|---|
| db file sequential read | 1.956 | 1.956 | 1,048 | 6 | 0,000 |
| local write wait | 0 | 0 | 0,000 | 3 | 0,008 |
Objetos con más tiempo de espera
Por el obj# de las esperas. El nombre viene de las líneas STAT del propio trace, cuando existen.
| obj# | Nombre | Espera (s) | Ocurrencias | Eventos principales |
|---|---|---|---|---|
| 188047 | IDX_0001 | 0,931 | 1.877 | db file sequential read · Disk file operations I/O |
| 187750 | 0,165 | 18.336 | direct path read | |
| 1008999 | TAB_0005 | 0,023 | 17 | enq: RO - fast object reuse · local write wait · reliable message |
| 226 | IDL_CHAR$ | 0,017 | 1 | db file sequential read |
| 107 | I_DEPENDENCY2 | 0,016 | 1 | db file sequential read |
| 227 | IDL_UB2$ | 0,016 | 1 | db file sequential read |
| 427 | IDX_0012 | 0,010 | 1 | db file sequential read |
| 228 | IDL_SB4$ | 0,009 | 1 | db file sequential read |
| 31 | CDEF$ | 0,008 | 2 | db file sequential read |
| 19 | IND$ | 0,008 | 3 | db file sequential read |
| 237 | I_IDL_CHAR1 | 0,007 | 1 | db file sequential read |
| 236 | I_IDL_UB11 | 0,007 | 1 | db file sequential read |
| 187694 | 0,006 | 49 | db file sequential read | |
| 40 | I_OBJ5 | 0,005 | 1 | db file sequential read |
| 225 | IDL_UB1$ | 0,004 | 1 | db file sequential read |
| 464 | IDX_0008 | 0,003 | 1 | db file sequential read |
| 384 | 0,001 | 4 | SQL*Net message from client · SQL*Net message to client | |
| 650598 | 0,000 | 2 | db file sequential read · Disk file operations I/O | |
| 187749 | TAB_0002 | 0,000 | 2 | db file sequential read |
| 239 | I_IDL_SB41 | 0,000 | 1 | db file sequential read |
| 3 | I_OBJ# | 0,000 | 1 | db file sequential read |
| 54 | I_CDEF2 | 0,000 | 2 | db file sequential read |
| 18 | OBJ$ | 0,000 | 2 | db file sequential read |
| 187751 | 0,000 | 2 | db file sequential read · direct path read | |
| 462 | IDX_0007 | 0,000 | 1 | db file sequential read |
| 188088 | IDX_0002 | 0,000 | 1 | db file sequential read |
| 39 | I_OBJ4 | 0,000 | 1 | db file sequential read |
| 238 | I_IDL_UB21 | 0,000 | 1 | db file sequential read |
| 9 | I_FILE#_BLOCK# | 0,000 | 1 | db file sequential read |
| 57 | I_CCOL1 | 0,000 | 1 | db file sequential read |
Textos compartibles
Sentencias que solo difieren en literales. Con bind variables, un único cursor serviría para todas y los PARSE con hard parse bajarían.
| Textos | PARSE | PARSE (s) | Total (s) | SQL IDs | Ejemplo |
|---|---|---|---|---|---|
| 49 | 89.112 | 1,568 | 4,941 | ocultos por la máscara | #1 SELECT (SELECT COL_0073 FROM TAB_0005 WHERE COL_0074 = :n AND ROWNUM <=:n) AS COL_0073 FROM DUAL |
| 49 | 89.112 | 1,573 | 4,842 | ocultos por la máscara | #2 SELECT (SELECT COL_0075 FROM TAB_0005 WHERE COL_0074 = :n AND ROWNUM <=:n) AS COL_0075 FROM DUAL |
| 1.217 | 1.217 | 1,295 | 1,451 | ocultos por la máscara | #3 INSERT INTO TAB_0001 (COL_0076,COL_0077, … NULL,NULL,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,:s,NULL,NULL,NULL,NULL… |
| 350 | 350 | 0,373 | 0,417 | ocultos por la máscara | #8 INSERT INTO TAB_0001 (COL_0076,COL_0077, … :s,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL… |
| 251 | 251 | 0,256 | 0,288 | ocultos por la máscara | #9 INSERT INTO TAB_0001 (COL_0076,COL_0077, … NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,… |
| 2 | 3 | 0,000 | 0,000 | ocultos por la máscara | #60 select SYS_CONTEXT(:s,:s) from dual |
Tiempo no contabilizado entre llamadas
tiempo no contabilizado entre llamadas
Tiempo entre el fin de una llamada de nivel 0 y el inicio de la siguiente sin ninguna espera registrada. Es la diferencia entre el tiempo total y la suma de las llamadas y de las esperas entre ellas.
- Normal cuando
- Pequeño: fracciones de milisegundo por llamada.
- Preocupa cuando
- Suma mucho: el trace se activó o desactivó a mitad de camino, el proceso quedó fuera de la CPU (servidor saturado), la aplicación tardó sin que apareciera la espera de cliente, o falta un archivo de la colección.
- Dónde mirar
- Período del trace y huecos grandes de tiempo: Resumen, Período
- En una colección, si llegaron todos los archivos: Colección, archivos y sesiones
- Llamadas separadas por huecos: Llamadas de nivel 0 más largas
CPU en las llamadas PARSE
CPU: PARSE dbcalls
Tiempo de CPU de la sesión en el análisis del SQL (parse). Alto: hard parse por SQL sin bind, o parse repetido del mismo cursor (abrir y cerrar en cada ejecución).
- Normal cuando
- Es parte del trabajo normal de la base de datos.
- Preocupa cuando
- Domina el tiempo total: empiece por las sentencias que más CPU consumen y por sus lecturas lógicas.
- Dónde mirar
- Hard parses: Tipos de llamada, fila PARSE: Cantidad y Misses
- Sentencias que solo cambian los literales: Textos compartibles
- Un PARSE por cada EXEC: detalle de la sentencia, Llamadas: PARSE frente a EXEC
- Sentencias que más CPU consumieron en esta llamada: Sentencias principales por componente, grupo de esta llamada
CPU en las llamadas FETCH
CPU: FETCH dbcalls
Tiempo de CPU de la sesión en la búsqueda de las filas. Alto: demasiadas lecturas lógicas (LIO), en general un plan que lee muchos más bloques de los que piden las filas devueltas.
- Normal cuando
- Es parte del trabajo normal de la base de datos.
- Preocupa cuando
- Domina el tiempo total: empiece por las sentencias que más CPU consumen y por sus lecturas lógicas.
- Dónde mirar
- CPU por tipo de llamada: Tipos de llamada
- Sentencias con más lecturas lógicas: Sentencias SQL, columnas LIO y Filas
- Sentencias que más CPU consumieron en esta llamada: Sentencias principales por componente, grupo de esta llamada
- Operaciones del plan con LIO propio alto: detalle de la sentencia, Plan de ejecución: operaciones destacadas
CPU en las llamadas EXEC
CPU: EXEC dbcalls
Tiempo de CPU de la sesión en la ejecución: DML, apertura del cursor y cuerpo de bloques PL/SQL. Alto en PL/SQL: lógica pesada o SQL dentro de un bucle.
- Normal cuando
- Es parte del trabajo normal de la base de datos.
- Preocupa cuando
- Domina el tiempo total: empiece por las sentencias que más CPU consumen y por sus lecturas lógicas.
- Dónde mirar
- CPU por tipo de llamada: Tipos de llamada
- Sentencias con más lecturas lógicas: Sentencias SQL, columnas LIO y Filas
- Sentencias que más CPU consumieron en esta llamada: Sentencias principales por componente, grupo de esta llamada
- Sentencias hijas de los bloques PL/SQL: detalle de la sentencia, SQL recursivo
Lectura de un bloque
db file sequential read
Lee un bloque del disco al buffer cache: acceso por índice, a la tabla por ROWID, a undo o a la cabecera de segmento.
- Normal cuando
- Acceso por índice a pocos bloques, con promedio de 0,1 a 1 ms en SSD o flash y de 5 a 10 ms en disco.
- Preocupa cuando
- Muchas lecturas: el plan lee demasiados bloques (índice poco selectivo, NESTED LOOPS con muchas filas). Promedio alto: almacenamiento lento o con contención.
- Dónde mirar
- Cuántas lecturas y cuánto dura cada una: Perfil, fila de este componente: columnas Ocurrencias y Media (s)
- Lecturas lentas, o muchas lecturas rápidas: Distribución de latencia, tabla de este evento
- Objetos más leídos: Objetos con más tiempo de espera
- Relectura de los mismos bloques: Lecturas, primera lectura y relectura del mismo bloque
- Sentencias que más leyeron: Sentencias principales por componente, grupo de este evento
- Operaciones del plan que leen demasiados bloques: detalle de la sentencia, Plan de ejecución: operaciones destacadas
CPU en las llamadas CLOSE
CPU: CLOSE dbcalls
Tiempo de CPU de la sesión en el cierre del cursor. Casi siempre pequeño.
- Normal cuando
- Es parte del trabajo normal de la base de datos.
- Preocupa cuando
- Domina el tiempo total: empiece por las sentencias que más CPU consumen y por sus lecturas lógicas.
- Dónde mirar
- CPU por tipo de llamada: Tipos de llamada
- Sentencias con más lecturas lógicas: Sentencias SQL, columnas LIO y Filas
- Sentencias que más CPU consumieron en esta llamada: Sentencias principales por componente, grupo de esta llamada
- Sentencias hijas de los bloques PL/SQL: detalle de la sentencia, SQL recursivo
Lectura directa a la PGA
direct path read
Lee bloques del disco directamente a la memoria de la sesión, sin pasar por el buffer cache: full scan grande en serie o consulta paralela.
- Normal cuando
- Lectura completa de una tabla grande en un proceso por lotes.
- Preocupa cuando
- Aparece en una pantalla de usuario o dentro de un bucle: full scan grande repetido, tabla leída entera para devolver pocas filas.
- Dónde mirar
- Sentencias que más leyeron: Sentencias principales por componente, grupo de este evento
- Operaciones TABLE ACCESS FULL y cuántas veces se ejecutaron: detalle de la sentencia, Plan de ejecución: columna Exec
- Objetos más leídos: Objetos con más tiempo de espera
Tiempo no contabilizado dentro de las llamadas
tiempo no contabilizado dentro de las llamadas
La parte de la duración de la llamada (e=) que no es CPU (c=) ni espera registrada dentro de ella.
- Normal cuando
- Pequeño. El valor negativo viene de la granularidad de la medición de CPU, no de un problema.
- Preocupa cuando
- Suma mucho: cola de CPU (más procesos listos que núcleos), paginación de memoria (swap) o código sin instrumentación de espera.
- Dónde mirar
- Llamadas en las que el tiempo desaparece (duración muy por encima de CPU más esperas): Llamadas de nivel 0 más largas
- Sentencias que más cargan con ese tiempo: Sentencias principales por componente, grupo de este evento
- Carga de CPU y memoria libre del servidor en el período, fuera del informe
Limpieza de buffers (TRUNCATE o DROP)
enq: RO - fast object reuse
TRUNCATE o DROP esperando que la base de datos descarte los bloques del objeto que están en el buffer cache.
- Normal cuando
- Suma poco tiempo.
- Preocupa cuando
- TRUNCATE dentro de un bucle, o buffer cache demasiado grande para recorrer.
- Dónde mirar
- Cuántas ocurrencias: Perfil, fila de este componente: columna Ocurrencias
- Sentencias que más esperaron: Sentencias principales por componente, grupo de este evento
User I/O (lectura y escritura de datos)
User I/O
Lecturas y escrituras de datos hechas por la propia sesión.
- Normal cuando
- Siempre hay algo de I/O, con promedio bajo por lectura.
- Preocupa cuando
- Demasiados bloques (el plan lee más de lo necesario) o tiempo medio alto por lectura (almacenamiento lento).
- Dónde mirar
- Qué eventos de I/O pesan: Por clase de espera, fila de esta clase: columna Componentes principales
- Lecturas lentas, o muchas lecturas rápidas: Distribución de latencia
- Objetos más leídos: Objetos con más tiempo de espera
- Sentencias que más leyeron: Sentencias principales por clase, grupo de esta clase
- Operaciones del plan que leen demasiados bloques: detalle de la sentencia, Plan de ejecución: operaciones destacadas
Esperando a la aplicación
SQL*Net message from client
La sesión terminó la llamada anterior y espera el próximo pedido de la aplicación. Es tiempo de la aplicación, de la red y del usuario, no de la base de datos.
- Normal cuando
- Aparece entre todas las llamadas. Las esperas largas y aisladas son el usuario pensando o la aplicación ocupada con otra cosa.
- Preocupa cuando
- Domina el tiempo total con muchas esperas cortas: la aplicación conversa demasiado con la base de datos (una fila por llamada, SQL dentro de un bucle). Con pocas esperas largas, la demora está en la aplicación, y ajustar el SQL no la resuelve.
- Dónde mirar
- Cuántas idas y vueltas hubo y cuánto dura cada una: Perfil, fila de este componente: columnas Ocurrencias y Media (s)
- Muchas esperas cortas o pocas largas: Distribución de latencia, tabla de este evento
- FETCH que traen pocas filas cada uno: Tipos de llamada, fila FETCH: Cantidad y Filas
- Sentencias que más esperaron a la aplicación: Sentencias principales por componente, grupo de este evento
Mensaje entre procesos
reliable message
La sesión envió un mensaje a procesos de fondo o a otras instancias y espera la confirmación.
- Normal cuando
- Suma poco tiempo.
- Preocupa cuando
- Suma mucho: TRUNCATE, result cache o cambio de parámetro en RAC.
- Dónde mirar
- Sentencias que más esperaron: Sentencias principales por componente, grupo de este evento
Abriendo o cerrando archivos
Disk file operations I/O
Operaciones sobre el archivo (abrir, cerrar, consultar el tamaño), no lectura de datos.
- Normal cuando
- Suma poco tiempo.
- Preocupa cuando
- Suma mucho: muchos archivos abiertos y cerrados, o sistema de archivos lento.
- Dónde mirar
- Cuántas ocurrencias y cuánto dura cada una: Perfil, fila de este componente: columnas Ocurrencias y Media (s)
Enviando la respuesta
SQL*Net message to client
Tiempo para entregar un paquete de respuesta al sistema operativo. No mide la red hasta el cliente, solo la entrega al SO.
- Normal cuando
- Microsegundos por ocurrencia, una por llamada.
- Preocupa cuando
- El promedio sube a milisegundos: búfer de red del servidor lleno o red saturada.
- Dónde mirar
- Promedio y máximo por espera: Perfil, fila de este componente: columnas Media (s) y Máx (s)
No contabilizado
No contabilizado
Tiempo que el trace no explica por CPU ni por espera: dentro de las llamadas y entre ellas.
- Normal cuando
- Pequeño.
- Preocupa cuando
- Cola de CPU, paginación, huecos en el trace o un archivo que falta en la colección.
- Dónde mirar
- Los dos componentes de tiempo no contabilizado y la tarjeta de cada uno: Perfil del tiempo de respuesta
CPU
CPU
Tiempo de CPU de las llamadas a la base de datos (el c= de PARSE, EXEC y FETCH).
- Normal cuando
- Es el trabajo de la base de datos.
- Preocupa cuando
- Suma mucho: demasiadas lecturas lógicas (plan), parse en exceso o PL/SQL pesado.
- Dónde mirar
- CPU por tipo de llamada: Tipos de llamada
- Sentencias con más lecturas lógicas: Sentencias SQL, columnas LIO y Filas
- Sentencias que más CPU consumieron: Sentencias principales por clase, grupo de esta clase
Application (aplicación)
Application
Esperas causadas por la forma en que la aplicación usa la base de datos: filas y tablas bloqueadas por otra sesión, bloqueos de la aplicación, errores devueltos.
- Normal cuando
- Suma poco tiempo.
- Preocupa cuando
- Sesión detenida esperando a otra: transacciones largas, la misma fila actualizada por varias sesiones, clave foránea sin índice.
- Dónde mirar
- Qué eventos pesan: Por clase de espera, fila de esta clase: columna Componentes principales
- Objetos en disputa: Objetos con más tiempo de espera
- Sentencias que quedaron bloqueadas: Sentencias principales por clase, grupo de esta clase
- Quién sostiene el lock: v$session.blocking_session, en la base de datos
Idle (inactiva)
Idle
La sesión espera trabajo. En un trace de sesión, casi siempre es SQL*Net message from client: tiempo de la aplicación, de la red y del usuario.
- Normal cuando
- Aparece entre las llamadas.
- Preocupa cuando
- Domina el tiempo total y el usuario se queja de la demora: la lentitud está fuera de la base de datos (aplicación, red, demasiadas idas y vueltas).
- Dónde mirar
- Cuántas idas y vueltas hubo: Resumen, Llamadas a la base de datos y Esperas
- FETCH que traen pocas filas cada uno: Tipos de llamada, fila FETCH: Cantidad y Filas
- Sentencias que más esperaron a la aplicación: Sentencias principales por clase, grupo de esta clase
Other (otros)
Other
Eventos internos sin una clase más específica.
- Normal cuando
- Suma poco tiempo.
- Preocupa cuando
- Suma mucho: el evento es el que indica la causa.
- Dónde mirar
Network (red)
Network
Enviar y recibir datos por SQL*Net, con la aplicación o con otra base de datos por dblink.
- Normal cuando
- Suma poco tiempo.
- Preocupa cuando
- Resultados grandes, arraysize bajo o dblink lento.
- Dónde mirar
- Qué eventos de la clase pesan (more data, dblink): Por clase de espera, fila de esta clase: columna Componentes principales
- Filas por FETCH: Tipos de llamada, fila FETCH: Cantidad y Filas
- Sentencias que más usaron la red: Sentencias principales por clase, grupo de esta clase
SQL recursivo (sentencias hijas)
SQL recursivo (sentencias hijas)
Tiempo de las llamadas que esta sentencia disparó: SQL dentro de funciones y procedimientos PL/SQL, triggers y consultas al diccionario.
- Normal cuando
- Sentencia PL/SQL que ejecuta otros SQL.
- Preocupa cuando
- Suma mucho en un SELECT o DML simple: función PL/SQL llamada por fila, o trigger pesado.
- Dónde mirar
- Qué sentencias hijas y cuánto cuesta cada una: detalle de la sentencia, SQL recursivo
#1 · SELECT
49 variantesTexto
SELECT (SELECT COL_0073 FROM TAB_00051 WHERE COL_0074 = :n AND ROWNUM <=:n) AS COL_0073 FROM DUAL
- 1 TAB_0005: operación 2 del plan
Texto de la forma: los literales se convirtieron en :s (texto) y :n (número).
Variantes que más gastaron
| Llamadas | Inclusivo (s) | Literales |
|---|---|---|
| 7.276 | 0,144 | ***, *** |
| 7.272 | 0,120 | ***, *** |
| 7.276 | 0,110 | ***, *** |
| 7.272 | 0,107 | ***, *** |
| 7.276 | 0,107 | ***, *** |
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 2,239668 | 45,3 | 89.112 | |
| cpu | 1,558749 | 31,5 | 89.112 | |
| cpu | 0,903868 | 18,3 | 89.112 | |
| cpu | 0,123982 | 2,5 | 89.112 | |
| no contabilizado | 0,114630 | 2,3 | 356.448 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 89.112 | 1,558749 | 1,567573 | 0 | 0 | 0 | 0 | 49 |
| EXEC | 89.112 | 0,903868 | 0,922604 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 89.112 | 2,239668 | 2,327062 | 0 | 445.560 | 0 | 89.112 | 0 |
| CLOSE | 89.112 | 0,123982 | 0,123658 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3212480556
De las líneas STAT del trace; plan registrado 89115 veces, se muestra el registro más lento.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · TABLE ACCESS FULL TAB_0005 86,5% del tiempo · 100,0% de las lecturas lógicas
Lee el objeto completo: compruebe si el filtro es selectivo y si hay un índice para él.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0,000004 | 10,8 | 0 | 0,0 | 0 | 0 | 0,000036 | 5 | ||||||
| 2 | 1 | 1 | 1 | 0,000032 | 86,5 | 5 | 100,0 | 0 | 0 | 0,000032 | 5 | 3 | 1008999 | ||
| 3 | FAST DUAL | 1 | 1 | 0,000001 | 2,7 | 0 | 0,0 | 0 | 0 | 0,000001 | 0 | 2 |
Corte en N filas
COUNT STOPKEY
Deja de leer después de N filas (ROWNUM <= N o FETCH FIRST).
- Buena cuando
- Corta el trabajo pronto cuando las filas ya llegan en el orden correcto.
- Mala cuando
- Cuando hay una ordenación completa debajo: todo se lee antes del corte.
- En el plan, mire
- Filas de las operaciones de abajo.
Lectura completa de la tabla (full table scan)
TABLE ACCESS FULL
Lee todos los bloques del segmento hasta la high water mark (HWM), con multiblock reads (db file scattered read, o direct path read en la lectura directa).
- Buena cuando
- La consulta necesita buena parte de las filas, la tabla es pequeña o la lectura es por lotes. En Exadata (STORAGE FULL) el filtro se ejecuta en las celdas de almacenamiento (smart scan).
- Mala cuando
- El predicado es selectivo y quedan pocas filas: el costo crece con el tamaño del segmento, no con el resultado. Peor como inner de un NESTED LOOPS: el full scan se repite por cada fila del outer.
- En el plan, mire
- LIO propio alto con pocas Filas devueltas: predicado selectivo sin un índice útil. Exec mayor que 1: full scan repetido.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#2 · SELECT
49 variantesTexto
SELECT (SELECT COL_0075 FROM TAB_00051 WHERE COL_0074 = :n AND ROWNUM <=:n) AS COL_0075 FROM DUAL
- 1 TAB_0005: operación 2 del plan
Texto de la forma: los literales se convirtieron en :s (texto) y :n (número).
Variantes que más gastaron
| Llamadas | Inclusivo (s) | Literales |
|---|---|---|
| 7.272 | 0,109 | ***, *** |
| 7.276 | 0,106 | ***, *** |
| 7.276 | 0,103 | ***, *** |
| 7.272 | 0,103 | ***, *** |
| 7.276 | 0,102 | ***, *** |
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 2,287639 | 47,2 | 89.112 | |
| cpu | 1,626753 | 33,6 | 89.112 | |
| cpu | 0,864872 | 17,9 | 89.112 | |
| cpu | 0,130972 | 2,7 | 89.112 | |
| no contabilizado | -0,067789 | -1,4 | 356.448 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 89.112 | 1,626753 | 1,573453 | 0 | 0 | 0 | 0 | 49 |
| EXEC | 89.112 | 0,864872 | 0,878362 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 89.112 | 2,287639 | 2,267754 | 0 | 445.560 | 0 | 89.112 | 0 |
| CLOSE | 89.112 | 0,130972 | 0,122878 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3212480556
De las líneas STAT del trace; plan registrado 89114 veces, se muestra el registro más lento.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · TABLE ACCESS FULL TAB_0005 90,4% del tiempo · 100,0% de las lecturas lógicas
Lee el objeto completo: compruebe si el filtro es selectivo y si hay un índice para él.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0,000003 | 5,8 | 0 | 0,0 | 0 | 0 | 0,000050 | 5 | ||||||
| 2 | 1 | 1 | 1 | 0,000047 | 90,4 | 5 | 100,0 | 0 | 0 | 0,000047 | 5 | 3 | 1008999 | ||
| 3 | FAST DUAL | 1 | 1 | 0,000002 | 3,8 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 2 |
Corte en N filas
COUNT STOPKEY
Deja de leer después de N filas (ROWNUM <= N o FETCH FIRST).
- Buena cuando
- Corta el trabajo pronto cuando las filas ya llegan en el orden correcto.
- Mala cuando
- Cuando hay una ordenación completa debajo: todo se lee antes del corte.
- En el plan, mire
- Filas de las operaciones de abajo.
Lectura completa de la tabla (full table scan)
TABLE ACCESS FULL
Lee todos los bloques del segmento hasta la high water mark (HWM), con multiblock reads (db file scattered read, o direct path read en la lectura directa).
- Buena cuando
- La consulta necesita buena parte de las filas, la tabla es pequeña o la lectura es por lotes. En Exadata (STORAGE FULL) el filtro se ejecuta en las celdas de almacenamiento (smart scan).
- Mala cuando
- El predicado es selectivo y quedan pocas filas: el costo crece con el tamaño del segmento, no con el resultado. Peor como inner de un NESTED LOOPS: el full scan se repite por cada fila del outer.
- En el plan, mire
- LIO propio alto con pocas Filas devueltas: predicado selectivo sin un índice útil. Exec mayor que 1: full scan repetido.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#3 · INSERT
1.217 variantesTexto
INSERT INTO TAB_0001 (COL_0076,COL_0077,COL_0078,COL_0079,COL_0080,COL_0081,COL_0082,COL_0083,COL_0084,COL_0085,COL_0086,COL_0087,COL_0088,COL_0089,COL_0090,COL_0091,COL_0092,COL_0093,COL_0094,COL_0095,COL_0096,COL_0097,COL_0098,COL_0099,COL_0100,COL_0101,COL_0102,COL_0103,COL_0104,COL_0105,COL_0106,COL_0107,COL_0108,COL_0109,COL_0110,COL_0111,COL_0112,COL_0113,COL_0114,COL_0115,COL_0116,COL_0117,COL_0118,COL_0119,COL_0003,COL_0120,COL_0121,COL_0122,COL_0123) VALUES (:s,:s,:s,:s,:s,:s,:s,:s,NULL,:s,:s,NULL,:s,NULL,NULL,NULL,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,:s,NULL,NULL,NULL,NULL,NULL,NULL,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,:s,:s,:n ,NULL,:s,:s,:n ,:s,:s,:s)
- 1 operación 1 (LOAD TABLE CONVENTIONAL) no tiene objeto propio en el texto
Texto de la forma: los literales se convirtieron en :s (texto) y :n (número).
Variantes que más gastaron
| Llamadas | Inclusivo (s) | Literales |
|---|---|---|
| 3 | 0,006 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***',… |
| 3 | 0,006 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***',… |
| 3 | 0,005 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***',… |
| 3 | 0,004 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***',… |
| 3 | 0,004 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***',… |
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 1,314810 | 90,6 | 1.217 | |
| cpu | 0,152976 | 10,5 | 1.217 | |
| espera | 0,002378 | 0,2 | 32 | |
| cpu | 0,000000 | 0,0 | 1.217 | |
| no contabilizado | -0,018753 | -1,3 | 3.651 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1.217 | 1,314810 | 1,295202 | 0 | 0 | 0 | 0 | 1.217 |
| EXEC | 1.217 | 0,152976 | 0,154230 | 32 | 1.249 | 7.512 | 1.217 | 0 |
| CLOSE | 1.217 | 0,000000 | 0,001979 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3212480556
De las líneas STAT del trace; plan registrado 1217 veces, se muestra el registro más lento.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,003105 | 100,0 | 1 | 100,0 | 0 | 0 | 0,003105 | 1 |
Inserción convencional
LOAD TABLE CONVENTIONAL
Inserta las filas en la tabla por el camino normal del INSERT.
- Buena cuando
- Inserciones del día a día.
- Mala cuando
- Los triggers, índices y constraints de la tabla pesan aquí; en cargas grandes, el modo directo (APPEND) escribe más rápido.
- En el plan, mire
- Tiempo propio (s) y las esperas de la sentencia.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#4 · PL/SQL
sql_id 9sxjs1fk1qc9ghv 2753245487Texto
BEGIN ROT_0001('***',*** ); END;
Texto truncado: el trace declara 42 caracteres.
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,066395 | 48,6 | 5.333 | |
| recursivo | 0,063234 | 46,3 | ||
| cpu | 0,004999 | 3,7 | 1 | |
| no contabilizado | 0,001996 | 1,5 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,010998 | 0,070229 | 8 | 24 | 0 | 0 | 1 |
SQL recursivo ejecutado por esta sentencia
#5 · ALTER SESSION
sql_id 68ngguy15jsj7hv 2186863143Texto
alter session set events='***'
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,037654 | 93,8 | 3 | |
| cpu | 0,002000 | 5,0 | 1 | |
| espera | 0,000489 | 1,2 | 1 | |
| espera | 0,000003 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000157 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,002000 | 0,039483 | 0 | 0 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000014 | 0 | 0 | 0 | 0 | 0 |
#6 · ?
Texto
Texto no disponible: el cursor se abrió antes del inicio del trace.
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,024934 | 93,5 | 2 | |
| cpu | 0,001000 | 3,8 | 1 | |
| espera | 0,000723 | 2,7 | 1 | |
| espera | 0,000004 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| EXEC | 1 | 0,001000 | 0,025924 | 0 | 0 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000010 | 0 | 0 | 0 | 0 | 0 |
#7 · DELETE
sql_id 42q0kx6suxhw2hv 2981020546Texto
DELETE FROM TAB_0001
- 1 IDX_0001 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 2)
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,930878 | 91,0 | 1.870 | |
| cpu | 0,130980 | 12,8 | 2 | |
| espera | 0,000354 | 0,0 | 7 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| no contabilizado | -0,039494 | -3,9 | 6 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000138 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,130980 | 1,022574 | 1.870 | 3.740 | 0 | 0 | 0 |
| CLOSE | 2 | 0,000000 | 0,000006 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2124198792
De las líneas STAT del trace; plan registrado 2 veces, se muestra el último.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX FULL SCAN IDX_0001 99,1% del tiempo · 100,0% de las lecturas lógicas
Lee el objeto completo: compruebe si el filtro es selectivo y si hay un índice para él.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0,000050 | 0,9 | 0 | 0,0 | 0 | 0 | 0,005432 | 1.870 | ||||||
| 2 | 1 | 0 | 1 | 0,005382 | 99,1 | 1.870 | 100,0 | 0 | 0 | 0,005382 | 1.870 | 2 | 188047 |
Eliminación
DELETE
Elimina las filas que devolvió el row source de abajo.
- Buena cuando
- Pocas filas, encontradas por índice.
- Mala cuando
- Demasiadas filas; una clave foránea sin índice en la tabla hija bloquea la tabla entera.
- En el plan, mire
- Filas del row source de abajo.
Lectura completa del índice, en orden
INDEX FULL SCAN
Lee el índice entero en orden de clave, recorriendo los leaf blocks uno a uno, con single block reads (db file sequential read).
- Buena cuando
- Evita una ordenación: el ORDER BY o el GROUP BY es por la clave del índice.
- Mala cuando
- Índice grande leído entero, bloque a bloque, cuando sería posible una lectura por lotes (INDEX FAST FULL SCAN) o un acceso selectivo.
- En el plan, mire
- LIO propio y Tiempo propio (s).
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#8 · INSERT
350 variantesTexto
INSERT INTO TAB_0001 (COL_0076,COL_0077,COL_0078,COL_0079,COL_0080,COL_0081,COL_0082,COL_0083,COL_0084,COL_0085,COL_0086,COL_0087,COL_0088,COL_0089,COL_0090,COL_0091,COL_0092,COL_0093,COL_0094,COL_0095,COL_0096,COL_0097,COL_0098,COL_0099,COL_0100,COL_0101,COL_0102,COL_0103,COL_0104,COL_0105,COL_0106,COL_0107,COL_0108,COL_0109,COL_0110,COL_0111,COL_0112,COL_0113,COL_0114,COL_0115,COL_0116,COL_0117,COL_0118,COL_0119,COL_0003,COL_0120,COL_0121,COL_0122,COL_0123) VALUES (:s,:s,:s,:s,:s,:s,:s,:s,NULL,:s,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,:s,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,:s,:s,:n ,NULL,:s,:s,:n ,:s,:s,:s)
- 1 operación 1 (LOAD TABLE CONVENTIONAL) no tiene objeto propio en el texto
Texto de la forma: los literales se convirtieron en :s (texto) y :n (número).
Variantes que más gastaron
| Llamadas | Inclusivo (s) | Literales |
|---|---|---|
| 3 | 0,024 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', ***,… |
| 3 | 0,002 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', ***, … |
| 3 | 0,002 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', ***,… |
| 3 | 0,002 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', ***, … |
| 3 | 0,002 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', ***,… |
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,352953 | 84,7 | 350 | |
| cpu | 0,040994 | 9,8 | 350 | |
| recursivo | 0,018535 | 4,4 | ||
| espera | 0,002529 | 0,6 | 12 | |
| cpu | 0,001000 | 0,2 | 350 | |
| no contabilizado | 0,000606 | 0,1 | 1.050 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 350 | 0,355953 | 0,372854 | 6 | 78 | 0 | 0 | 350 |
| EXEC | 350 | 0,040994 | 0,043200 | 12 | 358 | 2.154 | 350 | 0 |
| CLOSE | 350 | 0,001000 | 0,000563 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3212480556
De las líneas STAT del trace; plan registrado 350 veces, se muestra el registro más lento.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,000904 | 100,0 | 1 | 100,0 | 4 | 0 | 0,000904 | 1 |
Inserción convencional
LOAD TABLE CONVENTIONAL
Inserta las filas en la tabla por el camino normal del INSERT.
- Buena cuando
- Inserciones del día a día.
- Mala cuando
- Los triggers, índices y constraints de la tabla pesan aquí; en cargas grandes, el modo directo (APPEND) escribe más rápido.
- En el plan, mire
- Tiempo propio (s) y las esperas de la sentencia.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
SQL recursivo ejecutado por esta sentencia
#9 · INSERT
251 variantesTexto
INSERT INTO TAB_0001 (COL_0076,COL_0077,COL_0078,COL_0079,COL_0080,COL_0081,COL_0082,COL_0083,COL_0084,COL_0085,COL_0086,COL_0087,COL_0088,COL_0089,COL_0090,COL_0091,COL_0092,COL_0093,COL_0094,COL_0095,COL_0096,COL_0097,COL_0098,COL_0099,COL_0100,COL_0101,COL_0102,COL_0103,COL_0104,COL_0105,COL_0106,COL_0107,COL_0108,COL_0109,COL_0110,COL_0111,COL_0112,COL_0113,COL_0114,COL_0115,COL_0116,COL_0117,COL_0118,COL_0119,COL_0003,COL_0120,COL_0121,COL_0122,COL_0123) VALUES (:s,:s,:s,:s,:s,:s,:s,:s,NULL,:s,:s,NULL,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,:s,NULL,NULL,NULL,NULL,NULL,NULL,NULL,:s,:s,:n ,NULL,:s,:s,:n ,:s,:s,:s)
- 1 operación 1 (LOAD TABLE CONVENTIONAL) no tiene objeto propio en el texto
Texto de la forma: los literales se convirtieron en :s (texto) y :n (número).
Variantes que más gastaron
| Llamadas | Inclusivo (s) | Literales |
|---|---|---|
| 3 | 0,003 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***'… |
| 3 | 0,003 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***'… |
| 3 | 0,002 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***'… |
| 3 | 0,002 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***'… |
| 3 | 0,002 | '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***', '***'… |
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,253971 | 88,3 | 251 | |
| cpu | 0,034992 | 12,2 | 251 | |
| espera | 0,000954 | 0,3 | 5 | |
| cpu | 0,000000 | 0,0 | 251 | |
| no contabilizado | -0,002291 | -0,8 | 753 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 251 | 0,253971 | 0,256408 | 0 | 0 | 0 | 0 | 251 |
| EXEC | 251 | 0,034992 | 0,030809 | 5 | 256 | 1.544 | 251 | 0 |
| CLOSE | 251 | 0,000000 | 0,000409 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3212480556
De las líneas STAT del trace; plan registrado 251 veces, se muestra el registro más lento.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,000646 | 100,0 | 2 | 100,0 | 1 | 0 | 0,000646 | 2 |
Inserción convencional
LOAD TABLE CONVENTIONAL
Inserta las filas en la tabla por el camino normal del INSERT.
- Buena cuando
- Inserciones del día a día.
- Mala cuando
- Los triggers, índices y constraints de la tabla pesan aquí; en cargas grandes, el modo directo (APPEND) escribe más rápido.
- En el plan, mire
- Tiempo propio (s) y las esperas de la sentencia.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#10 · TRUNCATE TABLE
sql_id 9y5d9x2wwc9nnhv 3116770964Texto
TRUNCATE TABLE TAB_0005
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| recursivo | 0,040612 | 49,5 | ||
| espera | 0,014392 | 17,6 | 1 | |
| cpu | 0,008999 | 11,0 | 1 | |
| cpu | 0,008998 | 11,0 | 1 | |
| espera | 0,008094 | 9,9 | 3 | |
| espera | 0,000616 | 0,8 | 3 | |
| espera | 0,000162 | 0,2 | 7 | |
| espera | 0,000082 | 0,1 | 1 | |
| no contabilizado | 0,000023 | 0,0 | 3 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,013998 | 0,013202 | 3 | 18 | 1 | 0 | 1 |
| EXEC | 1 | 0,024996 | 0,068773 | 14 | 44 | 47 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000003 | 0 | 0 | 0 | 0 | 0 |
SQL recursivo ejecutado por esta sentencia
#11 · SELECT
sql_id 2vb5a3dnk45pjhv 1763841713Texto
SELECT COL_0066 FROM ALL_TAB_COLUMNS WHERE OWNER = '***' AND COL_0063 = :B2 AND COL_0067 = :B1
- 1 IDX_0012 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 28)
- 2 OBJ$ (tabla del índice I_OBJ5) no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 22)
- 3 COLTYPE$ no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 25)
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,015414 | 50,8 | 4 | |
| cpu | 0,010998 | 36,2 | 50 | |
| cpu | 0,009998 | 32,9 | 50 | |
| cpu | 0,000000 | 0,0 | 50 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,006045 | -19,9 | 151 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000019 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 50 | 0,010998 | 0,007154 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 50 | 0,009998 | 0,023110 | 4 | 1.000 | 0 | 50 | 0 |
| CLOSE | 50 | 0,000000 | 0,000082 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2802916940
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 28 · INDEX RANGE SCAN IDX_0012 63,4% del tiempo · 10,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 22 · INDEX RANGE SCAN I_OBJ5 34,3% del tiempo · 15,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 3 Id 25 · TABLE ACCESS CLUSTER COLTYPE$ 0,1% del tiempo · 15,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | 18 | |||
| 2 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 36 | |||
| 3 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | 18 | |||
| 4 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 36 | |||
| 5 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | 18 | |||
| 6 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 36 | |||
| 7 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | 18 | |||
| 8 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 36 | |||
| 9 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | 18 | |||
| 10 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 36 | |||
| 11 | 1 | 0,000061 | 0,4 | 0 | 0,0 | 4 | 0 | 0,015885 | 20 | ||||||
| 12 | 1 | 1 | 0,000006 | 0,0 | 0 | 0,0 | 4 | 0 | 0,015802 | 16 | 11 | ||||
| 13 | 1 | 1 | 0,000003 | 0,0 | 0 | 0,0 | 4 | 0 | 0,015783 | 15 | 10 | ||||
| 14 | 1 | 1 | 0,000005 | 0,0 | 0 | 0,0 | 4 | 0 | 0,015776 | 15 | 9 | ||||
| 15 | 1 | 1 | 0,000003 | 0,0 | 0 | 0,0 | 3 | 0 | 0,005692 | 13 | 8 | ||||
| 16 | 1 | 1 | 0,000004 | 0,0 | 0 | 0,0 | 3 | 0 | 0,005685 | 13 | 6 | ||||
| 17 | 1 | 1 | 0,000005 | 0,0 | 0 | 0,0 | 3 | 0 | 0,005668 | 10 | 5 | ||||
| 18 | 1 | 1 | 0,000002 | 0,0 | 0 | 0,0 | 2 | 0 | 0,005589 | 6 | 4 | ||||
| 19 | 1 | 1 | 0,000005 | 0,0 | 1 | 5,0 | 0 | 0 | 0,000012 | 2 | 1 | 22 | |||
| 20 | 1 | 1 | 0,000007 | 0,0 | 1 | 5,0 | 0 | 0 | 0,000007 | 1 | 0 | 46 | |||
| 21 | 1 | 1 | 0,000119 | 0,7 | 1 | 5,0 | 2 | 0 | 0,005575 | 4 | 3 | 18 | |||
| 22 | 2 | 1 | 1 | 0,005456 | 34,3 | 3 | 15,0 | 1 | 0 | 0,005456 | 3 | 2 | 40 | ||
| 23 | 1 | 1 | 0,000065 | 0,4 | 2 | 10,0 | 1 | 0 | 0,000074 | 4 | 1 | 21 | |||
| 24 | 1 | 1 | 0,000009 | 0,1 | 2 | 10,0 | 0 | 0 | 0,000009 | 2 | 0 | 3 | |||
| 25 | 3 | 0 | 1 | 0,000013 | 0,1 | 3 | 15,0 | 0 | 0 | 0,000013 | 3 | 1 | 83 | ||
| 26 | 0 | 1 | 0,000001 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000004 | 0 | 2 | 18 | |||
| 27 | 0 | 1 | 0,000003 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000003 | 0 | 1 | 38 | |||
| 28 | 1 | 1 | 1 | 0,010079 | 63,4 | 2 | 10,0 | 1 | 0 | 0,010079 | 2 | 1 | 427 | ||
| 29 | 0 | 1 | 0,000004 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000004 | 0 | 1 | 47 | |||
| 30 | 1 | 1 | 0,000013 | 0,1 | 1 | 5,0 | 0 | 0 | 0,000013 | 1 | 1 | 47 | |||
| 31 | 0 | 1 | 0,000014 | 0,1 | 2 | 10,0 | 0 | 0 | 0,000022 | 4 | 2 | 4 | |||
| 32 | 1 | 1 | 0,000008 | 0,1 | 2 | 10,0 | 0 | 0 | 0,000008 | 2 | 1 | 3 | |||
| 33 | 0 | 2 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | ||||
| 34 | 0 | 10 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | 62 | |||
| 35 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | ||||
| 36 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | ||||
| 37 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | ||||
| 38 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 47 | |||
| 39 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 39 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Filtro
FILTER
Aplica un predicado a las filas del row source de abajo. Con dos row sources, ejecuta el segundo (una subquery no desanidada) por cada fila del primero.
- Buena cuando
- Un solo row source, o una subquery ejecutada pocas veces (el FILTER guarda en caché los resultados ya calculados).
- Mala cuando
- Subquery ejecutada fila a fila (Exec alto en el segundo row source): permitir el unnesting o reescribirla como join suele resolverlo.
- En el plan, mire
- Exec del segundo row source.
Join en bucle (nested loops)
NESTED LOOPS
Por cada fila del row source externo (outer, driving), ejecuta el row source interno (inner).
- Buena cuando
- Pocas filas en el outer y acceso selectivo por índice en el inner. Devuelve las primeras filas rápido (bueno para FIRST_ROWS).
- Mala cuando
- Muchas filas en el outer: el inner se ejecuta miles de veces. Suele venir de una cardinalidad subestimada en el outer; un HASH JOIN leería cada lado una sola vez.
- En el plan, mire
- Exec de las operaciones del inner y, en el outer, Estimado comparado con Filas/exec.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Acceso a la tabla por el cluster
TABLE ACCESS CLUSTER
Lee la tabla almacenada en un cluster, por la clave del cluster.
- Buena cuando
- Tablas que siempre se leen juntas por la misma clave.
- Mala cuando
- Cluster mal dimensionado, con bloques encadenados.
Tabla interna de Oracle (X$)
FIXED TABLE
Lee una estructura de memoria de Oracle, detrás de las vistas V$.
- Buena cuando
- Consultas puntuales.
- Mala cuando
- Consultas frecuentes a V$ grandes (V$SQL, V$SESSION) desde rutinas de monitorización.
Skip scan del índice
INDEX SKIP SCAN
Usa un índice compuesto sin la primera columna en el filtro: recorre el índice una vez por cada valor distinto de la primera columna.
- Buena cuando
- La primera columna del índice tiene pocos valores distintos.
- Mala cuando
- La primera columna tiene muchos valores: se convierte casi en una lectura del índice completo. Un índice que empiece por la columna filtrada suele resolverlo.
- En el plan, mire
- LIO propio comparado con las Filas devueltas.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#12 · SELECT
sql_id 5tp7ar1mxbgphhv 1742061232Texto
select /*+ index(idl_char$12 i_idl_char1) +*/ piece#,length,piece from idl_char$12 where obj#=:1 and part=:2 and version=:3 order by piece#
- 1 IDL_CHAR$: operación 1 del plan
- 2 IDL_CHAR$, tabla del índice I_IDL_CHAR1: operación 2 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,023874 | 97,1 | 2 | |
| cpu | 0,001000 | 4,1 | 2 | |
| cpu | 0,000999 | 4,1 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,001279 | -5,2 | 5 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000061 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000999 | 0,000318 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,001000 | 0,024202 | 2 | 4 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000013 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1319326155
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 1 · TABLE ACCESS BY INDEX ROWID IDL_CHAR$ 71,1% del tiempo · 33,3% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro. - 2 Id 2 · INDEX RANGE SCAN I_IDL_CHAR1 28,9% del tiempo · 66,7% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,017191 | 71,1 | 1 | 33,3 | 2 | 0 | 0,024172 | 3 | 3 | 226 | ||
| 2 | 2 | 1 | 1 | 0,006981 | 28,9 | 2 | 66,7 | 1 | 0 | 0,006981 | 2 | 2 | 237 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#13 · SELECT
sql_id 6q9x9bmh733r2hv 3765538530Texto
select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,i.flags,i.property,i.pctfree$,i.initrans,i.maxtrans,i.blevel,i.leafcnt,i.distkey,i.lblkkey,i.dblkkey,i.clufac,i.cols,i.analyzetime,i.samplesize,i.dataobj#,nvl(i.degree,***),nvl(i.instances,***),i.rowcnt,mod(i.pctthres$,***),i.COL_0011,i.trunccnt,nvl(c.unicols,***),nvl(c.COL_0012+c.COL_0013,***),nvl(i.spare1,i.intcols),i.spare4,i.spare2,i.spare6,decode(i.pctthres$,null,null,mod(trunc(i.pctthres$/***),***)),ist.cachedblk,ist.cachehit,ist.logicalread from ind$23 i, ind_stats$ ist, (select enabled, min(cols) unicols,min(to_number(bitand(defer,***))) COL_0012,min(to_number(bitand(defer,***))) COL_0013 from cdef$1 where obj#=:1 and enabled > *** group by enabled) c where i.obj#=c.enabled(+) and i.obj# = ist.obj#(+) and i.bo#=:1 order by i.obj#
- 1 CDEF$: operación 10 del plan
- 2 IND$: operación 4 del plan
- 3 IND$, tabla del índice I_OBJ#: operación 5 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,015645 | 87,9 | 7 | |
| cpu | 0,002000 | 11,2 | 3 | |
| cpu | 0,001000 | 5,6 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| no contabilizado | -0,000843 | -4,7 | 9 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000122 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,001000 | 0,000487 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 3 | 0,002000 | 0,017187 | 7 | 12 | 0 | 1 | 0 |
| CLOSE | 2 | 0,000000 | 0,000006 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3992920156
De las líneas STAT del trace; plan registrado 2 veces, se muestra el último.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 10 · TABLE ACCESS BY INDEX ROWID CDEF$ 48,3% del tiempo · 22,2% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro. - 2 Id 4 · TABLE ACCESS CLUSTER IND$ 47,3% del tiempo · 22,2% de las lecturas lógicas
- 3 Id 5 · INDEX UNIQUE SCAN I_OBJ# 0,1% del tiempo · 22,2% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 2 | 0,000033 | 0,2 | 0 | 0,0 | 5 | 0 | 0,016567 | 9 | 7 | ||||
| 2 | 1 | 2 | 0,000571 | 3,4 | 0 | 0,0 | 5 | 0 | 0,016534 | 9 | 6 | ||||
| 3 | 1 | 2 | 0,000007 | 0,0 | 0 | 0,0 | 2 | 0 | 0,007862 | 5 | 2 | ||||
| 4 | 2 | 1 | 2 | 0,007832 | 47,3 | 2 | 22,2 | 2 | 0 | 0,007846 | 4 | 2 | 19 | ||
| 5 | 3 | 1 | 1 | 0,000014 | 0,1 | 2 | 22,2 | 0 | 0 | 0,000014 | 2 | 1 | 3 | ||
| 6 | 0 | 1 | 0,000002 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000009 | 1 | 0 | 432 | |||
| 7 | 0 | 1 | 0,000007 | 0,0 | 1 | 11,1 | 0 | 0 | 0,000007 | 1 | 0 | 433 | |||
| 8 | 1 | 1 | 0,000004 | 0,0 | 0 | 0,0 | 3 | 0 | 0,008101 | 4 | 3 | ||||
| 9 | 1 | 1 | 0,000044 | 0,3 | 0 | 0,0 | 3 | 0 | 0,008097 | 4 | 3 | ||||
| 10 | 1 | 1 | 1 | 0,008001 | 48,3 | 2 | 22,2 | 3 | 0 | 0,008053 | 4 | 2 | 31 | ||
| 11 | 5 | 4 | 0,000052 | 0,3 | 2 | 22,2 | 1 | 0 | 0,000052 | 2 | 1 | 54 |
Ordenación (ORDER BY)
SORT ORDER BY
Ordena las filas para el ORDER BY.
- Buena cuando
- Pocas filas, ordenación en memoria.
- Mala cuando
- Muchas filas: el ordenamiento no cabe en la workarea y escribe en TEMP. Un índice en el orden pedido puede evitar el SORT, sobre todo con ROWNUM o FETCH FIRST.
- En el plan, mire
- PW mayor que cero y Tiempo propio (s).
Join por hash
HASH JOIN
Construye una hash table en la PGA con el primer row source (build input, el menor) y lee el segundo (probe input) buscando las coincidencias.
- Buena cuando
- Combinar muchas filas sin índice útil: cada lado se lee una sola vez.
- Mala cuando
- El build input es grande y no cabe en la workarea de la PGA: el join pasa a one-pass o multipass y escribe en TEMP. O bastarían pocas filas y un NESTED LOOPS con índice sería más barato.
- En el plan, mire
- PW mayor que cero (escritura en el TEMP), Tiempo propio (s) y las Filas del build input.
Join en bucle (nested loops)
NESTED LOOPS
Por cada fila del row source externo (outer, driving), ejecuta el row source interno (inner).
- Buena cuando
- Pocas filas en el outer y acceso selectivo por índice en el inner. Devuelve las primeras filas rápido (bueno para FIRST_ROWS).
- Mala cuando
- Muchas filas en el outer: el inner se ejecuta miles de veces. Suele venir de una cardinalidad subestimada en el outer; un HASH JOIN leería cada lado una sola vez.
- En el plan, mire
- Exec de las operaciones del inner y, en el outer, Estimado comparado con Filas/exec.
Acceso a la tabla por el cluster
TABLE ACCESS CLUSTER
Lee la tabla almacenada en un cluster, por la clave del cluster.
- Buena cuando
- Tablas que siempre se leen juntas por la misma clave.
- Mala cuando
- Cluster mal dimensionado, con bloques encadenados.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Vista o subconsulta
VIEW
Resultado de una vista o subconsulta usado como fuente de filas por la operación de arriba.
- Buena cuando
- No tiene costo propio: el trabajo está en las operaciones de abajo.
- Mala cuando
- Cuando impide que el filtro externo entre en la vista y esta se lee entera.
- En el plan, mire
- Las operaciones de abajo.
Agrupación por ordenación
SORT GROUP BY
Agrupa las filas para el GROUP BY ordenando por la clave del grupo.
- Buena cuando
- Pocas filas, o el resultado debe salir ordenado.
- Mala cuando
- Muchas filas, con escritura en TEMP.
- En el plan, mire
- PW y Tiempo propio (s).
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#14 · SELECT
sql_id 7d78xc7z6vr4fhv 4268612750Texto
select o.owner#, o.name, o.namespace, o.obj#, d.COL_0051, nvl(d.property,***), o.type#, o.subname, d.d_attrs from dependency$1 d, obj$ o where d.COL_0052=:1 and (d.p_timestamp=nvl(:2,d.p_timestamp) or d.property=***) and o.owner#=nvl(:3,o.owner#) and d.COL_0053=o.obj# order by o.obj#
- 1 DEPENDENCY$, tabla del índice I_DEPENDENCY2: operación 7 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,016134 | 96,4 | 1 | |
| no contabilizado | 0,000609 | 3,6 | 8 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000054 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000403 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,016270 | 1 | 6 | 0 | 0 | 0 |
| CLOSE | 2 | 0,000000 | 0,000016 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3014793611
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 7 · INDEX RANGE SCAN I_DEPENDENCY2 99,7% del tiempo · 100,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 2 | 0,000017 | 0,1 | 0 | 0,0 | 1 | 0 | 0,016258 | 3 | 17 | ||||
| 2 | 0 | 0,000009 | 0,1 | 0 | 0,0 | 1 | 0 | 0,016241 | 3 | ||||||
| 3 | 0 | 0,000006 | 0,0 | 0 | 0,0 | 1 | 0 | 0,016230 | 3 | ||||||
| 4 | 0 | 0,000002 | 0,0 | 0 | 0,0 | 1 | 0 | 0,016224 | 3 | ||||||
| 5 | 0 | 1 | 0,000002 | 0,0 | 0 | 0,0 | 1 | 0 | 0,016222 | 3 | 8 | ||||
| 6 | 0 | 1 | 0,000003 | 0,0 | 0 | 0,0 | 1 | 0 | 0,016220 | 3 | 6 | 104 | |||
| 7 | 1 | 0 | 5 | 0,016217 | 99,7 | 3 | 100,0 | 1 | 0 | 0,016217 | 3 | 3 | 107 | ||
| 8 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 36 | |||
| 9 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 18 | |||
| 10 | 0 | 0,000002 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | ||||||
| 11 | 0 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | ||||||
| 12 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 8 | ||||
| 13 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 6 | 104 | |||
| 14 | 0 | 5 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | 107 | |||
| 15 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 36 | |||
| 16 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 18 |
Ordenación (ORDER BY)
SORT ORDER BY
Ordena las filas para el ORDER BY.
- Buena cuando
- Pocas filas, ordenación en memoria.
- Mala cuando
- Muchas filas: el ordenamiento no cabe en la workarea y escribe en TEMP. Un índice en el orden pedido puede evitar el SORT, sobre todo con ROWNUM o FETCH FIRST.
- En el plan, mire
- PW mayor que cero y Tiempo propio (s).
Expansión de OR
CONCATENATION
Cada parte de una condición OR se convirtió en una rama, y los resultados se unen.
- Buena cuando
- Cada rama usa un índice distinto y selectivo.
- Mala cuando
- Muchas ramas repitiendo el mismo trabajo.
- En el plan, mire
- Cada rama de abajo.
Filtro
FILTER
Aplica un predicado a las filas del row source de abajo. Con dos row sources, ejecuta el segundo (una subquery no desanidada) por cada fila del primero.
- Buena cuando
- Un solo row source, o una subquery ejecutada pocas veces (el FILTER guarda en caché los resultados ya calculados).
- Mala cuando
- Subquery ejecutada fila a fila (Exec alto en el segundo row source): permitir el unnesting o reescribirla como join suele resolverlo.
- En el plan, mire
- Exec del segundo row source.
Join en bucle (nested loops)
NESTED LOOPS
Por cada fila del row source externo (outer, driving), ejecuta el row source interno (inner).
- Buena cuando
- Pocas filas en el outer y acceso selectivo por índice en el inner. Devuelve las primeras filas rápido (bueno para FIRST_ROWS).
- Mala cuando
- Muchas filas en el outer: el inner se ejecuta miles de veces. Suele venir de una cardinalidad subestimada en el outer; un HASH JOIN leería cada lado una sola vez.
- En el plan, mire
- Exec de las operaciones del inner y, en el outer, Estimado comparado con Filas/exec.
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#15 · SELECT
sql_id 0myxy09ts0my0hv 1937788864Texto
select /*+ index(idl_ub2$12 i_idl_ub21) +*/ piece#,length,piece from idl_ub2$12 where obj#=:1 and part=:2 and version=:3 order by piece#
- 1 IDL_UB2$: operación 1 del plan
- 2 IDL_UB2$, tabla del índice I_IDL_UB21: operación 2 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,015738 | 95,5 | 2 | |
| cpu | 0,001000 | 6,1 | 2 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,000262 | -1,6 | 5 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000069 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000313 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,001000 | 0,015992 | 2 | 7 | 0 | 2 | 0 |
| CLOSE | 1 | 0,000000 | 0,000102 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2317816222
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 1 · TABLE ACCESS BY INDEX ROWID IDL_UB2$ 99,3% del tiempo · 40,0% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro. - 2 Id 2 · INDEX RANGE SCAN I_IDL_UB21 0,7% del tiempo · 60,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 2 | 1 | 0,015835 | 99,3 | 2 | 40,0 | 2 | 0 | 0,015948 | 5 | 3 | 227 | ||
| 2 | 2 | 2 | 1 | 0,000113 | 0,7 | 3 | 60,0 | 1 | 0 | 0,000113 | 3 | 2 | 238 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#16 · INSERT
sql_id 0uhffuxsqpvcnhv 1902833044Texto
INSERT INTO TAB_0005 VALUES (:COL_0069, :COL_0070, :COL_0071, :COL_0072)
- 1 operación 1 (LOAD TABLE CONVENTIONAL) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,007998 | 54,9 | 50 | |
| no contabilizado | 0,006013 | 41,2 | 101 | |
| recursivo | 0,000547 | 3,8 | ||
| espera | 0,000019 | 0,1 | 2 | |
| cpu | 0,000000 | 0,0 | 50 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000236 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 50 | 0,008998 | 0,014271 | 2 | 13 | 82 | 50 | 1 |
| CLOSE | 50 | 0,000000 | 0,000070 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 0
De las líneas STAT del trace.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,000489 | 100,0 | 4 | 100,0 | 2 | 0 | 0,000489 | 4 |
Inserción convencional
LOAD TABLE CONVENTIONAL
Inserta las filas en la tabla por el camino normal del INSERT.
- Buena cuando
- Inserciones del día a día.
- Mala cuando
- Los triggers, índices y constraints de la tabla pesan aquí; en cargas grandes, el modo directo (APPEND) escribe más rápido.
- En el plan, mire
- Tiempo propio (s) y las esperas de la sentencia.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
SQL recursivo ejecutado por esta sentencia
#17 · SELECT
sql_id c1wyt1vcbz2vvhv 3636431739Texto
SELECT COL_0068 FROM ALL_TAB_COLUMNS WHERE OWNER = '***' AND COL_0063 = :B2 AND COL_0067 = :B1
- 1 COL$ no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 13)
- 2 OBJ$ (tabla del índice I_OBJ5) no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 12)
- 3 COLTYPE$ no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 15)
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,006999 | 50,5 | 50 | |
| cpu | 0,003999 | 28,9 | 50 | |
| no contabilizado | 0,002849 | 20,6 | 151 | |
| cpu | 0,000000 | 0,0 | 50 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000032 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 50 | 0,006999 | 0,007635 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 50 | 0,003999 | 0,006109 | 0 | 1.000 | 0 | 50 | 0 |
| CLOSE | 50 | 0,000000 | 0,000071 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2399995316
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 13 · TABLE ACCESS CLUSTER COL$ 16,9% del tiempo · 10,0% de las lecturas lógicas
- 2 Id 12 · INDEX RANGE SCAN I_OBJ5 8,1% del tiempo · 15,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 3 Id 15 · TABLE ACCESS CLUSTER COLTYPE$ 4,7% del tiempo · 15,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0,000018 | 12,2 | 0 | 0,0 | 0 | 0 | 0,000148 | 20 | ||||||
| 2 | 1 | 1 | 0,000001 | 0,7 | 0 | 0,0 | 0 | 0 | 0,000117 | 16 | 11 | ||||
| 3 | 1 | 1 | 0,000002 | 1,4 | 0 | 0,0 | 0 | 0 | 0,000109 | 15 | 10 | ||||
| 4 | 1 | 1 | 0,000004 | 2,7 | 0 | 0,0 | 0 | 0 | 0,000105 | 15 | 9 | ||||
| 5 | 1 | 1 | 0,000001 | 0,7 | 0 | 0,0 | 0 | 0 | 0,000093 | 13 | 8 | ||||
| 6 | 1 | 1 | 0,000003 | 2,0 | 0 | 0,0 | 0 | 0 | 0,000089 | 13 | 6 | ||||
| 7 | 1 | 1 | 0,000004 | 2,7 | 0 | 0,0 | 0 | 0 | 0,000079 | 10 | 5 | ||||
| 8 | 1 | 1 | 0,000001 | 0,7 | 0 | 0,0 | 0 | 0 | 0,000045 | 6 | 4 | ||||
| 9 | 1 | 1 | 0,000005 | 3,4 | 1 | 5,0 | 0 | 0 | 0,000012 | 2 | 1 | 22 | |||
| 10 | 1 | 1 | 0,000007 | 4,7 | 1 | 5,0 | 0 | 0 | 0,000007 | 1 | 0 | 46 | |||
| 11 | 1 | 1 | 0,000020 | 13,5 | 1 | 5,0 | 0 | 0 | 0,000032 | 4 | 3 | 18 | |||
| 12 | 2 | 1 | 1 | 0,000012 | 8,1 | 3 | 15,0 | 0 | 0 | 0,000012 | 3 | 2 | 40 | ||
| 13 | 1 | 1 | 1 | 0,000025 | 16,9 | 2 | 10,0 | 0 | 0 | 0,000030 | 4 | 1 | 21 | ||
| 14 | 1 | 1 | 0,000005 | 3,4 | 2 | 10,0 | 0 | 0 | 0,000005 | 2 | 0 | 3 | |||
| 15 | 3 | 0 | 1 | 0,000007 | 4,7 | 3 | 15,0 | 0 | 0 | 0,000007 | 3 | 1 | 83 | ||
| 16 | 0 | 1 | 0,000002 | 1,4 | 0 | 0,0 | 0 | 0 | 0,000003 | 0 | 2 | 18 | |||
| 17 | 0 | 1 | 0,000001 | 0,7 | 0 | 0,0 | 0 | 0 | 0,000001 | 0 | 1 | 38 | |||
| 18 | 1 | 1 | 0,000008 | 5,4 | 2 | 10,0 | 0 | 0 | 0,000008 | 2 | 1 | 427 | |||
| 19 | 0 | 1 | 0,000002 | 1,4 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 1 | 47 | |||
| 20 | 1 | 1 | 0,000007 | 4,7 | 1 | 5,0 | 0 | 0 | 0,000007 | 1 | 1 | 47 | |||
| 21 | 0 | 1 | 0,000010 | 6,8 | 2 | 10,0 | 0 | 0 | 0,000013 | 4 | 2 | 4 | |||
| 22 | 1 | 1 | 0,000003 | 2,0 | 2 | 10,0 | 0 | 0 | 0,000003 | 2 | 1 | 3 | |||
| 23 | 0 | 2 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | ||||
| 24 | 0 | 10 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | 62 | |||
| 25 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | ||||
| 26 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | ||||
| 27 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | ||||
| 28 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 47 | |||
| 29 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 39 |
Filtro
FILTER
Aplica un predicado a las filas del row source de abajo. Con dos row sources, ejecuta el segundo (una subquery no desanidada) por cada fila del primero.
- Buena cuando
- Un solo row source, o una subquery ejecutada pocas veces (el FILTER guarda en caché los resultados ya calculados).
- Mala cuando
- Subquery ejecutada fila a fila (Exec alto en el segundo row source): permitir el unnesting o reescribirla como join suele resolverlo.
- En el plan, mire
- Exec del segundo row source.
Join en bucle (nested loops)
NESTED LOOPS
Por cada fila del row source externo (outer, driving), ejecuta el row source interno (inner).
- Buena cuando
- Pocas filas en el outer y acceso selectivo por índice en el inner. Devuelve las primeras filas rápido (bueno para FIRST_ROWS).
- Mala cuando
- Muchas filas en el outer: el inner se ejecuta miles de veces. Suele venir de una cardinalidad subestimada en el outer; un HASH JOIN leería cada lado una sola vez.
- En el plan, mire
- Exec de las operaciones del inner y, en el outer, Estimado comparado con Filas/exec.
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Acceso a la tabla por el cluster
TABLE ACCESS CLUSTER
Lee la tabla almacenada en un cluster, por la clave del cluster.
- Buena cuando
- Tablas que siempre se leen juntas por la misma clave.
- Mala cuando
- Cluster mal dimensionado, con bloques encadenados.
Tabla interna de Oracle (X$)
FIXED TABLE
Lee una estructura de memoria de Oracle, detrás de las vistas V$.
- Buena cuando
- Consultas puntuales.
- Mala cuando
- Consultas frecuentes a V$ grandes (V$SQL, V$SESSION) desde rutinas de monitorización.
Skip scan del índice
INDEX SKIP SCAN
Usa un índice compuesto sin la primera columna en el filtro: recorre el índice una vez por cada valor distinto de la primera columna.
- Buena cuando
- La primera columna del índice tiene pocos valores distintos.
- Mala cuando
- La primera columna tiene muchos valores: se convierte casi en una lectura del índice completo. Un índice que empiece por la columna filtrada suele resolverlo.
- En el plan, mire
- LIO propio comparado con las Filas devueltas.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#18 · SELECT
sql_id 1vybmzupqw75hhv 2876120240Texto
select /*+ index(idl_ub1$12 i_idl_ub11) +*/ piece#,length,piece from idl_ub1$12 where obj#=:1 and part=:2 and version=:3 order by piece#
- 1 IDL_UB1$, tabla del índice I_IDL_UB11: operación 2 del plan
- 2 IDL_UB1$: operación 1 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,011204 | 93,8 | 2 | |
| cpu | 0,001000 | 8,4 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,000264 | -2,2 | 5 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000075 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,001000 | 0,000388 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,011466 | 2 | 5 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000011 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3246118364
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX RANGE SCAN I_IDL_UB11 59,6% del tiempo · 75,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 1 · TABLE ACCESS BY INDEX ROWID IDL_UB1$ 40,4% del tiempo · 25,0% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,004617 | 40,4 | 1 | 25,0 | 2 | 0 | 0,011438 | 4 | 3 | 225 | ||
| 2 | 1 | 1 | 1 | 0,006821 | 59,6 | 3 | 75,0 | 1 | 0 | 0,006821 | 3 | 2 | 236 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#19 · SELECT
sql_id 7hbqw62s604unhv 2959086420Texto
select /*+ index(idl_sb4$12 i_idl_sb41) +*/ piece#,length,piece from idl_sb4$12 where obj#=:1 and part=:2 and version=:3 order by piece#
- 1 IDL_SB4$: operación 1 del plan
- 2 IDL_SB4$, tabla del índice I_IDL_SB41: operación 2 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,009431 | 92,2 | 2 | |
| cpu | 0,001000 | 9,8 | 1 | |
| cpu | 0,001000 | 9,8 | 3 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,001207 | -11,8 | 6 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000071 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,001000 | 0,000428 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 3 | 0,001000 | 0,009712 | 2 | 8 | 0 | 2 | 0 |
| CLOSE | 1 | 0,000000 | 0,000013 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1697022209
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 1 · TABLE ACCESS BY INDEX ROWID IDL_SB4$ 98,7% del tiempo · 33,3% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro. - 2 Id 2 · INDEX RANGE SCAN I_IDL_SB41 1,3% del tiempo · 66,7% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 2 | 1 | 0,009537 | 98,7 | 2 | 33,3 | 2 | 0 | 0,009658 | 6 | 3 | 228 | ||
| 2 | 2 | 2 | 1 | 0,000121 | 1,3 | 4 | 66,7 | 1 | 0 | 0,000121 | 4 | 2 | 239 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#20 · SELECT
sql_id 45zgfwwy872t3hv 1015253795Texto
SELECT COUNT(COL_0001) FROM TAB_0002 WHERE COL_0002 = :B2 AND TO_NUMBER(COL_0003) = :B1 AND COL_0001 <> ***
- 1 IDX_0002 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 2)
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,005163 | 83,6 | 4 | |
| cpu | 0,001000 | 16,2 | 1 | |
| espera | 0,000013 | 0,2 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000060 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,001000 | 0,005899 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000000 | 0,000214 | 1 | 2 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000003 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 4045997523
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX RANGE SCAN IDX_0002 100,0% del tiempo · 100,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 1 | 0 | 0,000248 | 2 | ||||||
| 2 | 1 | 58 | 1 | 0,000348 | 100,0 | 2 | 100,0 | 1 | 0 | 0,000348 | 2 | 2 | 188088 |
Agregación (COUNT, SUM, MAX...)
SORT AGGREGATE
Calcula las funciones de agregación y devuelve una fila.
- Buena cuando
- Barata en sí: el costo está en las operaciones de abajo.
- Mala cuando
- Casi nunca.
- En el plan, mire
- Las operaciones debajo de ella.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#21 · PL/SQL
sql_id 3u48u68wwjg3vhv 969456763Texto
declare
TYPE COL_0021 IS REF CURSOR;
COL_0022 COL_0021;
COL_0023 varchar2(***);
COL_0024 varchar2(***);
COL_0025 varchar2(***);
COL_0026 varchar2(***);
COL_0027 varchar2(***);
COL_0028 varchar2(***);
COL_0029 varchar2(***);
COL_0030 varchar2(***);
COL_0031 NUMBER;
COL_0032 varchar2(***);
COL_0033 varchar2(***);
COL_0034 VARCHAR2(***);
PRAGMA AUTONOMOUS_TRANSACTION;
begin
COL_0028:='***';
execute immediate COL_0028 into COL_0027;
if(not (COL_0027='***' or COL_0027='***' or COL_0027='***' or COL_0027='***'))
then
return;
end if;
COL_0028:='***';
execute immediate COL_0028 into COL_0023;
COL_0028:='***';
execute immediate COL_0028 into COL_0024;
COL_0028:='***';
execute immediate COL_0028 into COL_0026;
COL_0028:='***';
execute immediate COL_0028 into COL_0025;
COL_0028:='***';
execute immediate COL_0028 into COL_0029;
COL_0028:='***';
execute immediate COL_0028 into COL_0034;
if (COL_0025!='***' and COL_0025!='***' and COL_0027='***' and COL_0023='***')
then
COL_0028:='***';
open COL_0022 for COL_0028 using COL_0025,COL_0029;
loop
fetch COL_0022 into COL_0030;
exit when COL_0022%NOTFOUND;
COL_0028:='***';
execute immediate COL_0028 into COL_0032 using SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(COL_0030);
if (trim(COL_0032)='***')
then
COL_0028:='***';
execute immediate COL_0028 using SYS.DBMS_ASSERT.SCHEMA_NAME(COL_0025),SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(COL_0029),SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(COL_0030);
end if;
end loop;
end if;
if ((COL_0023='***' and COL_0027='***') or (COL_0023='***' and COL_0027='***'))
then
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028;
commit;
end if;
if (COL_0023='***' and COL_0027='***')
then
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028 into COL_0031 using COL_0025,COL_0029;
if(COL_0031!=***)
then
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028 into COL_0031;
if((COL_0031=***)and (COL_0024!='***' and COL_0024!='***' and COL_0024!='***'and COL_0025!='***' and COL_0025!='***'))
then
COL_0028:='***';
execute immediate COL_0028;
end if;
end if;
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028;
commit;
end if;
if(COL_0024='***' or COL_0024='***' or COL_0024='***'
or COL_0025='***' or COL_0025='***')
then
return;
end if;
if (COL_0023='***' and COL_0027='***')
then
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028 into COL_0031 using COL_0025,COL_0029;
if(COL_0031!=***)
then
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028 into COL_0031;
if(COL_0031=***)
then
COL_0028:='***';
execute immediate COL_0028;
end if;
end if;
end if;
if (COL_0027='***' and COL_0023='***')
then
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028 into COL_0033 using COL_0029;
if(COL_0033 is null)
then
return;
end if;
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028 into COL_0031;
if(COL_0031=***)
then
COL_0028:='***';
execute immediate COL_0028;
end if;
end if;
if (COL_0027='***' and COL_0023='***')
then
COL_0034:=upper(trim(COL_0034));
if(instr(COL_0034,'***')>*** or instr(COL_0034,'***')>***
or substr(COL_0034,length(COL_0034)-***,***)='***' or substr(COL_0034,length(COL_0034)-***,***)='***' )
then
return;
end if;
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028 into COL_0033 using COL_0029;
if(COL_0033 is null)
then
return;
end if;
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028 into COL_0031;
if(COL_0031=***)
then
COL_0028:='***';
execute immediate COL_0028;
end if;
end if;
if (COL_0027='***' and COL_0023='***')
then
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028 into COL_0033 using COL_0029;
if(COL_0033 is null)
then
return;
end if;
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028 into COL_0031;
if(COL_0031=***)
then
COL_0028:='***';
execute immediate COL_0028;
end if;
end if;
Exception
when others then
if(sqlcode=-***)
then
COL_0028:=sqlerrm;
COL_0028:=substr(COL_0028,***);
COL_0028:='***'||COL_0028||'***';
execute immediate COL_0028;
end if;
end;
Texto truncado: el trace declara 5977 caracteres.
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,002000 | 51,8 | 1 | |
| recursivo | 0,001438 | 37,2 | ||
| no contabilizado | 0,000425 | 11,0 | 3 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000132 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,002999 | 0,003718 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000013 | 0 | 0 | 0 | 0 | 0 |
SQL recursivo ejecutado por esta sentencia
#22 · LOCK TABLE
sql_id dsn1ksdx81jd4hv 2055259556Texto
LOCK TABLE "TAB_0005" IN EXCLUSIVE MODE NOWAIT
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,002000 | 55,2 | 1 | |
| recursivo | 0,001435 | 39,6 | ||
| no contabilizado | 0,000190 | 5,2 | 3 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,003000 | 0,003593 | 2 | 6 | 0 | 0 | 1 |
| EXEC | 1 | 0,000000 | 0,000024 | 0 | 0 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000008 | 0 | 0 | 0 | 0 | 0 |
SQL recursivo ejecutado por esta sentencia
#23 · SELECT
sql_id 0w81pyhzu3vfjhv 1067576785Texto
select COL_0042, COL_0043 from sys.mon_mods_all$1 where obj# = :COL_0044
- 1 MON_MODS_ALL$, tabla del índice IDX_0008: operación 2 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,002974 | 92,8 | 1 | |
| no contabilizado | 0,000232 | 7,2 | 4 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000061 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000076 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000000 | 0,003061 | 1 | 2 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000008 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1245710492
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0008 99,9% del tiempo · 100,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 0,000002 | 0,1 | 0 | 0,0 | 1 | 0 | 0,003060 | 2 | 2 | 463 | |||
| 2 | 1 | 0 | 1 | 0,003058 | 99,9 | 2 | 100,0 | 1 | 0 | 0,003058 | 2 | 1 | 464 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#24 · PL/SQL
sql_id 6tamjm552vthshv 1244522008Texto
declare
TYPE COL_0021 IS REF CURSOR;
COL_0022 COL_0021;
COL_0023 varchar2(***);
COL_0024 varchar2(***);
COL_0025 varchar2(***);
COL_0026 varchar2(***);
COL_0027 varchar2(***);
COL_0029 varchar2(***);
COL_0030 varchar2(***);
COL_0031 NUMBER;
COL_0028 varchar2(***);
COL_0059 varchar2(***);
COL_0060 varchar2(***);
COL_0034 VARCHAR2(***);
begin
COL_0028:='***';
execute immediate COL_0028 into COL_0027;
if(not (COL_0027='***' or COL_0027='***' or COL_0027='***' or COL_0027='***'))
then
return;
end if;
COL_0028:='***';
execute immediate COL_0028 into COL_0023;
COL_0028:='***';
execute immediate COL_0028 into COL_0024;
COL_0028:='***';
execute immediate COL_0028 into COL_0026;
COL_0028:='***';
execute immediate COL_0028 into COL_0025;
COL_0028:='***';
execute immediate COL_0028 into COL_0029;
if((instr(upper(COL_0029),'***')>***) and COL_0023='***')
then
return;
end if;
if (COL_0025!='***' and COL_0025!='***' and COL_0027='***' and COL_0023='***')
then
COL_0028:='***';
execute immediate COL_0028 into COL_0059 using SYS.DBMS_ASSERT.SCHEMA_NAME(COL_0025),SYS.DBMS_ASSERT.SIMPLE_SQL_NAME(COL_0029);
COL_0059:=trim(COL_0059);
while (length(COL_0059)!=***) loop
if (instr(COL_0059,'***')!=***)
then
COL_0060:=trim(substr(COL_0059,***,instr(COL_0059,'***')-***));
COL_0059:=trim(substr(COL_0059,instr(COL_0059,'***')+***));
else
COL_0060:=trim(COL_0059);
COL_0059:='***';
end if;
COL_0028:='***';
execute immediate COL_0028 using COL_0025||'***'||COL_0029,SYS.DBMS_ASSERT.QUALIFIED_SQL_NAME(COL_0060);
end loop;
return;
end if;
if (COL_0029!='***' and COL_0027='***' and COL_0023='***')
then
COL_0028:='***';
execute immediate COL_0028;
end if;
if (COL_0025!='***' and COL_0025!='***' and COL_0027='***' and COL_0023='***')
then
COL_0028:='***';
execute immediate COL_0028;
end if;
if (COL_0025!='***' and COL_0025!='***' and COL_0027='***' and COL_0023='***')
then
COL_0028:='***';
execute immediate COL_0028;
end if;
if (COL_0025!='***' and COL_0025!='***' and COL_0027='***' and COL_0023='***')
then
COL_0028:='***';
execute immediate COL_0028;
end if;
if (COL_0025!='***' and COL_0025!='***' and COL_0027='***' and COL_0023='***')
then
COL_0028:='***';
execute immediate COL_0028;
end if;
if (COL_0023='***' and COL_0027='***')
then
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028;
end if;
if ((COL_0027='***' and COL_0023='***') or (COL_0027='***' and COL_0023='***'))
then
COL_0028:='***';
EXECUTE IMMEDIATE COL_0028;
end if;
Exception
when others then
if(sqlcode=-***)
then
COL_0028:=sqlerrm;
COL_0028:=substr(COL_0028,***);
COL_0028:='***'||COL_0028||'***';
execute immediate COL_0028;
end if;
end;
Texto truncado: el trace declara 3698 caracteres.
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| recursivo | 0,002070 | 67,7 | ||
| no contabilizado | 0,000989 | 32,3 | 3 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000038 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,003000 | 0,003001 | 0 | 6 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000020 | 0 | 0 | 0 | 0 | 0 |
SQL recursivo ejecutado por esta sentencia
#25 · PL/SQL
sql_id 0b87xumrqfr04hv 4016528388Texto
BEGIN
BEGIN
IF (sys.ROT_0002(sys.COL_0016, sys.COL_0017, xdb.DBMS_XDBZ.IS_ENABLED_CONTENTS)) THEN
xdb.PKG_0001.ROT_0003(sys.COL_0016, sys.COL_0017);
ELSIF (sys.ROT_0002(sys.COL_0016, sys.COL_0017, xdb.DBMS_XDBZ.IS_ENABLED_RESMETADATA)) THEN
xdb.PKG_0001.ROT_0004(sys.COL_0016, sys.COL_0017);
END IF;
EXCEPTION
WHEN OTHERS THEN
null;
END;
END;
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,003000 | 137,6 | 1 | |
| recursivo | 0,000762 | 34,9 | ||
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,001581 | -72,5 | 3 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000052 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,003000 | 0,002110 | 0 | 12 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000019 | 0 | 0 | 0 | 0 | 0 |
SQL recursivo ejecutado por esta sentencia
#26 · UPDATE
sql_id 0ya7u8w97wkvahv 310266730Texto
update tab$23 set ts#=:2,file#=:3,block#=:4,COL_0055=decode(:5,***,null,:5),tab#=decode(:6,***,null,:6),intcols=:7,kernelcols=:8,clucols=decode(:9,***,null,:9),audit$=:10,flags=:11,pctfree$=:12,pctused$=:13,initrans=:14,maxtrans=:15,rowcnt=:16,blkcnt=:17,empcnt=:18,avgspc=:19,chncnt=:20,avgrln=:21,analyzetime=:22,samplesize=:23,cols=:24,property=:25,degree=decode(:26,***,null,:26),instances=decode(:27,***,null,:27),dataobj#=:28,avgspc_flb=:29,flbcnt=:30,trigflag=:31,spare1=:32,spare2=decode(:33,***,null,:33),spare4=:34,spare6=:35 where obj#=:1
- 1 operación 1 (UPDATE TAB$) no tiene objeto propio en el texto
- 2 TAB$, tabla del índice I_OBJ#: operación 3 del plan
- 3 TAB$: operación 2 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,002000 | 97,4 | 1 | |
| no contabilizado | 0,000053 | 2,6 | 3 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000033 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,002000 | 0,002018 | 0 | 3 | 1 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2918346288
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 1 · UPDATE TAB$ 86,1% del tiempo · 0,0% de las lecturas lógicas
- 2 Id 3 · INDEX UNIQUE SCAN I_OBJ# 7,3% del tiempo · 66,7% de las lecturas lógicas
- 3 Id 2 · TABLE ACCESS CLUSTER TAB$ 6,6% del tiempo · 33,3% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0,000118 | 86,1 | 0 | 0,0 | 0 | 0 | 0,000137 | 3 | |||||
| 2 | 3 | 1 | 1 | 0,000009 | 6,6 | 1 | 33,3 | 0 | 0 | 0,000019 | 3 | 2 | 4 | ||
| 3 | 2 | 1 | 1 | 0,000010 | 7,3 | 2 | 66,7 | 0 | 0 | 0,000010 | 2 | 1 | 3 |
Modificación
UPDATE
Modifica las filas que devolvió el row source de abajo.
- Buena cuando
- Pocas filas, encontradas por índice.
- Mala cuando
- Demasiadas filas del row source de abajo; los índices y triggers de la tabla pesan.
- En el plan, mire
- Filas del row source de abajo.
Acceso a la tabla por el cluster
TABLE ACCESS CLUSTER
Lee la tabla almacenada en un cluster, por la clave del cluster.
- Buena cuando
- Tablas que siempre se leen juntas por la misma clave.
- Mala cuando
- Cluster mal dimensionado, con bloques encadenados.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#27 · CALL
sql_id 6tn90anbghha4hv 385368388Texto
call COL_0035.ROT_0006()
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001000 | 63,3 | 1 | |
| recursivo | 0,000521 | 33,0 | ||
| no contabilizado | 0,000060 | 3,8 | 3 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000022 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,002000 | 0,001557 | 0 | 6 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
SQL recursivo ejecutado por esta sentencia
#28 · UPDATE
sql_id cr1bq73d78ckphv 3665048149Texto
update seg$13 set type#=:4,blocks=:5,extents=:6,minexts=:7,maxexts=:8,extsize=:9,extpct=:10,user#=:11,iniexts=:12,lists=decode(:13, ***, NULL, :13),groups=decode(:14, ***, NULL, :14), cachehint=:15, hwmincr=:16, spare1=DECODE(:17,***,NULL,:17),scanhint=:18, bitmapranges=:19 where ts#=:1 and file#=:2 and block#=:3
- 1 SEG$, tabla del índice I_FILE#_BLOCK#: operación 3 del plan
- 2 operación 1 (UPDATE SEG$) no tiene objeto propio en el texto
- 3 SEG$: operación 2 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001000 | 80,5 | 1 | |
| no contabilizado | 0,000231 | 18,6 | 3 | |
| espera | 0,000011 | 0,9 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000069 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,001000 | 0,001171 | 1 | 3 | 1 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2170058777
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 3 · INDEX UNIQUE SCAN I_FILE#_BLOCK# 30,3% del tiempo · 66,7% de las lecturas lógicas
- 2 Id 1 · UPDATE SEG$ 63,4% del tiempo · 0,0% de las lecturas lógicas
- 3 Id 2 · TABLE ACCESS CLUSTER SEG$ 6,3% del tiempo · 33,3% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000111 | 63,4 | 0 | 0,0 | 1 | 0 | 0,000175 | 3 | |||||
| 2 | 3 | 1 | 1 | 0,000011 | 6,3 | 1 | 33,3 | 1 | 0 | 0,000064 | 3 | 2 | 14 | ||
| 3 | 1 | 1 | 1 | 0,000053 | 30,3 | 2 | 66,7 | 1 | 0 | 0,000053 | 2 | 1 | 9 |
Modificación
UPDATE
Modifica las filas que devolvió el row source de abajo.
- Buena cuando
- Pocas filas, encontradas por índice.
- Mala cuando
- Demasiadas filas del row source de abajo; los índices y triggers de la tabla pesan.
- En el plan, mire
- Filas del row source de abajo.
Acceso a la tabla por el cluster
TABLE ACCESS CLUSTER
Lee la tabla almacenada en un cluster, por la clave del cluster.
- Buena cuando
- Tablas que siempre se leen juntas por la misma clave.
- Mala cuando
- Cluster mal dimensionado, con bloques encadenados.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#29 · UPDATE
sql_id 6j5xzzhqr2067hv 762380487Texto
update obj$ set obj#=:4, type#=:5,ctime=:6,mtime=:7,stime=:8,status=:9,dataobj#=:10,flags=:11,oid$=:12,spare1=:13, spare2=:14 where owner#=:1 and name=:2 and namespace=:3 and remoteowner is null and linkname is null and subname is null
- 1 I_OBJ2 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 2)
- 2 operación 1 (UPDATE OBJ$) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001999 | 161,1 | 1 | |
| espera | 0,000020 | 1,6 | 2 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,000778 | -62,7 | 3 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000039 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,001999 | 0,001200 | 2 | 3 | 7 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2683643009
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX RANGE SCAN I_OBJ2 3,8% del tiempo · 100,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 1 · UPDATE OBJ$ 96,2% del tiempo · 0,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000482 | 96,2 | 0 | 0,0 | 2 | 0 | 0,000501 | 3 | |||||
| 2 | 1 | 1 | 1 | 0,000019 | 3,8 | 3 | 100,0 | 0 | 0 | 0,000019 | 3 | 3 | 37 |
Modificación
UPDATE
Modifica las filas que devolvió el row source de abajo.
- Buena cuando
- Pocas filas, encontradas por índice.
- Mala cuando
- Demasiadas filas del row source de abajo; los índices y triggers de la tabla pesan.
- En el plan, mire
- Filas del row source de abajo.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#31 · SELECT
sql_id 1yjwr52wkx13whv 3106833532Texto
select name,intcol#,segcol#,type#,length,nvl(COL_0014,***),decode(type#,***,nvl(scale,-***/*MAXSB1MINAL*/),***,scale,***,scale,***,scale,***,scale,***,scale,***,scale,***,scale,***),null$,fixedstorage,nvl(deflength,***),default$,rowid,col#,property, nvl(charsetid,***),nvl(charsetform,***),spare1,spare2,nvl(spare3,***) from col$12 where obj#=:1 order by intcol#
- 1 COL$: operación 2 del plan
- 2 COL$, tabla del índice I_OBJ#: operación 3 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000829 | 100,0 | 62 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 56 | |
| cpu | 0,000000 | 0,0 | 2 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000093 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000221 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 56 | 0,000000 | 0,000510 | 0 | 7 | 0 | 54 | 0 |
| CLOSE | 2 | 0,000000 | 0,000005 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3765558045
De las líneas STAT del trace; plan registrado 2 veces, se muestra el último.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · TABLE ACCESS CLUSTER COL$ 92,2% del tiempo · 50,0% de las lecturas lógicas
- 2 Id 3 · INDEX UNIQUE SCAN I_OBJ# 7,8% del tiempo · 50,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 50 | 13 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000114 | 4 | 3 | ||||
| 2 | 1 | 50 | 13 | 0,000107 | 92,2 | 2 | 50,0 | 0 | 0 | 0,000116 | 4 | 2 | 21 | ||
| 3 | 2 | 1 | 1 | 0,000009 | 7,8 | 2 | 50,0 | 0 | 0 | 0,000009 | 2 | 1 | 3 |
Ordenación (ORDER BY)
SORT ORDER BY
Ordena las filas para el ORDER BY.
- Buena cuando
- Pocas filas, ordenación en memoria.
- Mala cuando
- Muchas filas: el ordenamiento no cabe en la workarea y escribe en TEMP. Un índice en el orden pedido puede evitar el SORT, sobre todo con ROWNUM o FETCH FIRST.
- En el plan, mire
- PW mayor que cero y Tiempo propio (s).
Acceso a la tabla por el cluster
TABLE ACCESS CLUSTER
Lee la tabla almacenada en un cluster, por la clave del cluster.
- Buena cuando
- Tablas que siempre se leen juntas por la misma clave.
- Mala cuando
- Cluster mal dimensionado, con bloques encadenados.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#32 · SELECT
sql_id bgv44n2yyz7yqhv 3186597846Texto
SELECT /*+ ALL_ROWS */ COUNT(*) FROM DBA_POLICIES V WHERE V.COL_0018 = :B3 AND V.COL_0019 = :B2 AND (V.COL_0020 LIKE '***' OR V.COL_0020 LIKE '***') AND V.FUNCTION = :B1
- 1 I_OBJ5 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 8)
- 2 USER$ no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 6)
- 3 USER$ (tabla del índice I_USER1) no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 7)
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000762 | 100,0 | 7 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000067 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000550 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,000138 | 0 | 12 | 0 | 2 | 0 |
| CLOSE | 2 | 0,000000 | 0,000007 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3085502541
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 8 · INDEX RANGE SCAN I_OBJ5 28,7% del tiempo · 50,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 6 · TABLE ACCESS BY INDEX ROWID USER$ 12,8% del tiempo · 16,7% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro. - 3 Id 7 · INDEX UNIQUE SCAN I_USER1 13,8% del tiempo · 16,7% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0,000011 | 11,7 | 0 | 0,0 | 0 | 0 | 0,000094 | 6 | ||||||
| 2 | 0 | 0,000006 | 6,4 | 0 | 0,0 | 0 | 0 | 0,000083 | 6 | ||||||
| 3 | 0 | 1 | 0,000003 | 3,2 | 0 | 0,0 | 0 | 0 | 0,000077 | 6 | 4 | ||||
| 4 | 0 | 1 | 0,000006 | 6,4 | 0 | 0,0 | 0 | 0 | 0,000074 | 6 | 3 | ||||
| 5 | 1 | 1 | 0,000006 | 6,4 | 0 | 0,0 | 0 | 0 | 0,000058 | 5 | 3 | ||||
| 6 | 2 | 1 | 1 | 0,000012 | 12,8 | 1 | 16,7 | 0 | 0 | 0,000025 | 2 | 1 | 22 | ||
| 7 | 3 | 1 | 1 | 0,000013 | 13,8 | 1 | 16,7 | 0 | 0 | 0,000013 | 1 | 0 | 46 | ||
| 8 | 1 | 1 | 1 | 0,000027 | 28,7 | 3 | 50,0 | 0 | 0 | 0,000027 | 3 | 2 | 40 | ||
| 9 | 0 | 1 | 0,000002 | 2,1 | 0 | 0,0 | 0 | 0 | 0,000010 | 1 | 0 | 375 | |||
| 10 | 0 | 1 | 0,000008 | 8,5 | 1 | 16,7 | 0 | 0 | 0,000008 | 1 | 0 | 377 | |||
| 11 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 47 | |||
| 12 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | ||||
| 13 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 47 | |||
| 14 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 39 |
Agregación (COUNT, SUM, MAX...)
SORT AGGREGATE
Calcula las funciones de agregación y devuelve una fila.
- Buena cuando
- Barata en sí: el costo está en las operaciones de abajo.
- Mala cuando
- Casi nunca.
- En el plan, mire
- Las operaciones debajo de ella.
Filtro
FILTER
Aplica un predicado a las filas del row source de abajo. Con dos row sources, ejecuta el segundo (una subquery no desanidada) por cada fila del primero.
- Buena cuando
- Un solo row source, o una subquery ejecutada pocas veces (el FILTER guarda en caché los resultados ya calculados).
- Mala cuando
- Subquery ejecutada fila a fila (Exec alto en el segundo row source): permitir el unnesting o reescribirla como join suele resolverlo.
- En el plan, mire
- Exec del segundo row source.
Join en bucle (nested loops)
NESTED LOOPS
Por cada fila del row source externo (outer, driving), ejecuta el row source interno (inner).
- Buena cuando
- Pocas filas en el outer y acceso selectivo por índice en el inner. Devuelve las primeras filas rápido (bueno para FIRST_ROWS).
- Mala cuando
- Muchas filas en el outer: el inner se ejecuta miles de veces. Suele venir de una cardinalidad subestimada en el outer; un HASH JOIN leería cada lado una sola vez.
- En el plan, mire
- Exec de las operaciones del inner y, en el outer, Estimado comparado con Filas/exec.
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Skip scan del índice
INDEX SKIP SCAN
Usa un índice compuesto sin la primera columna en el filtro: recorre el índice una vez por cada valor distinto de la primera columna.
- Buena cuando
- La primera columna del índice tiene pocos valores distintos.
- Mala cuando
- La primera columna tiene muchos valores: se convierte casi en una lectura del índice completo. Un índice que empiece por la columna filtrada suele resolverlo.
- En el plan, mire
- LIO propio comparado con las Filas devueltas.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#33 · UPDATE
sql_id fncf618xnzg7ghv 995081455Texto
update sys.mon_mods$ set COL_0042 = COL_0042 + :COL_0045, COL_0046 = COL_0046 + :COL_0047, COL_0043 = COL_0043 + :COL_0048, flags = (decode(bitand(flags, :COL_0040), :COL_0040, flags, flags + :COL_0040)), COL_0049 = COL_0049 + :COL_0050, timestamp = :time where obj# = :COL_0044
- 1 IDX_0007 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 2)
- 2 operación 1 (UPDATE MON_MODS$) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001000 | 150,4 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,000335 | -50,4 | 3 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000042 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,001000 | 0,000618 | 0 | 2 | 3 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000005 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 315182377
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0007 3,9% del tiempo · 100,0% de las lecturas lógicas
- 2 Id 1 · UPDATE MON_MODS$ 96,1% del tiempo · 0,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000171 | 96,1 | 0 | 0,0 | 0 | 0 | 0,000178 | 2 | |||||
| 2 | 1 | 1 | 1 | 0,000007 | 3,9 | 2 | 100,0 | 0 | 0 | 0,000007 | 2 | 1 | 462 |
Modificación
UPDATE
Modifica las filas que devolvió el row source de abajo.
- Buena cuando
- Pocas filas, encontradas por índice.
- Mala cuando
- Demasiadas filas del row source de abajo; los índices y triggers de la tabla pesan.
- En el plan, mire
- Filas del row source de abajo.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#34 · SELECT
sql_id 22a8nb2z3h5cthv 3191346585Texto
select intcol#,nvl(pos#,***),col#,nvl(spare1,***) from ccol$12 where con#=:1
- 1 CCOL$, tabla del índice I_CCOL1: operación 2 del plan
- 2 CCOL$: operación 1 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000472 | 97,9 | 25 | |
| espera | 0,000010 | 2,1 | 1 | |
| cpu | 0,000000 | 0,0 | 5 | |
| cpu | 0,000000 | 0,0 | 5 | |
| cpu | 0,000000 | 0,0 | 14 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000018 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 5 | 0,000000 | 0,000332 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 14 | 0,000000 | 0,000125 | 1 | 28 | 0 | 9 | 0 |
| CLOSE | 5 | 0,000000 | 0,000007 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3954488388
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX RANGE SCAN I_CCOL1 95,3% del tiempo · 75,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 1 · TABLE ACCESS BY INDEX ROWID CCOL$ 4,7% del tiempo · 25,0% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000002 | 4,7 | 1 | 25,0 | 1 | 0 | 0,000043 | 4 | 3 | 32 | ||
| 2 | 1 | 1 | 1 | 0,000041 | 95,3 | 3 | 75,0 | 1 | 0 | 0,000041 | 3 | 2 | 57 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#35 · SELECT
sql_id cnhr7ugzaazkdhv 4272258637Texto
select con#,type#,condlength,intcols,robj#,rcon#,COL_0015,refact,nvl(enabled,***),rowid,cols,nvl(defer,***),mtime,nvl(spare1,***),spare2,spare3 from cdef$12 where obj#=:1
- 1 CDEF$, tabla del índice I_CDEF2: operación 2 del plan
- 2 CDEF$: operación 1 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001999 | 414,7 | 2 | |
| espera | 0,000014 | 2,9 | 1 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 7 | |
| cpu | 0,000000 | 0,0 | 2 | |
| no contabilizado | -0,001531 | -317,6 | 13 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000056 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,001999 | 0,000225 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 7 | 0,000000 | 0,000197 | 1 | 14 | 0 | 5 | 0 |
| CLOSE | 2 | 0,000000 | 0,000004 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1932954096
De las líneas STAT del trace; plan registrado 2 veces, se muestra el último.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX RANGE SCAN I_CDEF2 100,0% del tiempo · 58,3% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 1 · TABLE ACCESS BY INDEX ROWID CDEF$ 0,0% del tiempo · 41,7% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 5 | 4 | 0,000000 | 0,0 | 5 | 41,7 | 0 | 0 | 0,000010 | 12 | 2 | 31 | ||
| 2 | 1 | 5 | 4 | 0,000015 | 100,0 | 7 | 58,3 | 0 | 0 | 0,000015 | 7 | 1 | 54 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#36 · SELECT
sql_id 9mrt35hfcpg50hv 483048608Texto
select COL_0035.COL_0036 from dual
- 1 operación 1 (FAST DUAL) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000481 | 100,0 | 4 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000030 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000020 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000000 | 0,000428 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000003 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1388734953
De las líneas STAT del trace.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0,000002 | 100,0 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 2 |
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#37 · SELECT
sql_id 5mw52nkh2kxhrhv 2687071767Texto
select decode(u.type#, ***, u.ext_username, u.name), o.name, t.update$, t.insert$, t.delete$, t.enabled, decode(bitand(t.property, ***),***, ***, ***), decode(bitand(t.property, ***), ***, ***, ***), decode(bitand(t.property, ***), ***, ***, ***), (select o.name from obj$ o where o.obj# = u.spare2 and o.type# =***) from sys.obj$ o, sys.user$ u, sys.trigger$23 t, sys.obj$ bo where t.baseobject=bo.obj# and bo.name = :1 and bo.spare3 = :2 and bo.namespace = *** and t.obj#=o.obj# and o.owner#=u.user# and o.type# = *** and bitand(property,***)=*** and bitand(property,***)=*** order by o.obj#
- 1 I_OBJ5 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 7)
- 2 TRIGGER$, tabla del índice I_TRIGGER1: operación 9 del plan
- 3 TRIGGER$: operación 8 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000441 | 100,0 | 8 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000071 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000261 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,000087 | 0 | 10 | 0 | 0 | 0 |
| CLOSE | 2 | 0,000000 | 0,000022 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 515562855
De las líneas STAT del trace; plan registrado 2 veces, se muestra el último.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 7 · INDEX RANGE SCAN I_OBJ5 38,5% del tiempo · 60,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 9 · INDEX RANGE SCAN I_TRIGGER1 13,5% del tiempo · 40,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 3 Id 8 · TABLE ACCESS BY INDEX ROWID TRIGGER$ 17,3% del tiempo · 0,0% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | 18 | |||
| 2 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 36 | |||
| 3 | 0 | 1 | 0,000008 | 15,4 | 0 | 0,0 | 0 | 0 | 0,000052 | 5 | 9 | ||||
| 4 | 0 | 1 | 0,000005 | 9,6 | 0 | 0,0 | 0 | 0 | 0,000044 | 5 | 8 | ||||
| 5 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000039 | 5 | 7 | ||||
| 6 | 0 | 1 | 0,000003 | 5,8 | 0 | 0,0 | 0 | 0 | 0,000039 | 5 | 5 | ||||
| 7 | 1 | 1 | 1 | 0,000020 | 38,5 | 3 | 60,0 | 0 | 0 | 0,000020 | 3 | 3 | 40 | ||
| 8 | 3 | 0 | 1 | 0,000009 | 17,3 | 0 | 0,0 | 0 | 0 | 0,000016 | 2 | 2 | 160 | ||
| 9 | 2 | 0 | 2 | 0,000007 | 13,5 | 2 | 40,0 | 0 | 0 | 0,000007 | 2 | 1 | 162 | ||
| 10 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 18 | |||
| 11 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 36 | |||
| 12 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 22 | |||
| 13 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 11 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Ordenación (ORDER BY)
SORT ORDER BY
Ordena las filas para el ORDER BY.
- Buena cuando
- Pocas filas, ordenación en memoria.
- Mala cuando
- Muchas filas: el ordenamiento no cabe en la workarea y escribe en TEMP. Un índice en el orden pedido puede evitar el SORT, sobre todo con ROWNUM o FETCH FIRST.
- En el plan, mire
- PW mayor que cero y Tiempo propio (s).
Join en bucle (nested loops)
NESTED LOOPS
Por cada fila del row source externo (outer, driving), ejecuta el row source interno (inner).
- Buena cuando
- Pocas filas en el outer y acceso selectivo por índice en el inner. Devuelve las primeras filas rápido (bueno para FIRST_ROWS).
- Mala cuando
- Muchas filas en el outer: el inner se ejecuta miles de veces. Suele venir de una cardinalidad subestimada en el outer; un HASH JOIN leería cada lado una sola vez.
- En el plan, mire
- Exec de las operaciones del inner y, en el outer, Estimado comparado con Filas/exec.
Acceso a la tabla por el cluster
TABLE ACCESS CLUSTER
Lee la tabla almacenada en un cluster, por la clave del cluster.
- Buena cuando
- Tablas que siempre se leen juntas por la misma clave.
- Mala cuando
- Cluster mal dimensionado, con bloques encadenados.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#38 · SELECT
sql_id 67mfz4c9y7qk4hv 333699652Texto
select sys.dbms_standard.dictionary_obj_type from dual
- 1 operación 1 (FAST DUAL) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000438 | 100,0 | 8 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000040 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000037 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,000358 | 0 | 0 | 0 | 2 | 0 |
| CLOSE | 2 | 0,000000 | 0,000003 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1388734953
De las líneas STAT del trace.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0,000002 | 100,0 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 2 |
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#39 · SELECT
sql_id da3h6n1cgu01bhv 1492975659Texto
SELECT COL_0065 FROM TAB_000212 WHERE COL_0002 = :B3 AND TO_NUMBER(COL_0003) = :B2 AND COL_0001 = :B1
- 1 TAB_0002: operación 1 del plan
- 2 TAB_0002, tabla del índice IDX_0002: operación 2 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001000 | 258,4 | 1 | |
| espera | 0,000034 | 8,8 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,000647 | -167,2 | 4 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000031 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000190 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,001000 | 0,000165 | 1 | 3 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3237010533
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0002 77,8% del tiempo · 33,3% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro. - 2 Id 2 · INDEX RANGE SCAN IDX_0002 22,2% del tiempo · 66,7% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000091 | 77,8 | 1 | 33,3 | 1 | 0 | 0,000117 | 3 | 3 | 187749 | ||
| 2 | 2 | 1 | 1 | 0,000026 | 22,2 | 2 | 66,7 | 0 | 0 | 0,000026 | 2 | 2 | 188088 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#42 · SELECT
sql_id 9n37vajy2tqa0hv 2083313984Texto
select col#, grantee#, privilege#,max(mod(nvl(option$,***),***)) from objauth$1 where obj#=:1 and col# is not null group by privilege#, col#, grantee# order by col#, grantee#
- 1 OBJAUTH$, tabla del índice I_OBJAUTH1: operación 3 del plan
- 2 operación 1 (SORT GROUP BY) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000344 | 100,0 | 8 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000079 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000215 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,000045 | 0 | 6 | 0 | 0 | 0 |
| CLOSE | 2 | 0,000000 | 0,000005 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2874733959
De las líneas STAT del trace; plan registrado 2 veces, se muestra el último.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 3 · INDEX RANGE SCAN I_OBJAUTH1 31,0% del tiempo · 100,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 1 · SORT GROUP BY 62,1% del tiempo · 0,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 1 | 0,000018 | 62,1 | 0 | 0,0 | 0 | 0 | 0,000029 | 3 | 5 | |||
| 2 | 0 | 1 | 0,000002 | 6,9 | 0 | 0,0 | 0 | 0 | 0,000011 | 3 | 4 | 61 | |||
| 3 | 1 | 0 | 1 | 0,000009 | 31,0 | 3 | 100,0 | 0 | 0 | 0,000009 | 3 | 3 | 62 |
Agrupación por ordenación
SORT GROUP BY
Agrupa las filas para el GROUP BY ordenando por la clave del grupo.
- Buena cuando
- Pocas filas, o el resultado debe salir ordenado.
- Mala cuando
- Muchas filas, con escritura en TEMP.
- En el plan, mire
- PW y Tiempo propio (s).
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#43 · SELECT
sql_id 88y5z3gq72cmqhv 3966841462Texto
SELECT REPLACE(TO_CHAR(COL_0065), :B3 , '***') FROM TAB_000212 WHERE COL_0002 = :B2 AND TO_NUMBER(COL_0003) = :B1 AND COL_0001 = *** AND COL_0004 = ***
- 1 TAB_0002: operación 1 del plan
- 2 TAB_0002, tabla del índice IDX_0002: operación 2 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001000 | 297,6 | 1 | |
| espera | 0,000010 | 3,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,000674 | -200,6 | 4 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000020 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000179 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,001000 | 0,000135 | 1 | 3 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3237010533
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 1 · TABLE ACCESS BY INDEX ROWID TAB_0002 75,0% del tiempo · 33,3% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro. - 2 Id 2 · INDEX RANGE SCAN IDX_0002 25,0% del tiempo · 66,7% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0,000084 | 75,0 | 1 | 33,3 | 1 | 0 | 0,000112 | 3 | 3 | 187749 | ||
| 2 | 2 | 1 | 1 | 0,000028 | 25,0 | 2 | 66,7 | 0 | 0 | 0,000028 | 2 | 2 | 188088 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#45 · SELECT
sql_id 7pfdb04jkh8qqhv 589832918Texto
select log, sysdate, sysdate+***/***, COL_0040 from sys.mlog$1 where COL_0041 = :1 and master = :2 for update
- 1 MLOG$, tabla del índice I_MLOG#: operación 4 del plan
- 2 operación 2 (BUFFER SORT) no tiene objeto propio en el texto
- 3 operación 1 (FOR UPDATE) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000333 | 100,0 | 4 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000035 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000279 | 0 | 1 | 0 | 0 | 0 |
| FETCH | 1 | 0,000000 | 0,000011 | 0 | 0 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000008 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1551139906
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 4 · INDEX UNIQUE SCAN I_MLOG# 17,6% del tiempo · 100,0% de las lecturas lógicas
- 2 Id 2 · BUFFER SORT 51,0% del tiempo · 0,0% de las lecturas lógicas
- 3 Id 1 · FOR UPDATE 25,5% del tiempo · 0,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 3 FOR UPDATE | 0 | 0,000013 | 25,5 | 0 | 0,0 | 0 | 0 | 0,000051 | 1 | |||||
| 2 | 2 | 0 | 0,000026 | 51,0 | 0 | 0,0 | 0 | 0 | 0,000038 | 1 | |||||
| 3 | 0 | 1 | 0,000003 | 5,9 | 0 | 0,0 | 0 | 0 | 0,000012 | 1 | 0 | 627 | |||
| 4 | 1 | 0 | 1 | 0,000009 | 17,6 | 1 | 100,0 | 0 | 0 | 0,000009 | 1 | 0 | 626 |
Entrada guardada para reutilización
BUFFER SORT
Guarda en la PGA las filas del row source de abajo para reutilizarlas; común con MERGE JOIN CARTESIAN.
- Buena cuando
- Entrada pequeña reutilizada varias veces.
- Mala cuando
- Row source grande, con escritura en TEMP.
- En el plan, mire
- PW: bloques escritos en el TEMP.
Acceso a la tabla por el cluster
TABLE ACCESS CLUSTER
Lee la tabla almacenada en un cluster, por la clave del cluster.
- Buena cuando
- Tablas que siempre se leen juntas por la misma clave.
- Mala cuando
- Cluster mal dimensionado, con bloques encadenados.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#46 · SELECT
sql_id by7z8wgv9mw3dhv 4137283693Texto
select con#,obj#,rcon#,enabled,nvl(defer,***),spare2,spare3 from cdef$1 where robj#=:1
- 1 CDEF$, tabla del índice I_CDEF3: operación 2 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001000 | 310,6 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| no contabilizado | -0,000678 | -210,6 | 8 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000077 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000193 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,001000 | 0,000048 | 0 | 4 | 0 | 0 | 0 |
| CLOSE | 2 | 0,000000 | 0,000004 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1224215794
De las líneas STAT del trace; plan registrado 2 veces, se muestra el último.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX RANGE SCAN I_CDEF3 90,9% del tiempo · 100,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 4 | 0,000003 | 9,1 | 0 | 0,0 | 0 | 0 | 0,000033 | 2 | 2 | 31 | |||
| 2 | 1 | 0 | 1 | 0,000030 | 90,9 | 2 | 100,0 | 0 | 0 | 0,000030 | 2 | 1 | 55 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#47 · SELECT
sql_id 3f4zmq2bz64aphv 2549289301Texto
select grantee#,privilege#,nvl(col#,***),max(mod(nvl(option$,***),***))from objauth$1 where obj#=:1 group by grantee#,privilege#,nvl(col#,***) order by grantee#
- 1 OBJAUTH$, tabla del índice I_OBJAUTH1: operación 3 del plan
- 2 operación 1 (SORT GROUP BY) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000317 | 100,0 | 8 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000063 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000221 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,000028 | 0 | 6 | 0 | 0 | 0 |
| CLOSE | 2 | 0,000000 | 0,000005 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2874733959
De las líneas STAT del trace; plan registrado 2 veces, se muestra el último.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 3 · INDEX RANGE SCAN I_OBJAUTH1 42,9% del tiempo · 100,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 1 · SORT GROUP BY 50,0% del tiempo · 0,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 11 | 0,000007 | 50,0 | 0 | 0,0 | 0 | 0 | 0,000014 | 3 | 7 | |||
| 2 | 0 | 11 | 0,000001 | 7,1 | 0 | 0,0 | 0 | 0 | 0,000007 | 3 | 6 | 61 | |||
| 3 | 1 | 0 | 11 | 0,000006 | 42,9 | 3 | 100,0 | 0 | 0 | 0,000006 | 3 | 3 | 62 |
Agrupación por ordenación
SORT GROUP BY
Agrupa las filas para el GROUP BY ordenando por la clave del grupo.
- Buena cuando
- Pocas filas, o el resultado debe salir ordenado.
- Mala cuando
- Muchas filas, con escritura en TEMP.
- En el plan, mire
- PW y Tiempo propio (s).
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#48 · SELECT
sql_id bfqbtz6bkwrpfhv 2536398510Texto
select obj#,type#,ctime,mtime,stime, status, dataobj#, flags, oid$, spare1, spare2 from obj$12 where owner#=:1 and name=:2 and namespace=:3 and remoteowner is null and linkname is null and subname is null
- 1 OBJ$, tabla del índice I_OBJ2: operación 2 del plan
- 2 OBJ$: operación 1 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001000 | 318,5 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,000686 | -218,5 | 4 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000038 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,001000 | 0,000206 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000000 | 0,000021 | 0 | 4 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000049 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2853959010
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX RANGE SCAN I_OBJ2 71,4% del tiempo · 75,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 1 · TABLE ACCESS BY INDEX ROWID OBJ$ 28,6% del tiempo · 25,0% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000006 | 28,6 | 1 | 25,0 | 0 | 0 | 0,000021 | 4 | 4 | 18 | ||
| 2 | 1 | 1 | 1 | 0,000015 | 71,4 | 3 | 75,0 | 0 | 0 | 0,000015 | 3 | 3 | 37 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#49 · SELECT
sql_id bfth5k6ryjz9vhv 2951281979Texto
select *** from sys.cdc_change_tables$1 where COL_0037 = :1 and COL_0038 = :2 and bitand(COL_0039, ***)=***
- 1 CDC_CHANGE_TABLES$: operación 1 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000276 | 100,0 | 4 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000037 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000184 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000000 | 0,000046 | 0 | 1 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000009 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 626680409
De las líneas STAT del trace.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0,000045 | 100,0 | 1 | 100,0 | 0 | 0 | 0,000045 | 1 | 2 | 669 |
Lectura completa de la tabla (full table scan)
TABLE ACCESS FULL
Lee todos los bloques del segmento hasta la high water mark (HWM), con multiblock reads (db file scattered read, o direct path read en la lectura directa).
- Buena cuando
- La consulta necesita buena parte de las filas, la tabla es pequeña o la lectura es por lotes. En Exadata (STORAGE FULL) el filtro se ejecuta en las celdas de almacenamiento (smart scan).
- Mala cuando
- El predicado es selectivo y quedan pocas filas: el costo crece con el tamaño del segmento, no con el resultado. Peor como inner de un NESTED LOOPS: el full scan se repite por cada fila del outer.
- En el plan, mire
- LIO propio alto con pocas Filas devueltas: predicado selectivo sin un índice útil. Exec mayor que 1: full scan repetido.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#50 · SELECT
sql_id gpynzftxc4j44hv 2059551876Texto
select sys.dbms_standard.dictionary_obj_owner from dual
- 1 operación 1 (FAST DUAL) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,000999 | 362,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| no contabilizado | -0,000723 | -262,0 | 8 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000999 | 0,000092 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000030 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,000150 | 0 | 0 | 0 | 2 | 0 |
| CLOSE | 2 | 0,000000 | 0,000004 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1388734953
De las líneas STAT del trace.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0,000001 | 100,0 | 0 | 0,0 | 0 | 0 | 0,000001 | 0 | 2 |
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#51 · SELECT
sql_id c16vprkufws0zhv 3035521055Texto
select COL_0042, COL_0043 from sys.mon_mods$12 where obj# = :COL_0044
- 1 MON_MODS$, tabla del índice IDX_0007: operación 2 del plan
- 2 MON_MODS$: operación 1 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000253 | 92,3 | 4 | |
| espera | 0,000021 | 7,7 | 2 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000060 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000096 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000000 | 0,000111 | 2 | 3 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000007 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3381929193
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0007 58,2% del tiempo · 66,7% de las lecturas lógicas
- 2 Id 1 · TABLE ACCESS BY INDEX ROWID MON_MODS$ 41,8% del tiempo · 33,3% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 1 | 0,000046 | 41,8 | 1 | 33,3 | 2 | 0 | 0,000110 | 3 | 1 | 461 | ||
| 2 | 1 | 1 | 1 | 0,000064 | 58,2 | 2 | 66,7 | 1 | 0 | 0,000064 | 2 | 1 | 462 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#52 · SELECT
sql_id 19u4kfhhtg8m2hv 563585634Texto
select count(COL_0010) from SYS_FBA_TRACKEDTABLES1 where OBJ# = *** and bitand(FLAGS, ***)=***
- 1 SYS_FBA_TRACKEDTABLES, tabla del índice SYS_C001489: operación 3 del plan
- 2 operación 1 (SORT AGGREGATE) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000266 | 100,0 | 7 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000134 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000082 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,000041 | 0 | 2 | 0 | 2 | 0 |
| CLOSE | 1 | 0,000000 | 0,000009 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 977911507
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 3 · INDEX UNIQUE SCAN SYS_C001489 41,7% del tiempo · 100,0% de las lecturas lógicas
- 2 Id 1 · SORT AGGREGATE 50,0% del tiempo · 0,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 0,000018 | 50,0 | 0 | 0,0 | 0 | 0 | 0,000036 | 1 | |||||
| 2 | 0 | 1 | 0,000003 | 8,3 | 0 | 0,0 | 0 | 0 | 0,000018 | 1 | 1 | 1271 | |||
| 3 | 1 | 0 | 1 | 0,000015 | 41,7 | 1 | 100,0 | 0 | 0 | 0,000015 | 1 | 0 | 1272 |
Agregación (COUNT, SUM, MAX...)
SORT AGGREGATE
Calcula las funciones de agregación y devuelve una fila.
- Buena cuando
- Barata en sí: el costo está en las operaciones de abajo.
- Mala cuando
- Casi nunca.
- En el plan, mire
- Las operaciones debajo de ella.
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#53 · SELECT
sql_id 959uydc7rvscghv 259907983Texto
SELECT COUNT(*) FROM TAB_00061 WHERE COL_0061 = :1 AND COL_0062 = :2
- 1 TAB_0006, tabla del índice IDX_0010: operación 3 del plan
- 2 operación 1 (SORT AGGREGATE) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001000 | 420,2 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,000762 | -320,2 | 4 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000022 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,001000 | 0,000197 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000000 | 0,000017 | 0 | 1 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 3216348639
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 3 · INDEX RANGE SCAN IDX_0010 38,5% del tiempo · 100,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 1 · SORT AGGREGATE 50,0% del tiempo · 0,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 0,000013 | 50,0 | 0 | 0,0 | 0 | 0 | 0,000026 | 1 | |||||
| 2 | 0 | 1 | 0,000003 | 11,5 | 0 | 0,0 | 0 | 0 | 0,000013 | 1 | 0 | 68054 | |||
| 3 | 1 | 0 | 1 | 0,000010 | 38,5 | 1 | 100,0 | 0 | 0 | 0,000010 | 1 | 0 | 68057 |
Agregación (COUNT, SUM, MAX...)
SORT AGGREGATE
Calcula las funciones de agregación y devuelve una fila.
- Buena cuando
- Barata en sí: el costo está en las operaciones de abajo.
- Mala cuando
- Casi nunca.
- En el plan, mire
- Las operaciones debajo de ella.
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#54 · PL/SQL
sql_id 7umwgdhcjkfaphv 421083477Texto
BEGIN ROT_0005(COL_0056, COL_0057, COL_0058); END;
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001000 | 434,8 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,000770 | -334,8 | 3 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,001000 | 0,000060 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000155 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000015 | 0 | 0 | 0 | 0 | 0 |
#55 · SELECT
sql_id abk1nyq2wk8v2hv 2244551522Texto
select sys.dbms_standard.sysevent from dual
- 1 operación 1 (FAST DUAL) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000227 | 100,0 | 8 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000035 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000029 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,000159 | 0 | 0 | 0 | 2 | 0 |
| CLOSE | 2 | 0,000000 | 0,000004 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1388734953
De las líneas STAT del trace.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0,000001 | 100,0 | 0 | 0,0 | 0 | 0 | 0,000001 | 0 | 2 |
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#56 · SELECT
sql_id d6bv6ggpfz7qjhv 3941572305Texto
select sys.dbms_standard.dictionary_obj_name from dual
- 1 operación 1 (FAST DUAL) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000210 | 100,0 | 8 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 | |
| cpu | 0,000000 | 0,0 | 2 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 2 | 0,000000 | 0,000035 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 2 | 0,000000 | 0,000029 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 2 | 0,000000 | 0,000141 | 0 | 0 | 0 | 2 | 0 |
| CLOSE | 2 | 0,000000 | 0,000005 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1388734953
De las líneas STAT del trace.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0,000002 | 100,0 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 2 |
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#58 · SELECT
sql_id 710z58sn2nkt9hv 673860393Texto
SELECT COUNT(*) FROM MDSYS.TAB_0007 WHERE COL_0061 = :1 AND COL_0063 = :2
- 1 IDX_0011 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 2)
- 2 operación 1 (SORT AGGREGATE) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000178 | 100,0 | 4 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000020 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000149 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000000 | 0,000007 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 144376333
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX RANGE SCAN IDX_0011 57,1% del tiempo · 0,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 1 · SORT AGGREGATE 42,9% del tiempo · 0,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 1 | 0,000015 | 42,9 | 0 | 0,0 | 0 | 0 | 0,000035 | 0 | |||||
| 2 | 1 | 0 | 1 | 0,000020 | 57,1 | 0 | 0,0 | 0 | 0 | 0,000020 | 0 | 0 | 68536 |
Agregación (COUNT, SUM, MAX...)
SORT AGGREGATE
Calcula las funciones de agregación y devuelve una fila.
- Buena cuando
- Barata en sí: el costo está en las operaciones de abajo.
- Mala cuando
- Casi nunca.
- En el plan, mire
- Las operaciones debajo de ella.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#59 · SELECT
sql_id b5sr13avtw1wahv 3080587146Texto
select pos#,intcol#,col#,spare1,bo#,spare2,spare3 from icol$12 where obj#=:1
- 1 ICOL$, tabla del índice I_ICOL1: operación 2 del plan
- 2 ICOL$: operación 1 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000175 | 100,0 | 9 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 6 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000047 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000080 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 6 | 0,000000 | 0,000046 | 0 | 12 | 0 | 5 | 0 |
| CLOSE | 1 | 0,000000 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 299250003
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX RANGE SCAN I_ICOL1 100,0% del tiempo · 58,3% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 1 · TABLE ACCESS BY INDEX ROWID ICOL$ 0,0% del tiempo · 41,7% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 5 | 2 | 0,000000 | 0,0 | 5 | 41,7 | 0 | 0 | 0,000017 | 12 | 2 | 20 | ||
| 2 | 1 | 5 | 2 | 0,000024 | 100,0 | 7 | 58,3 | 0 | 0 | 0,000024 | 7 | 1 | 42 |
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#60 · SELECT
2 variantesTexto
select SYS_CONTEXT(:s,:s) from dual
- 1 operación 1 (FAST DUAL) no tiene objeto propio en el texto
Texto de la forma: los literales se convirtieron en :s (texto) y :n (número).
Variantes que más gastaron
| Llamadas | Inclusivo (s) | Literales |
|---|---|---|
| 8 | 0,000 | '***', '***' |
| 4 | 0,000 | '***', '***' |
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000168 | 100,0 | 12 | |
| cpu | 0,000000 | 0,0 | 3 | |
| cpu | 0,000000 | 0,0 | 3 | |
| cpu | 0,000000 | 0,0 | 3 | |
| cpu | 0,000000 | 0,0 | 3 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 3 | 0,000000 | 0,000067 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 3 | 0,000000 | 0,000040 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 3 | 0,000000 | 0,000054 | 0 | 0 | 0 | 3 | 0 |
| CLOSE | 3 | 0,000000 | 0,000007 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1388734953
De las líneas STAT del trace; plan registrado 2 veces, se muestra el registro más lento.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 FAST DUAL | 1 | 1 | 0,000002 | 100,0 | 0 | 0,0 | 0 | 0 | 0,000002 | 0 | 2 |
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#61 · DELETE
sql_id 0wcdzux2jrnaahv 1159450954Texto
delete from superobj$ where COL_0054 = :1
- 1 I_SUPEROBJ1 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 2)
- 2 operación 1 (DELETE SUPEROBJ$) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000160 | 100,0 | 3 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000052 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000103 | 0 | 1 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000005 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2453887050
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX UNIQUE SCAN I_SUPEROBJ1 75,0% del tiempo · 100,0% de las lecturas lógicas
- 2 Id 1 · DELETE SUPEROBJ$ 25,0% del tiempo · 0,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000002 | 25,0 | 0 | 0,0 | 0 | 0 | 0,000008 | 1 | |||||
| 2 | 1 | 0 | 1 | 0,000006 | 75,0 | 1 | 100,0 | 0 | 0 | 0,000006 | 1 | 0 | 72 |
Eliminación
DELETE
Elimina las filas que devolvió el row source de abajo.
- Buena cuando
- Pocas filas, encontradas por índice.
- Mala cuando
- Demasiadas filas; una clave foránea sin índice en la tabla hija bloquea la tabla entera.
- En el plan, mire
- Filas del row source de abajo.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#62 · DELETE
sql_id 75x8vfbd29wathv 3659854169Texto
delete from tab_stats$ where obj#=:1
- 1 IDX_0009 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 2)
- 2 operación 1 (DELETE TAB_STATS$) no tiene objeto propio en el texto
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000132 | 100,0 | 3 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000028 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000095 | 0 | 1 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000009 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 2667651180
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 2 · INDEX UNIQUE SCAN IDX_0009 71,4% del tiempo · 100,0% de las lecturas lógicas
- 2 Id 1 · DELETE TAB_STATS$ 28,6% del tiempo · 0,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 0 | 0,000002 | 28,6 | 0 | 0,0 | 0 | 0 | 0,000007 | 1 | |||||
| 2 | 1 | 0 | 1 | 0,000005 | 71,4 | 1 | 100,0 | 0 | 0 | 0,000005 | 1 | 0 | 431 |
Eliminación
DELETE
Elimina las filas que devolvió el row source de abajo.
- Buena cuando
- Pocas filas, encontradas por índice.
- Mala cuando
- Demasiadas filas; una clave foránea sin índice en la tabla hija bloquea la tabla entera.
- En el plan, mire
- Filas del row source de abajo.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#63 · SELECT
sql_id 0jgs3t6330f5bhv 2251307179Texto
select sys.dbms_standard.login_user from dual
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| cpu | 0,001000 | 787,4 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| no contabilizado | -0,000873 | -687,4 | 4 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000021 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000010 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,001000 | 0,000094 | 0 | 0 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1388734953
De las líneas STAT del trace.
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | FAST DUAL | 1 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 |
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#64 · SELECT
sql_id gxm90qnbtvr9thv 396221753Texto
SELECT COUNT(*) FROM ALL_VIEWS WHERE OWNER = '***' AND COL_0064 = '***'
- 1 I_OBJ5 no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 8)
- 2 USER$ no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 6)
- 3 USER$ (tabla del índice I_USER1) no aparece en el texto; viene de una vista, de un sinónimo o de SQL recursivo (operación 7)
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000105 | 100,0 | 4 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000020 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000048 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000000 | 0,000036 | 0 | 5 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000000 | 0,000001 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 1166547797
De las líneas STAT del trace.
Dónde gasta el plan por el valor propio de cada operación, sin el de las operaciones debajo de ella
- 1 Id 8 · INDEX RANGE SCAN I_OBJ5 34,9% del tiempo · 60,0% de las lecturas lógicas
Recorre un rango amplio del índice: compruebe la selectividad y el orden de las columnas. - 2 Id 6 · TABLE ACCESS BY INDEX ROWID USER$ 11,6% del tiempo · 20,0% de las lecturas lógicas
Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro. - 3 Id 7 · INDEX UNIQUE SCAN I_USER1 18,6% del tiempo · 20,0% de las lecturas lógicas
| Id | Operación | Exec. | Filas | Filas/exec | Estimado | Tiempo propio (s) | % tiempo | LIO propio | % LIO | PR | PW | Tiempo (s) | CR | Costo | obj |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0,000008 | 18,6 | 0 | 0,0 | 0 | 0 | 0,000043 | 5 | ||||||
| 2 | 0 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000035 | 5 | ||||||
| 3 | 0 | 1 | 0,000002 | 4,7 | 0 | 0,0 | 0 | 0 | 0,000035 | 5 | 4 | ||||
| 4 | 0 | 1 | 0,000003 | 7,0 | 0 | 0,0 | 0 | 0 | 0,000033 | 5 | 3 | ||||
| 5 | 0 | 1 | 0,000002 | 4,7 | 0 | 0,0 | 0 | 0 | 0,000030 | 5 | 3 | ||||
| 6 | 2 | 1 | 1 | 0,000005 | 11,6 | 1 | 20,0 | 0 | 0 | 0,000013 | 2 | 1 | 22 | ||
| 7 | 3 | 1 | 1 | 0,000008 | 18,6 | 1 | 20,0 | 0 | 0 | 0,000008 | 1 | 0 | 46 | ||
| 8 | 1 | 0 | 1 | 0,000015 | 34,9 | 3 | 60,0 | 0 | 0 | 0,000015 | 3 | 2 | 40 | ||
| 9 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | 75 | |||
| 10 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 47 | |||
| 11 | 0 | 2 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | ||||
| 12 | 0 | 10 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | 62 | |||
| 13 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | ||||
| 14 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 0 | ||||
| 15 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 3 | ||||
| 16 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 1 | 47 | |||
| 17 | 0 | 1 | 0,000000 | 0,0 | 0 | 0,0 | 0 | 0 | 0,000000 | 0 | 2 | 39 |
Agregación (COUNT, SUM, MAX...)
SORT AGGREGATE
Calcula las funciones de agregación y devuelve una fila.
- Buena cuando
- Barata en sí: el costo está en las operaciones de abajo.
- Mala cuando
- Casi nunca.
- En el plan, mire
- Las operaciones debajo de ella.
Filtro
FILTER
Aplica un predicado a las filas del row source de abajo. Con dos row sources, ejecuta el segundo (una subquery no desanidada) por cada fila del primero.
- Buena cuando
- Un solo row source, o una subquery ejecutada pocas veces (el FILTER guarda en caché los resultados ya calculados).
- Mala cuando
- Subquery ejecutada fila a fila (Exec alto en el segundo row source): permitir el unnesting o reescribirla como join suele resolverlo.
- En el plan, mire
- Exec del segundo row source.
Join en bucle (nested loops)
NESTED LOOPS
Por cada fila del row source externo (outer, driving), ejecuta el row source interno (inner).
- Buena cuando
- Pocas filas en el outer y acceso selectivo por índice en el inner. Devuelve las primeras filas rápido (bueno para FIRST_ROWS).
- Mala cuando
- Muchas filas en el outer: el inner se ejecuta miles de veces. Suele venir de una cardinalidad subestimada en el outer; un HASH JOIN leería cada lado una sola vez.
- En el plan, mire
- Exec de las operaciones del inner y, en el outer, Estimado comparado con Filas/exec.
Acceso a la tabla por ROWID del índice
TABLE ACCESS BY INDEX ROWID
Accede a la tabla, una fila a la vez, por los ROWID que devolvió el index scan justo debajo.
- Buena cuando
- Pocas filas, o filas almacenadas cerca unas de otras en la tabla (clustering factor bajo).
- Mala cuando
- Muchas filas dispersas (clustering factor alto): casi un bloque leído por fila. O un filter predicate aplicado solo aquí que descarta la mayor parte de lo que trajo el índice: falta en el índice la columna de ese predicado.
- En el plan, mire
- Filas de esta operación comparadas con las del index scan justo debajo: si aquí quedan bastantes menos, el filtro está en la tabla y no en el índice.
Búsqueda por clave única
INDEX UNIQUE SCAN
Busca una única clave en un índice único (PK o UNIQUE): baja del root block por los branch blocks hasta el leaf block de la clave.
- Buena cuando
- Casi siempre: lee solo la altura del índice (BLEVEL + 1 bloques).
- Mala cuando
- Como inner de un NESTED LOOPS con millones de filas en el outer: barato por ejecución, caro en total.
- En el plan, mire
- Exec: miles de ejecuciones pesan aun con LIO propio bajo en cada una.
Recorrido de rango del índice
INDEX RANGE SCAN
Baja hasta el primer leaf block del rango y recorre en orden los leaf blocks dentro del rango definido por el access predicate.
- Buena cuando
- Rango estrecho: el access predicate usa las columnas iniciales del índice con igualdad y quedan pocas claves.
- Mala cuando
- Rango amplio (muchos leaf blocks), un predicado que no usa la columna inicial del índice (se vuelve filter predicate dentro del índice), o muchas ejecuciones como inner de un NESTED LOOPS. Si el TABLE ACCESS de arriba descarta casi todo, falta en el índice la columna del filtro.
- En el plan, mire
- Filas devueltas y LIO propio, comparados con los de la operación de tabla justo encima.
Tabla interna de Oracle (X$)
FIXED TABLE
Lee una estructura de memoria de Oracle, detrás de las vistas V$.
- Buena cuando
- Consultas puntuales.
- Mala cuando
- Consultas frecuentes a V$ grandes (V$SQL, V$SESSION) desde rutinas de monitorización.
Skip scan del índice
INDEX SKIP SCAN
Usa un índice compuesto sin la primera columna en el filtro: recorre el índice una vez por cada valor distinto de la primera columna.
- Buena cuando
- La primera columna del índice tiene pocos valores distintos.
- Mala cuando
- La primera columna tiene muchos valores: se convierte casi en una lectura del índice completo. Un índice que empiece por la columna filtrada suele resolverlo.
- En el plan, mire
- LIO propio comparado con las Filas devueltas.
Haga clic en una operación para ver qué hace, cuándo es buena, cuándo es mala y qué columnas del plan revisar. Tiempo (s) y CR son acumulados: incluyen las operaciones debajo de cada una (los row sources de entrada); los valores propios descuentan esas operaciones. Oracle mide el tiempo por operación por muestreo, así que puede no cuadrar entre una operación y las de abajo; las lecturas lógicas se cuentan siempre. Filas/exec y Estimado en rojo: el optimizador erró la cardinalidad por 10 veces o más.
#65 · LOCK TABLE
sql_id 427fd0f4ay3ryhv 2293174014Texto
lock table sys.mon_mods$ in exclusive mode nowait
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| no contabilizado | 0,000072 | 100,0 | 3 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 | |
| cpu | 0,000000 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000000 | 0,000054 | 0 | 0 | 0 | 0 | 0 |
| EXEC | 1 | 0,000000 | 0,000015 | 0 | 0 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000000 | 0,000003 | 0 | 0 | 0 | 0 | 0 |
Objeto 188047 · IDX_0001
índice- Espera (s)
- 0,931
- Ocurrencias
- 1.877
- Eventos principales
- db file sequential read · Disk file operations I/O
Dónde aparece en el trace
- Sentencia #7, operación 2 INDEX FULL SCAN IDX_0001
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 187750
- Espera (s)
- 0,165
- Ocurrencias
- 18.336
- Eventos principales
- direct path read
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 1008999 · TAB_0005
tabla- Espera (s)
- 0,023
- Ocurrencias
- 17
- Eventos principales
- enq: RO - fast object reuse · local write wait · reliable message
Dónde aparece en el trace
- Sentencia #1, operación 2 TABLE ACCESS FULL TAB_0005
- Sentencia #2, operación 2 TABLE ACCESS FULL TAB_0005
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 226 · IDL_CHAR$
tabla- Espera (s)
- 0,017
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #12, operación 1 TABLE ACCESS BY INDEX ROWID IDL_CHAR$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 107 · I_DEPENDENCY2
índice- Espera (s)
- 0,016
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #14, operación 7 INDEX RANGE SCAN I_DEPENDENCY2
- Sentencia #14, operación 14 INDEX RANGE SCAN I_DEPENDENCY2
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 227 · IDL_UB2$
tabla- Espera (s)
- 0,016
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #15, operación 1 TABLE ACCESS BY INDEX ROWID IDL_UB2$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 427 · IDX_0012
índice- Espera (s)
- 0,010
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #11, operación 28 INDEX RANGE SCAN IDX_0012
- Sentencia #17, operación 18 INDEX RANGE SCAN IDX_0012
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 228 · IDL_SB4$
tabla- Espera (s)
- 0,009
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #19, operación 1 TABLE ACCESS BY INDEX ROWID IDL_SB4$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 31 · CDEF$
tabla- Espera (s)
- 0,008
- Ocurrencias
- 2
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #13, operación 10 TABLE ACCESS BY INDEX ROWID CDEF$
- Sentencia #35, operación 1 TABLE ACCESS BY INDEX ROWID CDEF$
- Sentencia #46, operación 1 TABLE ACCESS BY INDEX ROWID CDEF$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 19 · IND$
tabla- Espera (s)
- 0,008
- Ocurrencias
- 3
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #13, operación 4 TABLE ACCESS CLUSTER IND$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 237 · I_IDL_CHAR1
índice- Espera (s)
- 0,007
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #12, operación 2 INDEX RANGE SCAN I_IDL_CHAR1
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 236 · I_IDL_UB11
índice- Espera (s)
- 0,007
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #18, operación 2 INDEX RANGE SCAN I_IDL_UB11
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 187694
- Espera (s)
- 0,006
- Ocurrencias
- 49
- Eventos principales
- db file sequential read
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 40 · I_OBJ5
índice- Espera (s)
- 0,005
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #11, operación 22 INDEX RANGE SCAN I_OBJ5
- Sentencia #17, operación 12 INDEX RANGE SCAN I_OBJ5
- Sentencia #32, operación 8 INDEX RANGE SCAN I_OBJ5
- Sentencia #37, operación 7 INDEX RANGE SCAN I_OBJ5
- Sentencia #64, operación 8 INDEX RANGE SCAN I_OBJ5
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 225 · IDL_UB1$
tabla- Espera (s)
- 0,004
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #18, operación 1 TABLE ACCESS BY INDEX ROWID IDL_UB1$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 464 · IDX_0008
índice- Espera (s)
- 0,003
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #23, operación 2 INDEX UNIQUE SCAN IDX_0008
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 384
- Espera (s)
- 0,001
- Ocurrencias
- 4
- Eventos principales
- SQL*Net message from client · SQL*Net message to client
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 650598
- Espera (s)
- 0,000
- Ocurrencias
- 2
- Eventos principales
- db file sequential read · Disk file operations I/O
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 187749 · TAB_0002
tabla- Espera (s)
- 0,000
- Ocurrencias
- 2
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #39, operación 1 TABLE ACCESS BY INDEX ROWID TAB_0002
- Sentencia #43, operación 1 TABLE ACCESS BY INDEX ROWID TAB_0002
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 239 · I_IDL_SB41
índice- Espera (s)
- 0,000
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #19, operación 2 INDEX RANGE SCAN I_IDL_SB41
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 3 · I_OBJ#
índice- Espera (s)
- 0,000
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #11, operación 24 INDEX UNIQUE SCAN I_OBJ#
- Sentencia #11, operación 32 INDEX UNIQUE SCAN I_OBJ#
- Sentencia #13, operación 5 INDEX UNIQUE SCAN I_OBJ#
- Sentencia #17, operación 14 INDEX UNIQUE SCAN I_OBJ#
- Sentencia #17, operación 22 INDEX UNIQUE SCAN I_OBJ#
- Sentencia #26, operación 3 INDEX UNIQUE SCAN I_OBJ#
- Sentencia #31, operación 3 INDEX UNIQUE SCAN I_OBJ#
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 54 · I_CDEF2
índice- Espera (s)
- 0,000
- Ocurrencias
- 2
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #13, operación 11 INDEX RANGE SCAN I_CDEF2
- Sentencia #35, operación 2 INDEX RANGE SCAN I_CDEF2
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 18 · OBJ$
tabla- Espera (s)
- 0,000
- Ocurrencias
- 2
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #11, operación 1 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #11, operación 3 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #11, operación 5 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #11, operación 7 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #11, operación 9 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #11, operación 21 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #11, operación 26 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #14, operación 9 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #14, operación 16 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #17, operación 11 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #17, operación 16 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #37, operación 1 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #37, operación 10 TABLE ACCESS BY INDEX ROWID OBJ$
- Sentencia #48, operación 1 TABLE ACCESS BY INDEX ROWID OBJ$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 187751
- Espera (s)
- 0,000
- Ocurrencias
- 2
- Eventos principales
- db file sequential read · direct path read
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 462 · IDX_0007
índice- Espera (s)
- 0,000
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #33, operación 2 INDEX UNIQUE SCAN IDX_0007
- Sentencia #51, operación 2 INDEX UNIQUE SCAN IDX_0007
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 188088 · IDX_0002
índice- Espera (s)
- 0,000
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #20, operación 2 INDEX RANGE SCAN IDX_0002
- Sentencia #39, operación 2 INDEX RANGE SCAN IDX_0002
- Sentencia #41, operación 2 (sin detalle en este archivo) INDEX RANGE SCAN IDX_0002
- Sentencia #43, operación 2 INDEX RANGE SCAN IDX_0002
- Sentencia #44, operación 2 (sin detalle en este archivo) INDEX RANGE SCAN IDX_0002
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 39 · I_OBJ4
índice- Espera (s)
- 0,000
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #11, operación 39 INDEX RANGE SCAN I_OBJ4
- Sentencia #17, operación 29 INDEX RANGE SCAN I_OBJ4
- Sentencia #32, operación 14 INDEX RANGE SCAN I_OBJ4
- Sentencia #64, operación 17 INDEX RANGE SCAN I_OBJ4
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 238 · I_IDL_UB21
índice- Espera (s)
- 0,000
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #15, operación 2 INDEX RANGE SCAN I_IDL_UB21
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 9 · I_FILE#_BLOCK#
índice- Espera (s)
- 0,000
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #28, operación 3 INDEX UNIQUE SCAN I_FILE#_BLOCK#
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 57 · I_CCOL1
índice- Espera (s)
- 0,000
- Ocurrencias
- 1
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #34, operación 2 INDEX RANGE SCAN I_CCOL1
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 36 · I_OBJ1
índiceDónde aparece en el trace
- Sentencia #11, operación 2 INDEX RANGE SCAN I_OBJ1
- Sentencia #11, operación 4 INDEX RANGE SCAN I_OBJ1
- Sentencia #11, operación 6 INDEX RANGE SCAN I_OBJ1
- Sentencia #11, operación 8 INDEX RANGE SCAN I_OBJ1
- Sentencia #11, operación 10 INDEX RANGE SCAN I_OBJ1
- Sentencia #14, operación 8 INDEX RANGE SCAN I_OBJ1
- Sentencia #14, operación 15 INDEX RANGE SCAN I_OBJ1
- Sentencia #37, operación 2 INDEX RANGE SCAN I_OBJ1
- Sentencia #37, operación 11 INDEX RANGE SCAN I_OBJ1
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 22 · USER$
tablaDónde aparece en el trace
- Sentencia #11, operación 19 TABLE ACCESS BY INDEX ROWID USER$
- Sentencia #17, operación 9 TABLE ACCESS BY INDEX ROWID USER$
- Sentencia #32, operación 6 TABLE ACCESS BY INDEX ROWID USER$
- Sentencia #37, operación 12 TABLE ACCESS CLUSTER USER$
- Sentencia #64, operación 6 TABLE ACCESS BY INDEX ROWID USER$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 46 · I_USER1
índiceDónde aparece en el trace
- Sentencia #11, operación 20 INDEX UNIQUE SCAN I_USER1
- Sentencia #17, operación 10 INDEX UNIQUE SCAN I_USER1
- Sentencia #32, operación 7 INDEX UNIQUE SCAN I_USER1
- Sentencia #64, operación 7 INDEX UNIQUE SCAN I_USER1
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 21 · COL$
tablaDónde aparece en el trace
- Sentencia #11, operación 23 TABLE ACCESS CLUSTER COL$
- Sentencia #17, operación 13 TABLE ACCESS CLUSTER COL$
- Sentencia #31, operación 2 TABLE ACCESS CLUSTER COL$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 83 · COLTYPE$
tablaDónde aparece en el trace
- Sentencia #11, operación 25 TABLE ACCESS CLUSTER COLTYPE$
- Sentencia #17, operación 15 TABLE ACCESS CLUSTER COLTYPE$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 38 · I_OBJ3
índiceDónde aparece en el trace
- Sentencia #11, operación 27 INDEX RANGE SCAN I_OBJ3
- Sentencia #17, operación 17 INDEX RANGE SCAN I_OBJ3
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 47 · I_USER2
índiceDónde aparece en el trace
- Sentencia #11, operación 29 INDEX RANGE SCAN I_USER2
- Sentencia #11, operación 30 INDEX RANGE SCAN I_USER2
- Sentencia #11, operación 38 INDEX SKIP SCAN I_USER2
- Sentencia #17, operación 19 INDEX RANGE SCAN I_USER2
- Sentencia #17, operación 20 INDEX RANGE SCAN I_USER2
- Sentencia #17, operación 28 INDEX SKIP SCAN I_USER2
- Sentencia #32, operación 11 INDEX RANGE SCAN I_USER2
- Sentencia #32, operación 13 INDEX SKIP SCAN I_USER2
- Sentencia #64, operación 10 INDEX RANGE SCAN I_USER2
- Sentencia #64, operación 16 INDEX SKIP SCAN I_USER2
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 4 · TAB$
tablaDónde aparece en el trace
- Sentencia #11, operación 31 TABLE ACCESS CLUSTER TAB$
- Sentencia #17, operación 21 TABLE ACCESS CLUSTER TAB$
- Sentencia #26, operación 2 TABLE ACCESS CLUSTER TAB$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 62 · I_OBJAUTH1
índiceDónde aparece en el trace
- Sentencia #11, operación 34 INDEX RANGE SCAN I_OBJAUTH1
- Sentencia #17, operación 24 INDEX RANGE SCAN I_OBJAUTH1
- Sentencia #42, operación 3 INDEX RANGE SCAN I_OBJAUTH1
- Sentencia #47, operación 3 INDEX RANGE SCAN I_OBJAUTH1
- Sentencia #64, operación 12 INDEX RANGE SCAN I_OBJAUTH1
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 432 · IND_STATS$
tablaDónde aparece en el trace
- Sentencia #13, operación 6 TABLE ACCESS BY INDEX ROWID IND_STATS$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 433 · IDX_0005
índiceDónde aparece en el trace
- Sentencia #13, operación 7 INDEX UNIQUE SCAN IDX_0005
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 104 · DEPENDENCY$
tablaDónde aparece en el trace
- Sentencia #14, operación 6 TABLE ACCESS BY INDEX ROWID DEPENDENCY$
- Sentencia #14, operación 13 TABLE ACCESS BY INDEX ROWID DEPENDENCY$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 463 · MON_MODS_ALL$
tablaDónde aparece en el trace
- Sentencia #23, operación 1 TABLE ACCESS BY INDEX ROWID MON_MODS_ALL$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 14 · SEG$
tablaDónde aparece en el trace
- Sentencia #28, operación 2 TABLE ACCESS CLUSTER SEG$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 37 · I_OBJ2
índiceDónde aparece en el trace
- Sentencia #29, operación 2 INDEX RANGE SCAN I_OBJ2
- Sentencia #48, operación 2 INDEX RANGE SCAN I_OBJ2
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 375 · RLS$
tablaDónde aparece en el trace
- Sentencia #32, operación 9 TABLE ACCESS BY INDEX ROWID RLS$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 377 · IDX_0006
índiceDónde aparece en el trace
- Sentencia #32, operación 10 INDEX RANGE SCAN IDX_0006
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 32 · CCOL$
tablaDónde aparece en el trace
- Sentencia #34, operación 1 TABLE ACCESS BY INDEX ROWID CCOL$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 160 · TRIGGER$
tablaDónde aparece en el trace
- Sentencia #37, operación 8 TABLE ACCESS BY INDEX ROWID TRIGGER$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 162 · I_TRIGGER1
índiceDónde aparece en el trace
- Sentencia #37, operación 9 INDEX RANGE SCAN I_TRIGGER1
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 11 · I_USER#
índiceDónde aparece en el trace
- Sentencia #37, operación 13 INDEX UNIQUE SCAN I_USER#
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 61 · OBJAUTH$
tablaDónde aparece en el trace
- Sentencia #42, operación 2 TABLE ACCESS BY INDEX ROWID OBJAUTH$
- Sentencia #47, operación 2 TABLE ACCESS BY INDEX ROWID OBJAUTH$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 627 · MLOG$
tablaDónde aparece en el trace
- Sentencia #45, operación 3 TABLE ACCESS CLUSTER MLOG$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 626 · I_MLOG#
índiceDónde aparece en el trace
- Sentencia #45, operación 4 INDEX UNIQUE SCAN I_MLOG#
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 55 · I_CDEF3
índiceDónde aparece en el trace
- Sentencia #46, operación 2 INDEX RANGE SCAN I_CDEF3
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 669 · CDC_CHANGE_TABLES$
tablaDónde aparece en el trace
- Sentencia #49, operación 1 TABLE ACCESS FULL CDC_CHANGE_TABLES$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 461 · MON_MODS$
tablaDónde aparece en el trace
- Sentencia #51, operación 1 TABLE ACCESS BY INDEX ROWID MON_MODS$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 1271 · SYS_FBA_TRACKEDTABLES
tablaDónde aparece en el trace
- Sentencia #52, operación 2 TABLE ACCESS BY INDEX ROWID SYS_FBA_TRACKEDTABLES
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 1272 · SYS_C001489
índiceDónde aparece en el trace
- Sentencia #52, operación 3 INDEX UNIQUE SCAN SYS_C001489
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 68054 · TAB_0006
tablaDónde aparece en el trace
- Sentencia #53, operación 2 TABLE ACCESS BY INDEX ROWID TAB_0006
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 68057 · IDX_0010
índiceDónde aparece en el trace
- Sentencia #53, operación 3 INDEX RANGE SCAN IDX_0010
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 68536 · IDX_0011
índiceDónde aparece en el trace
- Sentencia #58, operación 2 INDEX RANGE SCAN IDX_0011
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 20 · ICOL$
tablaDónde aparece en el trace
- Sentencia #59, operación 1 TABLE ACCESS BY INDEX ROWID ICOL$
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 42 · I_ICOL1
índiceDónde aparece en el trace
- Sentencia #59, operación 2 INDEX RANGE SCAN I_ICOL1
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 72 · I_SUPEROBJ1
índiceDónde aparece en el trace
- Sentencia #61, operación 2 INDEX UNIQUE SCAN I_SUPEROBJ1
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 431 · IDX_0009
índiceDónde aparece en el trace
- Sentencia #62, operación 2 INDEX UNIQUE SCAN IDX_0009
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 75 · I_VIEW1
índiceDónde aparece en el trace
- Sentencia #64, operación 9 INDEX UNIQUE SCAN I_VIEW1
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
WaitScope 1.7.0 · análisis realizado en el servidor · informe exportado el 29/10/2026 10:19:58