Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 23-11-2010
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 21
Toni Va por buen camino
Hola duilioisola,

En el procedimiento realizo un for select que agrupa por los campos clave de la tabla que actualizo, con lo que ya realiza una sola actualizacion por registro. Lo que pasa es que hay bastantes registros implicados y cada ejecucion del procedimiento pues supone como unos 50.000 registros actualizados. Y este procedimiento se ejecuta 20-30 veces diariamente.

Muchas gracias por tu interes.
__________________
Saludos,

Bitman
Responder Con Cita
  #22  
Antiguo 23-11-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
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
  #23  
Antiguo 23-11-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Estoy de acuerdo con lo comentado por guillotmarc, hay alguna transacción que se te está escapando, no es lógico que disminuya el rendimiento de la base de datos porque ocupe más. Está claro, por lo que cuentas de que al hacer backup/restore (o una 'limpieza') todo vuelve a ir bien.
Responder Con Cita
  #24  
Antiguo 25-11-2010
Avatar de Estifmauin
Estifmauin Estifmauin is offline
Miembro
 
Registrado: may 2008
Ubicación: Alicante
Posts: 24
Poder: 0
Estifmauin Va por buen camino
Smile

Hola Toni.
Todo lo que estáis discutiendo es muy interesante... yo soy fan de la optimización y depuración de código, pero tu caso me recuerda a algo que me pasó con un proyecto que realicé hace algún tiempo.
Se trataba de un sistema multihilo con muuuchas llamadas a procedimientos almacenados, y tanto la base de datos como la RAM que consumía el proceso fbserver se disparaban.
Revise... investigué... optimicé... pero no se corregía.

Durante unos meses el cliente debía reiniciar una vez por semana el servicio FB para que liberara la RAM, y también compactar la bbdd.

Hasta que salió FB 2.5 y su soporte transaccional para procedimientos almacenados y triggers. Todo solucionado.

Espero que esto te ayude, pues con versiones anteriores la cosa puede que no tenga remedio.

Nota: ojo con los campos blob en vitas!
Responder Con Cita
  #25  
Antiguo 25-11-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Cita:
Empezado por Estifmauin Ver Mensaje
Hola Toni.
Todo lo que estáis discutiendo es muy interesante... yo soy fan de la optimización y depuración de código, pero tu caso me recuerda a algo que me pasó con un proyecto que realicé hace algún tiempo.
Se trataba de un sistema multihilo con muuuchas llamadas a procedimientos almacenados, y tanto la base de datos como la RAM que consumía el proceso fbserver se disparaban.
Revise... investigué... optimicé... pero no se corregía.

Durante unos meses el cliente debía reiniciar una vez por semana el servicio FB para que liberara la RAM, y también compactar la bbdd.

Hasta que salió FB 2.5 y su soporte transaccional para procedimientos almacenados y triggers. Todo solucionado.

Espero que esto te ayude, pues con versiones anteriores la cosa puede que no tenga remedio.

Nota: ojo con los campos blob en vitas!
Por lo que dices, a mi me da la impresión de que seguramente tendrías el mismo problema que Toni : se te quedaban transacciones abiertas. Por eso al utilizar FB 2.5, al gestionar manualmente las transacciones dentro de los procedimientos almacenados, entonces ya se finalizaron correctamente y se acabaron los problemas.

Hasta donde yo sé, no hay nada malo con FB 1.5, no es que pueda soportar menos tamaño de la base de datos ni carga de transacciones que Firebird 2.5.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #26  
Antiguo 25-11-2010
Avatar de Estifmauin
Estifmauin Estifmauin is offline
Miembro
 
Registrado: may 2008
Ubicación: Alicante
Posts: 24
Poder: 0
Estifmauin Va por buen camino
Marc.
Mi mayor problema era el consumo incontrolado de ram... como era una sistema de funcionamiento ininterrumpido, al cabo de 2 semanas se agotaba la ram, y pof! (y para colmo, un tal Murphy se encargaba de que petase el sábado por la tarde).

Lo probé casi todo. Incluso llegué a que cada vez que un hilo necesitaba ejecutar un pa, creaba una conexión y los objetos necesarios, abría y cerraba las transacciones y luego destruía todo. Y tampoco funcionaba.
Sé que en alguna parte había algo mal, pero me volví loco y no lo encontré.

Debo aclarar que era un sistema ado+odbc, y pensé que el problema estaba en odbc. probé otros drivers y también oledb, pero la cosa seguía igual...

