exemplo-10046.trc
Sesión y entorno
- Base de datos
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production · 19.3.0.0.0
- Instancia
- ORCL1
- Servidor
- db-exemplo
- Sesión
- 10.20 · pid 4242
- Módulo
- app-exemplo
- Unidad de tiempo
- microsegundos
- Archivo en el servidor
- /u01/app/oracle/diag/rdbms/orcl/ORCL1/trace/ORCL1_ora_4242.trc
Diagnóstico
Patrones que suelen explicar lo que muestra el trace, en orden de gravedad. Son pistas para el análisis, no conclusiones.
La base de datos estuvo inactiva esperando la siguiente petición del cliente. Ajustar el SQL no reduce ese tiempo: revise la aplicación, la red y la cantidad de idas y vueltas (llamadas por unidad de trabajo). Ver en el perfil
Operación TABLE ACCESS BY INDEX ROWID T. Visita la tabla fila a fila a partir del índice: índice poco selectivo o sin las columnas que usa el filtro. También pesan: operación 2, INDEX UNIQUE SCAN T_PK (20,0% de las lecturas lógicas). Las operaciones están resaltadas en el plan, en el detalle de la sentencia. Ver en el plan de la sentencia #1
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) |
|---|---|---|---|---|---|---|---|
| Idle | 0,005000 | 71,3 | 1 | 0,005000 | 0,005000 | 0,005000 | |
| User I/O | 0,001300 | 18,5 | 2 | 0,000650 | 0,000300 | 0,001000 | |
| no contabilizado | 0,000286 | 4,1 | |||||
| cpu | 0,000195 | 2,8 | 2 | 0,000097 | 0,000040 | 0,000155 | |
| no contabilizado | 0,000161 | 2,3 | 6 | 0,000027 | |||
| cpu | 0,000050 | 0,7 | 1 | 0,000050 | 0,000050 | 0,000050 | |
| cpu | 0,000015 | 0,2 | 2 | 0,000008 | 0,000005 | 0,000010 | |
| Network | 0,000002 | 0,0 | 1 | 0,000002 | 0,000002 | 0,000002 | |
| cpu | 0,000001 | 0,0 | 1 | 0,000001 | 0,000001 | 0,000001 | |
| Total | 0,007010 | 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 |
|---|---|---|---|---|---|
| 0,005000 | 71,3 | 1 | SQL*Net message from client | ||
| 0,001300 | 18,5 | 2 | db file sequential read | ||
| 0,000447 | 6,4 | tiempo no contabilizado entre llamadas · tiempo no contabilizado dentro de las llamadas | |||
| 0,000261 | 3,7 | 6 | CPU: FETCH dbcalls · CPU: PARSE dbcalls · CPU: EXEC dbcalls · CPU: CLOSE dbcalls | ||
| 0,000002 | 0,0 | 1 | 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
SQL*Net message from client espera0,005 s · 71,3% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,005000 | 100,0 | 7zq3k1c9m2x4p | select * from t where id=*** |
db file sequential read espera0,001 s · 18,5% del tiempo total · 2 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,001000 | 76,9 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0,000300 | 23,1 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
CPU: FETCH dbcalls cpu0,000 s · 2,8% del tiempo total · 2 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,000155 | 79,5 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0,000040 | 20,5 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
tiempo no contabilizado dentro de las llamadas no contabilizado0,000 s · 2,3% del tiempo total · 2 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,000116 | 72,0 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0,000045 | 28,0 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
CPU: PARSE dbcalls cpu0,000 s · 0,7% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,000050 | 100,0 | 7zq3k1c9m2x4p | select * from t where id=*** |
CPU: EXEC dbcalls cpu0,000 s · 0,2% del tiempo total · 2 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,000010 | 66,7 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0,000005 | 33,3 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
SQL*Net message to client espera0,000 s · 0,0% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,000002 | 100,0 | 7zq3k1c9m2x4p | select * from t where id=*** |
CPU: CLOSE dbcalls cpu0,000 s · 0,0% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,000001 | 100,0 | 7zq3k1c9m2x4p | select * from t where id=*** |
Por clase de espera
Idle0,005 s · 71,3% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,005000 | 100,0 | 7zq3k1c9m2x4p | select * from t where id=*** |
User I/O0,001 s · 18,5% del tiempo total · 2 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,001000 | 76,9 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0,000300 | 23,1 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
No contabilizado0,000 s · 6,4% del tiempo total · 2 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,000116 | 26,0 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0,000045 | 10,1 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
CPU0,000 s · 3,7% del tiempo total · 2 sentencias
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,000216 | 82,8 | 7zq3k1c9m2x4p | select * from t where id=*** | |
| 2 | 0,000045 | 17,2 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
Network0,000 s · 0,0% del tiempo total · 1 sentencia
| # | Tiempo (s) | % del total | gráfico | SQL ID | Texto |
|---|---|---|---|---|---|
| 1 | 0,000002 | 100,0 | 7zq3k1c9m2x4p | select * from t where id=*** |
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 | 0,007 | 95,9 | 0,002 | SELECT | 0 | 1 | 1 | 1 | 10 | 1 | 7zq3k1c9m2x4p | select * from t where id=*** |
| 2 | 0,000 | 0,0 | 0,000 | SELECT | 1 | 1 | 1 | 1 | 3 | 1 | 0w5n8r2t6v1yb | select obj# from obj$ where x=*** |
Tiempo no atribuido a ninguna sentencia: 0,000 s.
Tipos de llamada
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| FETCH | 2 | 0,000 | 0,002 | 2 | 13 | 0 | 2 | 0 |
| PARSE | 1 | 0,000 | 0,000 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 2 | 0,000 | 0,000 | 0 | 0 | 0 | 0 | 0 |
| CLOSE | 1 | 0,000 | 0,000 | 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 |
|---|---|---|---|---|---|---|---|---|
| FETCH | 0,001600 | 0,000200 | 0,000 | 31 | 10 | 1 | 1 | #1 select * from t where id=*** |
| PARSE | 0,000100 | 0,000050 | 0,000 | 17 | 0 | 0 | 0 | #1 select * from t where id=*** |
| EXEC | 0,000020 | 0,000010 | 0,000 | 18 | 0 | 0 | 0 | #1 select * from t where id=*** |
| CLOSE | 0,000002 | 0,000001 | 0,007 | 35 | 0 | 0 | 0 | #1 select * from t where id=*** |
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.
SQL*Net message from client1 ocurrencias · 0,005 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 | 1 | 100,0 | 0,005000 | 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 |
db file sequential read2 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 | 1 | 50,0 | 0,000300 | 23,1 | |
| 1 ms ≤ e < 10 ms | 1 | 50,0 | 0,001000 | 76,9 | |
| 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 client1 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 | 1 | 100,0 | 0,000002 | 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 |
FETCH (duración e de la llamada)2 ocurrencias · 0,002 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 | 1 | 50,0 | 0,000380 | 19,2 | |
| 1 ms ≤ e < 10 ms | 1 | 50,0 | 0,001600 | 80,8 | |
| 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)1 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 | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 1 ms | 1 | 100,0 | 0,000100 | 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 |
EXEC (duración e de la llamada)2 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 | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 µs ≤ e < 100 µs | 2 | 100,0 | 0,000030 | 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 |
CLOSE (duración e de la llamada)1 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 | 1 | 100,0 | 0,000002 | 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 |
Lecturas
lecturas (rangos de disco)2 ocurrencias · 0,001 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 5 ms | 2 | 100,0 | 0,001300 | 100,0 | |
| 5 ms ≤ e < 10 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 10 ms ≤ e < 15 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 15 ms ≤ e < 20 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 20 ms ≤ e < 25 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 25 ms ≤ e < 50 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 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)2 ocurrencias · 0,001 s
| Rango de duración | Ocurrencias | % ocurr. | Duración (s) | % duración | |
|---|---|---|---|---|---|
| 0 ≤ e < 15 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 15 µs ≤ e < 25 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 25 µs ≤ e < 50 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 50 µs ≤ e < 100 µs | 0 | 0,0 | 0,000000 | 0,0 | |
| 100 µs ≤ e < 500 µs | 1 | 50,0 | 0,000300 | 23,1 | |
| 500 µs ≤ e < 1 ms | 0 | 0,0 | 0,000000 | 0,0 | |
| 1 ms ≤ e < 10 ms | 1 | 50,0 | 0,001000 | 76,9 | |
| 10 ms ≤ e < ∞ | 0 | 0,0 | 0,000000 | 0,0 |
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 | 1 | 0,000 | 1 | 0,001 |
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 |
|---|---|---|---|---|
| 50 | T | 0,001 | 2 | db file sequential read |
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
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
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 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
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
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 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
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)
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
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
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
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
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
sql_id 7zq3k1c9m2x4phv 111Texto
select * from t12 where id=***
- 1 T: operación 1 del plan
- 2 T, tabla del índice T_PK: operación 2 del plan
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,005000 | 74,4 | 1 | |
| espera | 0,001000 | 14,9 | 1 | |
| recursivo | 0,000390 | 5,8 | ||
| cpu | 0,000155 | 2,3 | 1 | |
| no contabilizado | 0,000116 | 1,7 | 4 | |
| cpu | 0,000050 | 0,7 | 1 | |
| cpu | 0,000010 | 0,1 | 1 | |
| espera | 0,000002 | 0,0 | 1 | |
| cpu | 0,000001 | 0,0 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| PARSE | 1 | 0,000050 | 0,000100 | 0 | 0 | 0 | 0 | 1 |
| EXEC | 1 | 0,000010 | 0,000020 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000200 | 0,001600 | 1 | 10 | 0 | 1 | 0 |
| CLOSE | 1 | 0,000001 | 0,000002 | 0 | 0 | 0 | 0 | 0 |
Plan de ejecución 10
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 T 98,0% del tiempo · 80,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 UNIQUE SCAN T_PK 2,0% 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 | 1 | 1 | 0,001470 | 98,0 | 8 | 80,0 | 1 | 0 | 0,001500 | 10 | 2 | 50 | ||
| 2 | 2 | 1 | 1 | 0,000030 | 2,0 | 2 | 20,0 | 0 | 0 | 0,000030 | 2 | 1 | 51 |
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.
SQL recursivo ejecutado por esta sentencia
| # | Duración (s) | Texto |
|---|---|---|
| 2 | 0,000 | select obj# from obj$ where x=*** |
#2 · SELECT
sql_id 0w5n8r2t6v1ybhv 222Texto
select obj# from obj$ where x=***
Perfil de la sentencia
| Componente | Duración (s) | % | Ocurrencias | |
|---|---|---|---|---|
| espera | 0,000300 | 76,9 | 1 | |
| no contabilizado | 0,000045 | 11,5 | 2 | |
| cpu | 0,000040 | 10,3 | 1 | |
| cpu | 0,000005 | 1,3 | 1 |
Llamadas
| Llamada | Cantidad | CPU (s) | Duración (s) | Disco (PIO) | Consistente (CR) | Actual (CU) | Filas | Misses |
|---|---|---|---|---|---|---|---|---|
| EXEC | 1 | 0,000005 | 0,000010 | 0 | 0 | 0 | 0 | 0 |
| FETCH | 1 | 0,000040 | 0,000380 | 1 | 3 | 0 | 1 | 0 |
Objeto 50 · T
tabla- Espera (s)
- 0,001
- Ocurrencias
- 2
- Eventos principales
- db file sequential read
Dónde aparece en el trace
- Sentencia #1, operación 1 TABLE ACCESS BY INDEX ROWID T
Las consultas listas para ejecutar en la base están en la página del objeto, en la consola.
Objeto 51 · T_PK
índiceDónde aparece en el trace
- Sentencia #1, operación 2 INDEX UNIQUE SCAN T_PK
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:59