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
  #1  
Antiguo 17-07-2007
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
al hacer update la base de datos crece sin parar

Hola

tengo el siguiente problema con firebird

tengo una aplicación , la cual monitoriza estados de equipos (unos 100) , estos equipos cambian sus estado constantemente (y muy rapidamente) . la aplicación lo que hace es registrar estos cambios en la base de datos actualizando sus campo de estados en una tabla llamada equipos.

Pero la base de datos , crece y crece sin parar , simplemente haciendo UPDATE EQUIPOS SET SET ESTADO1=XXX ,ESTADO2=XXX ,ESTADO3=XXX WHERE EQUIPOS.IDEQUIPO=XXX.

el problema es que al cabo de una semana , la base de datos ha crecido considerablemente (unos 300mb), y no tiene porque , ya que tan solo estoy actualizando datos y no insertando.
las transacciones las inicio y finalizo correctamente (uso mdolib) , he probado con firebird 1.5 y firebird 2.0 , y el resultado es el mismo , la base de datos sigue creciendo sin parar.
La unica forma que tengo para poder reducir el tamaño es haciendo un backup y un restore , pero es algo que no puedo hacer , ya que es un sistema critico el cual no puedo parar a mi antojo.

es normal que la base de datos crezca al hacer update ? , alguna solucion ? , o me he equivocado al elejir firebird como base de datos ?

saludos
Responder Con Cita
  #2  
Antiguo 17-07-2007
mensana mensana is offline
Miembro
 
Registrado: sep 2006
Posts: 69
Poder: 18
mensana Va por buen camino
Cita:
Empezado por tefots
... la base de datos , crece y crece sin parar , simplemente haciendo UPDATE EQUIPOS SET SET ESTADO1=XXX ,ESTADO2=XXX ,ESTADO3=XXX WHERE EQUIPOS.IDEQUIPO=XXX.

es normal que la base de datos crezca al hacer update ?
Revisa la información que devuelve gstat (para Interbase)
* Oldest transaction
* Oldest active
* Oldest snapshot
* Next transaction
* Sweep interval

Comprueba si haciendo un sweep la BBDD ya no crece.
Responder Con Cita
  #3  
Antiguo 17-07-2007
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
devuelve esto



Database "C:\BD\Acpas.fdb"

Database header page information:
Flags 0
Checksum 12345
Generation 215744
Page size 4096
ODS version 10.1
Oldest transaction 54
Oldest active 55
Oldest snapshot 47
Next transaction 215738
Bumped transaction 1
Sequence number 0
Next attachment ID 0
Implementation ID 16
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Jul 3, 2007 11:25:41
Attributes force write

Variable header data:
Sweep interval: 20000
*END*



significa que hay transacciones no finalizadas ??.

saludos.
Responder Con Cita
  #4  
Antiguo 17-07-2007
mensana mensana is offline
Miembro
 
Registrado: sep 2006
Posts: 69
Poder: 18
mensana Va por buen camino
Cita:
Empezado por tefots
Database header page information:
Oldest transaction 54
Oldest active 55
Oldest snapshot 47
Next transaction 215738
Sweep interval: 20000

significa que hay transacciones no finalizadas ??.
(215738 - 55) = Más de 200.000 transacciones pendientes !!!

Revisa tu aplicación, prueba también con "Interbase Performance Monitor" en http://blogs.teamb.com/craigstuntz/a...ceMonitor.aspx
Responder Con Cita
  #5  
Antiguo 17-07-2007
mensana mensana is offline
Miembro
 
Registrado: sep 2006
Posts: 69
Poder: 18
mensana Va por buen camino
Bueno ... más que "pendientes" son transacciones que han dejado registros que ya no son válidos pero por "lo que sea" no se han podido eliminar con un sweep
Responder Con Cita
  #6  
Antiguo 18-07-2007
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
voy a probar con el performance monitor ese.
pero he revisado la aplicación , y no hay nada 'raro' , tan solo hago

try
query1.execsql
Query1.transaction.commitretaining;
Except
queyr1.transaction.rollbackretainig;
end;

y los querys son simplemente updates.
deberia hacer commit , en vez de commitretaining ?.
por eso no hace sweeep automaticamente ?.
la base de datos no tiene triggers ni procedimientos almacenados , simplemente tablas con sus primarykeys e indices.

he probado ha forzar hacerler un sweep , y nada , las transacciones siguen estando ahi pendientes .
el verdadero problema de todo esto , es que ademas de que la bd crece y crece , llega un momento que debe tener tantas transacciones por ahi perdidas que que la bd se espatarra , y el fbserver se pone al 100%.

saludos.

Última edición por tefots fecha: 18-07-2007 a las 09:52:23.
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
como hacer que un tmediaplayer se reproduzca sin parar Jan_polero OOP 15 10-10-2007 00:40:56
Mi base de datos crece sin motivo aog Firebird e Interbase 5 12-02-2007 17:55:39
SQL UPDATE entre 2 tablas de Diferente base de datos Luis Alberto SQL 1 11-11-2005 04:52:18
Problema al hacer un update en una tabla con datos de otra Iseberiano SQL 3 08-06-2005 12:32:14
Update de base de datos brandolin Firebird e Interbase 8 01-03-2005 23:45:48


La franja horaria es GMT +2. Ahora son las 04:57: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