Cuando estaba a punto de suicidarme, apareció fb 2.5 y ¡aleluya! todo perfecto. Creo que me moriré sin saber dónde estaba el fallo, pero como tengo otras cosas en marcha... Tal vez en otra vida retome el tema.

Por esto, y por muchos otros motivos recomiendo migrar a Firebird 2.5.

Y ahora una queja al cielo: Estoy un poco harto de leer que ado no es adecuado para conectarse a bbdd grandes. Yo he usado de todo, y creo que ado es muy válido. Si os parece, podemos abrir un hilo para discutir esto.
Responder Con Cita
  #27  
Antiguo 25-11-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Pues sí, tienes razón, con lo que probaste está claro que no eran las transacciones. Además si el problema solo estaba en el consumo de RAM, entonces no tengo ni idea, no recuerdo haber leído nada relacionado.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #28  
Antiguo 30-11-2010
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 21
Toni Va por buen camino
Hola a todos,

Posiblemente tenga razon Estifmauin, porque esta aplicacion con la misma base de dato esta instalada en varios sitios sin problema alguno. Y en este caso que me da problemas la unica personalizacion importante es el dichoso procedimiento que actualiza muchos registros. Es en el unico caso que se nota la falta de rendimiento, aunque tambien he de decir que principalmente la falta de rendimiento donde mas se nota es al llamar al mismo procedimiento curiosamente. El resto de la aplicacion que realiza todo tipo de consultas a la base de datos funciona con normalidad.

He programado diariamente con programador de tareas de Windows, que realice un gfix cada dia por la noche y el rendimiento mejora, pero no ha llegado al medio dia y ya se nota que se vuelve a poner lenta.

Ya me gustaria migrarla la base de datos a FB2.5 pero creo que puede ser una locura la de problemas que me puedo encontrar y que dificilmente voy poder preveer en modo test.

Muchas gracias a todos.
__________________
Saludos,

Bitman
Responder Con Cita
  #29  
Antiguo 30-11-2010
Avatar de Estifmauin
Estifmauin Estifmauin is offline
Miembro
 
Registrado: may 2008
Ubicación: Alicante
Posts: 24
Poder: 0
Estifmauin Va por buen camino
Cita:
Empezado por Toni Ver Mensaje
Ya me gustaria migrarla la base de datos a FB2.5 pero creo que puede ser una locura la de problemas que me puedo encontrar y que dificilmente voy poder preveer en modo test.
Bueno Toni, todo depende del margen de maniobra que tengas. Firebird evoluciona con compatibilidad hacia atrás, añadiendo mejoras pero sin sacrificar características.
Yo he migrado varios sistemas de versiones 2.X a la 2.5 sin problemas. Sólo en un par de ocasiones tuve que migrar "a mano", y eran sistemas con mucho manejo de campos blob, y cuando eso ocurrió, lo que hice fue migrar la estructura, y luego bombear los datos con el IBPump. Eso si, hay que tener cuidado con ciertos parámetros como el charset y el dialecto.

He hecho una pequeña investigación, y no he encontrado referencias a problemas en este sentido.
Te animo a que lo intentes, al menos en modo test, a ver si surge algo raro y en ese caso, a ver si podemos ayudarte.

Valor!
Responder Con Cita
  #30  
Antiguo 16-12-2010
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 21
Toni Va por buen camino
Finalmente parece que es lo que comenta el compañero Estifmauin, con el tratamiento de las transacciones dentro de los procedimientos almacenados.
Y mas en concreto con los procedimientos que realizan muchas actuliazaciones e inserciones como es mi caso. Estos generan mucha basura y engordan la base de datos.

Por el momento lo he podido solventar dignamente forzando la recoleccion de basura 2 veces al dia y por cierto con todos los usuario desconectado sino no lo hace correctamente. Mediante la utilidad de Firebird 'gfix -sweep'

En cuanto tenga algo de tiempo quiero migrarlo todo a FB 2.5, pero empezare con otra aplicación menos critica en la que me pueda permitir algunos fallos.
__________________
Saludos,

Bitman
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
rendimiento de PHP Ñuño Martínez PHP 1 20-09-2006 06:29:55
Problema grave de rendimiento ACK Firebird e Interbase 13 12-09-2005 17:10:44
¿ Cúal es el Rendimiento ? sierraja Firebird e Interbase 7 12-09-2005 15:37:44
Rendimiento TStringList Delphius Varios 7 13-06-2005 07:16:46
rendimiento carlomagno Firebird e Interbase 14 06-07-2004 17:05:13


La franja horaria es GMT +2. Ahora son las 17:11:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi