| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
jose Ens


Registrado: 12 Jul 2004Mensajes: 29Ubicación: La Rioja
|
Publicado: Dom 06 Nov, 2005 8:21 pm Asunto: pack en Firebird |
|
|
Me he fijado que al eliminar registros de las tablas en Firebird no los elimina físicamente, o sea, ´sólo marca los registros como eliminados.
¿Existe alguna forma de realizar el pack de dbase, o el compactar de Access para que los registros se borren realmente?
La causa es que tengo una tabla en la que inserto y borro constantemente datos (los tickets de una TPV).
Con dbase, realizaba el pack a través de código y la tabla se quedaba casi vacía físicamente. Sin realizar ese pack el acceso a esa tabla se ralentizaba cada vez más.
Estoy hablando de unos 500000 registros anuales marcados como eliminados, lo cual no se si en Firebird ralentizaría progresivamente el acceso a dicha tabla.
Graciaaaaaas.  _________________ LA INSPIRACIÓN EXISTE, PERO TIENE QUE ENCONTRARTE TRABAJANDO |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 07 Nov, 2005 3:41 pm Asunto: |
|
|
Posiblemente no estas haciendo el COMMIT en la transación.
¿Con que componentes te conectas a la BD?
Saludos. _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Mar 08 Nov, 2005 1:04 am Asunto: |
|
|
Me conecto con un IBDatabase, un IBTransaction, y después a las tablas con un IBDataSet y IBDataSource.
He seguido los pasos indicados en los tutoriales de www.firebird.com.mx
En el IBTransaction, la propiedad DefaultAction está en TACommit.
Alguna sugerencia??
Gracias por el interés |
|
| Volver arriba |
|
 |
jose Ens


Registrado: 12 Jul 2004Mensajes: 29Ubicación: La Rioja
|
Publicado: Mar 08 Nov, 2005 1:05 am Asunto: |
|
|
El invitado de antes era yo. Se me olvidó loguearme.  _________________ LA INSPIRACIÓN EXISTE, PERO TIENE QUE ENCONTRARTE TRABAJANDO |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Mar 08 Nov, 2005 4:21 pm Asunto: |
|
|
Bien, hablar de las transacciones es un poco extenso, pero de manera breve te explico que debes terminar tus transacciones ya sea confirmando y haciendo permanentes todos los cambios (Commit), o descartando cualquier modificación realizada (RollBack).
Tienes dos opciones, con dos variantes en cada opción.
Hacer un Commit() o CommitRetaining() y RollBack() o RollBackRetaining()
Debes especificar en algun momento ya sea un Commit o RollBack.
| Código: |
// Almacenar permanente los cambios realizados en el dataset
// asociado a la transacción.
IBTransaction1->Commit();
|
| Código: |
// Cancelar los cambios realizados en el dataset
// asociado a la transacción.
IBTransaction1->RollBack();
|
Te recomiendo checar la ayuda para que te quede claro las dos variantes en cada una de las opciones.
Te dejo esta liga donde puedes leer mas acerca de las transacciones.
http://www.terra.es/personal2/jrodriguezpe/kinobi/descargas/transacciones-0.2.6.pdf
Saludos. _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
jose Ens


Registrado: 12 Jul 2004Mensajes: 29Ubicación: La Rioja
|
Publicado: Sab 12 Nov, 2005 5:32 pm Asunto: |
|
|
Gracias Buildero por el documento, es muy interesante, pero tampoco funciona.
Realizo el commit y el resultado es el mismo.
En realidad los registros se borran de la tabla (en las consultas ya no aparecen más), pero el fichero físico en el disco duro sigue teniendo el mismo tamaño. Por lo tanto los registros se están "marcando" como eliminados en Firebird, pero no se eliminan del archivo, y esto puede ser un inconveniente por el tamaño creciente que va a adquirir la base de datos así como (creo) en la velocidad de acceso con miles de registros. Se puede dar el caso de que una tabla tenga 25 registros, y tenga 10000 marcados como eliminados, por ejemplo.
Esto ocurre también en Access, dbase, etc.. pero en ellos existe la opción de compactar las tablas, de forma que los registros son eliminados físicamente del disco duro, reduciéndose el tamaño del archivo.
Gracias por todo, y si se os ocurre algo......  _________________ LA INSPIRACIÓN EXISTE, PERO TIENE QUE ENCONTRARTE TRABAJANDO |
|
| Volver arriba |
|
 |
Crandel Lt


Registrado: 31 May 2005Mensajes: 94Ubicación: Argentina
|
Publicado: Dom 13 Nov, 2005 5:26 am Asunto: |
|
|
| jose escribió: | | Los registros se borran de la tabla (en las consultas ya no aparecen más), pero el fichero físico en el disco duro sigue teniendo el mismo tamaño. |
Hola Jose, no te preocupes por este tema, Firebird borra los registros realemente como comprobaste pero no realiza el Pack como vos queres.
Para volver al tamaño minimo la unica forma que conozco es hacer un backup y restaurarla.
Pero igualmente no lo necesitas.
Por que no? porque Firebird una vez que borra un registro este espacio puede ser utilizado por un nuevo registro que creas por ende el agregar y borrar registros no aumenta el tamaño de la base de datos como te pasaba anteriormente.
Esto en realidad es mucho más eficiente dado que cuando se agrega un nuevo registro se debe agrandar el tamaño de la DB y en tu caso no es necesario porque el lugar ya esta reservado por lo que se hace más rápido.
Espero haber sido claro y Suerte. _________________ Crandel
"hay 10 tipos de personas, las que ven en binario y las que no"
Angel Zeitoune - Artículo: Generación de eventos en C++Builder |
|
| Volver arriba |
|
 |
jose Ens


Registrado: 12 Jul 2004Mensajes: 29Ubicación: La Rioja
|
Publicado: Dom 13 Nov, 2005 7:59 pm Asunto: |
|
|
Eres grande, Crandel.
Si eso es así (cosa que no dudo en absoluto), en realidad mi problema inicial no existe.
Tenía un problema y lo hiciste desaparecer. ¿Eres mago?
Gracias a todoooooooos _________________ LA INSPIRACIÓN EXISTE, PERO TIENE QUE ENCONTRARTE TRABAJANDO |
|
| Volver arriba |
|
 |
|