El evento 10046 es el SQL trace extendido de Oracle: el nivel indica qué entra en el archivo además de las llamadas a la base de datos. WaitScope necesita las esperas. Use el nivel 8; el 12 también sirve, pero graba los valores de bind, que WaitScope ignora.
Antes de empezar
alter session set eventsactiva el evento solo en la sesión en la que usted está y requiere el privilegioALTER SESSION. Para activarlo en otra sesión, use DBMS_MONITOR.- Compruebe antes los parámetros que cambian el archivo (timed_statistics y max_dump_file_size).
- Para encontrar el archivo después, póngale un nombre con
tracefile_identifier(marcar el nombre del archivo).
Los niveles
| Nivel | Qué graba | En WaitScope |
|---|---|---|
| 1 | El SQL trace común: sentencias, llamadas y filas del plan | No sirve: sin esperas |
| 4 | El nivel 1 y los valores de bind | No sirve: sin esperas |
| 8 | El nivel 1 y las esperas | Recomendado |
| 12 | El nivel 1, los binds y las esperas | Sirve; los binds se ignoran |
Los niveles 1, 4, 8 y 12 están en la tabla Event Level Settings de la página SQL Trace de la documentación de Oracle, y el nivel 8 es el que usa la guía de tracing de 19c para grabar las esperas. Sin las esperas, el perfil no separa la espera del resto: el tiempo esperando el disco, un lock o la aplicación se convierte en tiempo no contabilizado, dentro y entre las llamadas (huecos entre llamadas). En el Resumen, Esperas igual a 0 indica un trace sin esperas.
Cuándo va el plan al archivo
Las líneas STAT, el plan con los números de cada operación, van al archivo con la frecuencia del parámetro plan_stat. La referencia de DBMS_MONITOR documenta tres valores:
| Valor | Cuándo graba el plan | En el informe |
|---|---|---|
'FIRST_EXECUTION', igual a NULL, el valor predeterminado | En la primera ejecución del cursor | El plan aparece en el detalle de la sentencia. |
'ALL_EXECUTIONS' | En cada ejecución, y el archivo crece | Cada plan distinto aparece una vez, con los números de la última grabación (en una sentencia con la etiqueta N variantes, los de la ejecución grabada más lenta) y una nota como plan registrado 3 veces, se muestra el último (con variantes, se muestra el registro más lento). |
'NEVER' | Nunca | El detalle de la sentencia sale sin plan. |
En alter session set events, los niveles documentados, 1, 4, 8 y 12, no eligen esa frecuencia, y el valor predeterminado ya basta para que el informe muestre el plan. Si necesita el plan en cada ejecución, active el trace con DBMS_MONITOR y plan_stat => 'ALL_EXECUTIONS' (qué valores usar).
Activar y desactivar con ALTER SESSION
- En la sesión que va a ejecutar la operación, active el evento:
alter session set events '10046 trace name context forever, level 8'; - Ejecute la operación entera en esa misma sesión.
- Desactive el evento:
alter session set events '10046 trace name context off';
Resultado: el archivo de trace de la sesión tiene las líneas PARSE, EXEC, FETCH y WAIT de la operación. Para encontrar su ruta, use la consulta a V$DIAG_INFO de encontrar el archivo de la propia sesión.
No active el 10046 en todo el sistema: cada sesión graba su propio archivo, y la operación que interesa se pierde entre las demás.
Parámetros que cambian el archivo
Compruebe los valores vigentes antes de activar:
select name, value
from v$parameter
where name in ('timed_statistics', 'statistics_level', 'max_dump_file_size');
| Parámetro | Valor bueno | Con otro valor |
|---|---|---|
timed_statistics | TRUE | Con FALSE, los tiempos salen en cero y el perfil no tiene qué dividir. Con statistics_level en TYPICAL o ALL, su valor predeterminado es TRUE. |
max_dump_file_size | UNLIMITED, el valor predeterminado | Con un límite, el archivo deja de crecer al llegar a él. A partir de 25 MB, Oracle divide el trace en hasta 5 segmentos y borra el más antiguo después del primero: el medio de la operación desaparece. |
En su sesión, ajústelos con alter session:
alter session set timed_statistics = true;
alter session set max_dump_file_size = unlimited;
En la sesión de otra persona, activada con DBMS_MONITOR, vale el valor de la instancia, que solo cambia con alter system y se aplica a todas las sesiones: acuérdelo con el DBA. Los detalles están en la referencia de Oracle para MAX_DUMP_FILE_SIZE y TIMED_STATISTICS.
Trace cortado en medio
El informe mide solo lo que está en el archivo. Señales de que el trace no cubre la operación entera:
- el Período del Resumen empieza después o termina antes que la operación;
- un aviso en la parte superior del informe que termina en (trace iniciado o cortado en medio de una llamada);
- sentencias con Texto no disponible: el cursor se abrió antes del inicio del trace.;
- el hallazgo Huecos de tiempo entre llamadas en el Diagnóstico.
Para evitarlo: active el trace antes de que empiece la operación y desactívelo después de que termine, sin desactivarlo en medio; deje max_dump_file_size sin límite; y, si la aplicación cambia de archivo en el camino, envíe todos los archivos juntos (analizar juntos).
Próximos pasos
- Para activar el trace en otra sesión: activar el trace con DBMS_MONITOR.
- Para encontrar el archivo: encontrar el archivo de trace.
- Para enviar: enviar desde el navegador.