Ver Mensaje Individual
  #22  
Antiguo 23-11-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Cita:
Empezado por Toni Ver Mensaje
Hola Guillotmarc,

Como comentaba este procedimiento recalcula (suma y agrupa el contenido de unas tablas y actualiza con el resultado otras) las tablas que agrupan tienen al rededor de 11000 registros y la que actualiza tambien.

He comprobado que no hay triggers implicados.

Se que esto no es lo mas optimo, pero inicialmente funciona bastane bien. A medida que va 'acumulando' versiones de los registros y va aumentando el tamaño de la base de datos, cuando el tamaño se multiplicado ya 5 el rendimiento cae en picado.

¿Pero estos registros no tendrian que influirle tanto, no?

¿la unica manera de mejorar el rendimiento sera hacer backup-restore?

Muchas gracias.
Todo apunta a que sigues teniendo como mínimo una transacción que se queda siempre abierta, por lo que no se puede ejecutar la recolección de basura de Firebird, y no se recupera el espacio usado por el versionado de productos, aparte de finalmente caerse el rendimiento de la base datos.

Tienes todos los síntomas relatados en este artículo de Firebird :

http://www.ibphoenix.com/main.nfs?a=...x&page=ibp_oit

Tienes que revisar todas las transacciones de tu programa, y verificar que se finalicen inmediatamente una vez terminada su tarea. Nunca dejes transacciones abiertas a la espera de que el usuario haga algo, y no confíes en las transacciones implícitas de los componentes, puesto que si hay una transacción abierta, ejecutarán su consulta dentro de esa transacción y la dejarán como estaba, es decir abierta. Programa tu mismo el inicio y commit de las transacciones en cada actualización de la base de datos.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 23-11-2010 a las 11:58:04.
Responder Con Cita