Reducción de transacciones


(Tony Diana) #1

Una buena idea en V6 era no "modificar ficha con formulario" en un proceso, precisamente para cerrar las transacciones, pero no veo la manera de hacer lo mismo en V7 (paciencia pulga, que la noche es larga) ¿Alguien le importaría echarme una mano con esto?


([N1] mariorafaelvargas) #2

Mi experiencia, debia de subir 70000 registros.

Una vez hice una importacion de datos desde un archivo txt a diferentes tablas de V7, el caso es que se me truncaba la importacion cuando en la opciones Transacciones de vAdmin el contador de transacciones sobrepasaba los 64000 transacciones. Mi conclusion personal fue que esto se debia a las lineas de programacion del proceso de importacion estaban en un solo "proceso"

 

Esto lo solucione haciendo que desde un "proceso" llamara a una "funcion" y dentro de esta "funcion" estaban todas las lineas de la importacion a las tablas respectivas. De esta manera el numero de "transacciones" nunca llegaba a 64000

 


([N1] Velasco) #3

Buenas.

El mensaje de que la transacción es demasiado grande no implica error alguno ya que se utiliza para evitar la sobrecarga del servidor. En este enlace se habla de ello: http://velneo.es/info_v7_74_es/velneo_vadmin_v7/monitorizacion/transacciones

También es recomendable optimizar las transacciones. Tenerlo todo en una transacción, si ésta es muy grande, puede provocar que el vserver llegue al máximo de memoria que Windows asigna a cada proceso. Ver este enlace: http://msdn.microsoft.com/en-us/library/aa366778%28v=Vs.85%29.aspx

Lo mejor es optimizar esa transacción en varias transacciones.

Si deseamos hacer una transacción por alta también deberemos tener una pequeña precaución.

Si miramos la primera imagen vemos que es un proceso que recorre varias listas y cuando está en la última crea un manejador de objeto para dar el alta en otro proceso. Con esto conseguimos que cada alta genere una transacción.

Ahora bien, según está colocada la instrucción "Crear manejador de objeto" dentro del bucle genera un nuevo manejador en cada iteración del bucle consumiendo memoria innecesaria.

La opción correcta será colocar esta instruccón fuera del bucle como indico en la segunda imagen

PD: Gracias a soporte por esta información.

 

 

 

Jorge Velasco Fernández

jvelasco@theseedsc.com

www.theseedsc.com

[attachment=12715,1146] [attachment=12715,1147]


([N4] eic) #4

Hola.

Efectivamente, en 6.x lo de "Modificar ficha con formulario" tenía el problema de que la transacción quedaba abierta, y el usuario podía estar más de 4 minutos sin hacer nada... por lo que la transacción se deshacía, y había problemas.

Si no me equivoco, en V7 existe una funcionalidad (Juan la llamó un día "entretenedor de sockets") que asegura que la transacción siempre queda abierta, por lo que no hay problemas para usar esa instrucción.

De hecho, si te fijas, la solución en 6.x pasaba por llamar al formulario en el retorno de un proceso, cosa que en V7 es imposible (al menos, de momento), salvo en acciones que llaman a múltiples objetos uno detrás de otro.

Saludos,

Fran Varona