El detalle de una sentencia reúne todo lo que el trace dice de ella: el peso en el tiempo total, el texto, adónde fue su tiempo, las llamadas, el plan y las sentencias que disparó.
Qué muestra la sección
Haga clic en el número o en el texto de una sentencia en cualquier lista del informe, o en el enlace del hallazgo que trata de ella, como Ver sentencia #2. En la consola, el detalle se abre en una página propia, con la ruta Análisis / nombre del análisis / Sentencia #n. En el HTML descargado, el detalle existe para las sentencias que aparecen en alguna lista o hallazgo y solo se arma cuando usted hace clic: ocupa el lugar del informe en la página, y Volver al informe o el botón Atrás del navegador llevan de vuelta a la lista. En el PDF, está al final, en Detalle de las sentencias.
El título trae la posición y el tipo de la sentencia, como #1 · SELECT, con el sql_id y el hash value (hv). En una forma, que suma sentencias que solo difieren en los literales, el título trae la etiqueta N variantes en su lugar, porque cada variante tiene el suyo (las variantes en las listas). Justo debajo, los números:
- Peso en el tiempo total: la contribución de la sentencia, en segundos y como parte del tiempo total (Sentencias SQL);
- Inclusivo: la duración de todas las llamadas de la sentencia;
- Profundidad: 0 con invocada por la aplicación, o 1 o más con SQL recursivo. En una forma, es la menor profundidad de las variantes; cuando es 0, el número viene con la menor entre las variantes;
- Errores: cuántas líneas ERROR tuvo el cursor de la sentencia, cuando tuvo alguna (errores).
Después vienen los bloques Texto, Variantes que más gastaron (solo en una forma), Perfil de la sentencia, Llamadas, un Plan de ejecución para cada plan grabado (plan de ejecución) y SQL recursivo ejecutado por esta sentencia.
Cómo leerla
Texto
El texto de la sentencia tal como lo grabó el trace. Cuando el plan tiene operaciones destacadas, sus objetos aparecen marcados en el texto con el número de la operación destacada, y una nota debajo dice qué operación usa cada uno. En un acceso por índice, la marca va en la tabla del índice, porque el índice no aparece en el SQL. Cuando el objeto no está en el texto, la nota dice que viene de una vista, de un sinónimo o de SQL recursivo.
Dos mensajes pueden aparecer en lugar del texto o debajo de él: Texto no disponible: el cursor se abrió antes del inicio del trace. y Texto truncado: el trace declara N caracteres., cuando el texto guardado es menor que el declarado. En una forma, el texto es el SQL con los literales cambiados, y la nota Texto de la forma: los literales se convirtieron en :s (texto) y :n (número). aparece debajo.
Con la Privacidad de los informes activada en Mi cuenta, el SQL sale con el texto entre comillas, los números usados como valor, o ambos, cambiados por ***, según las opciones marcadas (literales ocultos).
Variantes que más gastaron
En una forma, la tabla lista las variantes que más tiempo gastaron en sus propias llamadas, de la que más gastó a la que menos gastó:
| Columna | Qué indica |
|---|---|
| SQL ID | El sql_id de la variante o, sin él, el hash value, como hv 123. La columna desaparece cuando ninguna variante trae ni uno ni otro. |
| Llamadas | Cuántas llamadas tuvo la variante. |
| Inclusivo (s) | La duración de todas las llamadas de la variante. |
| Literales | Los valores de la variante, en el orden en que aparecen en el texto, separados por comas: lo que cambia de una variante a otra. |
Use los literales para encontrar en la aplicación el fragmento que arma el SQL y el SQL ID para buscar la variante en la base de datos. Cuando el recuento de variantes es estimado, las variantes que el análisis no recordó una a una quedan fuera de la tabla (trace con muchas sentencias). Con la Privacidad de los informes activada, los literales salen con *** según las opciones marcadas, y la columna SQL ID desaparece con cualquiera de ellas: el sql_id se calcula a partir del texto con los valores y permitiría descubrir el literal oculto.
Perfil de la sentencia
El perfil exclusivo de la sentencia: las esperas dentro de sus llamadas y entre ellas en su cursor, la CPU de cada tipo de llamada, el tiempo no contabilizado dentro de las llamadas y la fila SQL recursivo (sentencias hijas), con la duración de las llamadas que disparó la sentencia.
Las columnas son Componente, Duración (s), % (la parte en el tiempo de la propia sentencia, y no en el tiempo total), la barra y Ocurrencias. El nombre de cada componente abre la misma tarjeta del perfil.
Llamadas
| Columna | Qué indica |
|---|---|
| Llamada | El tipo de llamada, en el orden de tkprof: PARSE, EXEC, FETCH, UNMAP, SORT UNMAP, CLOSE y los demás. |
| Cantidad | Cuántas llamadas de ese tipo tuvo la sentencia. |
| CPU (s) y Duración (s) | La suma de c= y de e=, en segundos con seis decimales. |
| Disco (PIO) | Bloques leídos del disco (p=). |
| Consistente (CR) | Lecturas lógicas en modo consistente (cr=), las de las consultas. |
| Actual (CU) | Lecturas lógicas en modo actual (cu=), típicas del DML. |
| Filas | Filas devueltas o procesadas (r=). |
| Misses | Fallos en la library cache (mis=). En el PARSE, cada miss es un hard parse. |
SQL recursivo ejecutado por esta sentencia
Las sentencias hijas que más tardaron, de la que más tardó a la que menos, con #, Duración (s) y Texto. El número lleva al detalle de la hija cuando está entre las sentencias del informe. Una hija que es una forma trae la etiqueta N variantes antes del texto.
Cuándo preocupa
- Peso en el tiempo total bastante mayor que el inclusivo: el tiempo está entre las llamadas, y el perfil de la sentencia muestra qué espera, casi siempre
SQL*Net message from client(sesión esperando a la aplicación). - PARSE con una Cantidad cercana a la de EXEC: el cursor se abre y se cierra en cada uso (un PARSE en cada ejecución). Misses cerca de la Cantidad del PARSE: hard parse (muchos hard parses).
- FETCH con una Cantidad cercana a Filas: una fila por llamada (muchos FETCH con pocas filas).
- Consistente (CR) muy por encima de Filas: el plan lee demasiados bloques para lo que devuelve. Vaya a las operaciones destacadas del plan.
- La fila SQL recursivo (sentencias hijas) pesa en un SELECT o DML simple: función llamada por fila o trigger pesado (fila a fila en PL/SQL).
Adónde ir después
- Sentencia #1 del informe de ejemplo: texto con la tabla T marcada, perfil con el SQL recursivo y el plan.
- Plan de ejecución, para encontrar la operación que gasta.
- Objetos, para ir de la operación a la tabla o al índice en la base de datos.