![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Hola.
Yo te recomendaría que definas una sola transacción y que la controles manualmente (la inicies y la finalices tú, en lugar de dejar que se haga implícitamente). Cita:
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
#2
|
|||
|
|||
|
Hola,
He probado a ir aislando los problemas y finalmente lo que me engorda la base de datos es la ejecuccion de un procedimiento almacenado que realiza calculos sobre tablas de forma 'masiva'. Algo similiar a esto pero 5 veces con diferentes tablas. Código:
for select "Campo1", "Campo2" from "Tabla1"
where "Campo5"=:P_PARAM and "Campo5"<>'F' group by "Campo1", "Campo2"
into :P_PARAM2, :P_PARAM3
do
begin
update "Tabla2" U set "Campo6"='A'
where U."Campo1"=:P_PARAM and U."Campo2"=:P_PARAM2 and U."Campo3" = :P_PARAM;
end
Incluso si lo ejecuto desde el IBManager me engorda la base de datos. Aunque lo que realmente me importa no es el tamaño de base de datos, sino que por algun motivo este engorde afecta al 'rendimiento brutalmente'. Tambien he probado a realizar el cambio de paginado que me comentaba Casimiro, pero al realizar el cambio con la nueva base de datos con el tamañp de paginado a 8192, me empezo a realizar unos extraños (cambiar masivamente el estado de diferentes documentos) y tuve que recuperar la copia de seguridad que habia realizado justo antes. La verdad que no le pude encontrar otra explicacion a la incidencia. No se si tenia que haber cerrado el servicio de FB al realizar el cambio de base de datos. Muchas gracias por las aportaciones.
__________________
Saludos, Bitman Última edición por Toni fecha: 22-11-2010 a las 15:51:52. |
|
#3
|
||||
|
||||
|
Hola Toni.
¿ Cuantos registros hay involucrados en ese procedimiento almacenado ?. Si la Base de Datos crece exageradamente, es que se están modificando de golpe una cantidad desorbitada de registros, lo cual ocurre lógicamente en una única transacción con lo que crece la base de datos por el versionado de esos registros (y también explica la caída de rendimiento). ¿ Estás seguro que no hay triggers enmedio que te están forzando la actualización inesperada de más registros en otras tablas ?. Será mejor que revises el código para ver si en ese procedimiento almacenado no estás haciendo muchísimas más actualizaciones de las necesarias.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
#4
|
|||
|
|||
|
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.
__________________
Saludos, Bitman |
|
#5
|
||||
|
||||
|
Habría que ver cómo es ese procedimiento. Tendrías que ver si puedes aplicar esta idea a tu procedimiento:
|
|
#6
|
|||
|
|||
|
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 |
|
#7
|
||||
|
||||
|
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! |
|
#8
|
||||
|
||||
|
Hola.
Cita:
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). |
|
#9
|
||||
|
||||
|
Cita:
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. |
|
#10
|
||||
|
||||
|
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.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|