Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/08/2012, 07:31
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ORA-01555: snapshot too old al usar BULK COLLECT en una tabla fija.

Bien, como para dar un cierre a este tema que me quedo colgado, les comento:
- El problema efectivamente se produce en mi caso porque esta tabla jamás está inactiva. Está constantemente recibiendo inserts, por lo cual Oracle, para preservar la consistencia de lectura de lo que busco, descarga todo esto en los segmentos de rollback. En un momento dado el snapshot resulta obsoleto, y se cae el proceso, a pesar de no haberse terminado la lectura.
- El hecho de que vayamos a borrar directamente los registros leídos sin hacer otra operación, resulta irrelevante para Oracle. Este tiene como prioridad mantener la lectura consistente, y eso causa un impacto indeseado en el proceso.
- Para resolver el problema, realizamos diferentes parametrizaciones, acortando la cantidad de registros, o reduciendo la cantidad de commits a ejecutar, ,hasta lograr que el proceso más o menos diese resultado.
- La performance lograda resultó insuficiente, y aún así, en ciertas ocasiones el proceso caía, siempre por snapshot too old.
- Finalmente, viendo que en realidad, si íbamos a borrar directamente, leer los registros carecía de sentido, reformulamos el proceso creando una segmentación por tiempo de los registros, aprovechando que sobre el campo de fecha de la tabla había un INDEX definido.
- El proceso ha funcionado de corrido desde entonces, con una performance mucho mejor a la esperada... aunque ahora nos hemos topado con un problema distinto que será motivo de otro thread.

Como resumen de condiciones de entorno:
- No, no se puede modificar los segmentos de rollback (que sería la mejor solución), porque los de administración de la base se niegan, en esencia porque esa base está en un servidor con Oracle 8i, y ya no tiene soporte de Oracle.
- No, migrar el servidor no es una opción, porque la empresa no lo va a hacer, y de todos modos si lo hace, es un plan a plazo de 3 años como mínimo, y nuestro problema es ahora.
- No se espera reducción en la carga de datos. Antes bien se espera un incremento paulatino para los próximos meses. Con lo que el problema debe ser resuelto a nivel de proceso almacenado.

En otras palabras: El escenario es un espanto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)