Después de saber qué componente pesa, la pregunta es qué sentencia gastó ese tiempo. Esta sección responde por componente del perfil y por clase de espera, con las sentencias que más gastaron en cada uno.
Qué muestra la sección
La sección Sentencias principales por componente y por clase (en el índice, Sentencias por componente) tiene dos bloques:
- Por componente del perfil: un grupo para cada uno de los mayores componentes del perfil que tienen tiempo en alguna sentencia, en el orden del perfil;
- Por clase de espera: un grupo para cada clase con tiempo en alguna sentencia.
Cada grupo se abre y se cierra con un clic; el primero de cada bloque ya viene abierto. La fila del grupo muestra el nombre, el tipo (espera, cpu o no contabilizado), los segundos, la parte del tiempo total y cuántas sentencias gastaron tiempo en él.
El tiempo de cada sentencia viene de su perfil exclusivo: lo que gastó la propia sentencia, sin el SQL recursivo que dispara. Si un SELECT llama a una función que lee otra tabla, por ejemplo, la lectura cuenta en el SQL de dentro de la función, que es recursivo, y no en el SELECT.
Cómo leerla
| Columna | Qué indica |
|---|---|
| # | La posición de la sentencia en Sentencias SQL, con un enlace a su detalle. |
| Tiempo (s) | Cuánto gastó la sentencia en el componente o en la clase. |
| % del total | La parte de la sentencia en el tiempo del grupo, y no en el tiempo total de la sesión. El peso del grupo en el tiempo total está en la fila del grupo. |
| SQL ID | El sql_id de la sentencia. En blanco en la fila de una forma, porque cada variante tiene el suyo. |
| Texto | El comienzo del texto de la sentencia, con un enlace al detalle. En la fila de una forma, que suma sentencias que solo difieren en los literales, la etiqueta N variantes va antes del texto (las variantes en las listas). |
La suma de la columna % del total de un grupo puede quedar por debajo del 100%. Parte del tiempo no es de ninguna sentencia: el tiempo no contabilizado entre llamadas y las esperas sin cursor. Parte puede ser de sentencias fuera de la lista.
Cada grupo muestra hasta 10 sentencias, o el número elegido en Sentencias por lista, en la parte superior del informe. Cuando hay más, el grupo termina con N sentencias más gastaron tiempo aquí; aumente el número en la parte superior de la página para verlas.
En el informe de ejemplo, el grupo de db file sequential read suma 0,001 s, el 18,5% del tiempo total: la sentencia #1 tiene el 76,9% de ese tiempo y la sentencia #2, que es recursiva, el 23,1%.
Cuándo preocupa
- Una sentencia concentra casi todo el tiempo del componente mayor: ataque esa sentencia, por el detalle y por el plan.
- El tiempo del componente se reparte entre muchas sentencias parecidas: el problema es un patrón de la aplicación, no un SQL. Compruebe si los textos solo cambian en los literales (textos compartibles).
- Una sentencia recursiva aparece al principio de un grupo de lectura o de CPU: el costo está en la función o en el trigger, no en la sentencia que llamó la aplicación (SQL recursivo).
Adónde ir después
- Sentencias por componente del informe de ejemplo y el grupo de db file sequential read.
- Detalle de la sentencia, el paso siguiente después de elegir la sentencia.
- Perfil del tiempo de respuesta, para elegir el componente.