[ 2012-08-12 ]

Estimar el tiempo de rollback de una transacción


Como es de saber, cuando una sesión termina de manera "anormal", toda transacción que no ha sido confirmada todavía, comenzará un proceso de "rollback". En algunos casos, y de acuerdo al volumen de datos en cuestión, esta operación puede demorar bastante tiempo y resulta interesante (y a veces necesario) poder estimar cuanto será ese tiempo.

Para esta, podemos entonces consultar las vistas v$transaction y v$session para así poder calcular cuan larga será la espera para que finalice la operación de rollback.

La siguiente consulta nos devolverá la cantidad de bloques de undo utilizados por la transacción:

SELECT a.used_ublk
 FROM v$transaction a, v$session b
 WHERE a.addr = b.taddr
 AND b.sid = {sid en cuestión}


(80000 bloques)/(5000 bloques/minuto) =16 minutos para finalizar la operación.

Si al correr la consulta nos retorna 85000 bloques y al esperar un minuto y ejecutar nuevamente la consulta tenemos 80000 bloques utilizados, obtenemos una tasa de liberación de 5000 bloques por minuto.

De esta manera estamos en condiciones de calcular que, a una tasa de liberación de 5000 bloques por minuto tardará 16 minutos en liberar los restantes 80000 bloques utilizados.

Con esta sencilla fórmula podremos estimar con bastante aproximación el tiempo empleado para largas operaciones de rollback.

Espero les resulte útil.

Saludos,

No hay comentarios:

Publicar un comentario