La sección de objetos indica en qué tablas e índices esperó la sesión. En la consola, cada objeto abre una página con consultas listas para que usted las ejecute en la base de datos del trace y conozca el objeto: propietario, columnas, índices y estadísticas.
Qué muestra la sección
La sección Objetos con más tiempo de espera (en el índice, Objetos) lista los objetos que más espera sumaron, del que más sumó al que menos. El objeto sale del obj# de las líneas WAIT; el nombre sale de las líneas STAT del propio trace, cuando el objeto aparece en un plan. La sección solo aparece cuando alguna espera trae obj#.
Cómo leerla
| Columna | Qué indica |
|---|---|
| obj# | El object_id del objeto en la base de datos del trace. En la consola, lleva a la página del objeto; en el HTML descargado, al detalle del objeto en el mismo archivo, con el tipo, la espera y dónde aparece en el trace, sin las consultas listas. |
| Nombre | El nombre que el plan del trace da al objeto. En blanco cuando el objeto no aparece en ningún plan. |
| Espera (s) | La suma de las esperas con ese obj#. |
| Ocurrencias | Cuántas esperas hubo. |
| Eventos principales | Los eventos que más tiempo sumaron en el objeto, del mayor al menor. |
Lea el objeto junto con los eventos: la lectura (db file sequential read, db file scattered read) apunta al acceso que el plan hace al objeto; el lock y la contención (enq: TX - row lock contention, buffer busy waits) apuntan a otras sesiones que usan el mismo objeto.
En el informe de ejemplo, el objeto 50, la tabla T, suma 0,001 s en 2 lecturas de db file sequential read.
La página del objeto
En la consola, la página del objeto se abre desde el obj# de esta sección, desde la columna obj del plan y desde el object_id de los deadlocks. El título es Objeto N con el nombre, y la línea de abajo dice el tipo (tabla, índice, vista o secuencia, según la operación del plan) y en qué base de datos ejecutar las consultas: la instancia, el contenedor (PDB) y el servicio del trace. Las consultas usan las vistas DBA_; sin ese privilegio, cámbielas por ALL_.
Cuando el trace no indica el tipo, un aviso pide empezar por la identificación, porque las consultas de tabla y de índice solo devuelven filas para el tipo correcto. La tarjeta Dónde aparece en el trace lista las operaciones de plan que usan el objeto, como Sentencia #1, operación 1, con enlace a la fila del plan.
| Bloque | Aparece para | Qué trae |
|---|---|---|
| Identificar el objeto | todo objeto | Propietario, nombre, tipo y estado, desde dba_objects. |
| Tabla: propietario, nombre y columnas | tabla o tipo desconocido | Las columnas, con las estadísticas de cada una. |
| Tabla: índices y las columnas de cada uno | tabla o tipo desconocido | Los índices de la tabla, con las columnas en el orden del índice. |
| Índice: detalles, tabla y columnas | índice o tipo desconocido | Altura, hojas, clustering factor y columnas. |
| Vista: columnas y texto | vista | Las columnas y el texto de la vista. |
| Secuencia: caché y último número | secuencia | La caché y el último número de la secuencia. |
Cada bloque tiene el botón Copiar. La primera consulta, con el objeto 50 del ejemplo, es esta:
select owner, object_name, subobject_name, object_type, status, created, last_ddl_time
from dba_objects
where object_id = 50;
Para tablas e índices, la sección Estadísticas trae bloques para actualizar las estadísticas y para restaurarlas desde el backup: Actualizar las estadísticas de la tabla, Restaurar las estadísticas de la tabla desde el backup y los dos equivalentes del índice.
- Antes de recolectar, el bloque guarda las estadísticas actuales en
SYSTEM.JB_BACKUP_STATSy muestra elstatiddel backup. El bloque de restauración usa esestatid. - La recolección usa
no_invalidate => FALSEy se ejecuta con degree 1. Cambiec_paraleloaTRUEpara usar más procesos, solo en Enterprise Edition. - Ejecute como SYS o con un usuario que tenga
ANALYZE ANYy acceso al diccionario.
El object_id es de la base de datos del trace: en otra base de datos, el mismo número es otro objeto. Cuando el trace trae el nombre, el bloque de estadísticas se detiene con error si el nombre en la base de datos es otro. La recolección lee el objeto entero e invalida los cursores que lo usan, que vuelven a hacer hard parse: elija el horario en producción.
Desde la pila PL/SQL de un deadlock, la misma página se abre para el objeto PL/SQL, con Detalles del objeto (sin el cuerpo), Objetos que usa, Parámetros, Cuerpo del objeto y el fragmento de 10 líneas antes y 10 después de la línea de la pila.
Cuándo preocupa
- Un objeto concentra la mayor parte de la espera: es en él donde pesan el plan o la concurrencia. Vaya a las operaciones que lo usan, desde la tarjeta Dónde aparece en el trace.
- Muchas lecturas en un índice o en una tabla grande: compruebe si el filtro de la sentencia es selectivo y si el índice tiene las columnas correctas, con las consultas de tabla y de índice.
- Esperas de lock en un objeto: otra sesión retiene filas o la tabla (bloqueo por otra sesión).
- Estadísticas antiguas o ausentes en la consulta de la tabla, con estimación errónea en el plan: candidatas a actualizar (estimación de filas errónea).
Adónde ir después
- Objetos del informe de ejemplo.
- Plan de ejecución, para ver cómo la sentencia accede al objeto.
- Lecturas, para el tiempo y la relectura de los bloques.