Saltar al contenido
WaitScope Entrar Solicitar acceso (por correo) Menú

Rollbacks en el trace

El hallazgo ROLLBACK cuenta las transacciones que terminaron en rollback: cómo saber, por el propio trace, si hubo trabajo deshecho o solo una rutina del pool.

Se aplica a: Traces 10046

Una transacción que termina en rollback deshace lo que hizo. A veces eso es esperable, como la rutina de un pool de conexiones; a veces revela trabajo perdido después de un error. El propio trace dice cuál de los dos casos es.

Síntomas

En el Diagnóstico aparece el hallazgo n rollbacks (ROLLBACK), o 1 rollback, con el texto El trabajo deshecho también cuesta tiempo; compruebe si es lo esperado. y el enlace Ver resumen. La gravedad es baja, sin porcentaje del tiempo total.

El hallazgo aparece cuando el trace tiene al menos una línea XCTEND con rlbk=1, que marca el fin de una transacción por rollback. En el Resumen, la tarjeta Sentencias distintas muestra, abajo, cuántos commits y rollbacks hizo la sesión.

Causa

  • La aplicación deshace la transacción después de un error.
  • El pool de conexiones o el framework hace rollback al devolver la conexión o al final de cada pedido, muchas veces sin haber modificado nada.
  • Una rutina simula o prueba una operación y descarta el resultado.

El costo depende de lo que la transacción modificó: la base de datos deshace cada modificación con el undo. Una transacción que solo leyó termina sin nada que deshacer, y su línea XCTEND trae rd_only=1.

Solución

  1. Compare commits y rollbacks en el Resumen.
  2. Cuente en el trace los rollbacks de transacciones que modificaron datos (rd_only=0) y los de transacciones que solo leyeron (rd_only=1):
    grep -c "XCTEND rlbk=1, rd_only=0" arquivo.trc
    grep -c "XCTEND rlbk=1, rd_only=1" arquivo.trc

    Resultado: sumados, los dos números dan el total de rollbacks del hallazgo.

  3. Liste las líneas de los rollbacks que deshicieron modificaciones; el número antes de los dos puntos es la línea del trace:
    grep -n "XCTEND rlbk=1, rd_only=0" arquivo.trc | head
  4. Lea el fragmento del trace antes de cada uno. Cambie 1000 por la línea del rollback:
    head -n 1000 arquivo.trc | tail -n 40
  5. Si hay una línea ERROR antes del rollback, corrija el error: vea errores de Oracle en el trace.
  6. Si no hay error, confirme con quien mantiene la aplicación si el rollback forma parte de la regla de negocio.

Los rollbacks solo con rd_only=1 suelen ser rutina del pool o del framework y cuestan poco. Cada uno sigue siendo un pedido a la base de datos: si las idas y vueltas pesan en el tiempo, vea sesión esperando a la aplicación.

Cómo confirmar

Después de la corrección, genere el trace de la misma operación y compare el número de rollbacks en el Resumen y el recuento de rd_only=0 en el trace. Cuando la causa era un error, también desaparece de la sección Errores.

En el informe

Actualizado el 29/10/2026. Informar un error en esta página