Eliminacion de registros y tamaño archivos en disco


([N1] Spicer) #1

Amigos,

Tengo unas tablas que residen en disco, cuyos registros quiero eliminar periódicamente para que los archivos en disco no crezcan demasiado. No es posible tener estas tablas en memoria, por varios motivos que no vienen al caso.

El punto es que hice un proceso simple, del tipo Cargar Lista / Recorrer lista eliminando dichas / Regenerar área de datos de la tabla… y resulta que el archivo en disco sigue teniendo el mismo tamaño…! y verifiqué que los registros efectivamente desaparecieron, pues la tabla ahora está vacía.

Para mi es mas o menos lógico que al eliminar los registros, el archivo en disco debiera disminuir su tamaño… ¿qué estoy haciendo mal?
Gracias


([N1] wikan) #2

No estás haciendo nada mal, es el comportamiento normal.
Si lo ves con el DataClient verás que el espacio ocupado por el registro sigue existiendo y será ocupado posteriormente por un registro nuevo.

Dependiendo de la tabla podrás hacer una regeneración del área de datos.


([N1] Spicer) #3

Estimado Wikan, Muchas gracias por la respuesta. No dispongo de DataClient (¡estamos trabajando para eso!), pero supongo que habrán tenido sus motivos para hacerlo de esta manera

Agradecido de la aclaración

Atte,


([N3] pacosatu) #4

Hola Spicer.

Creo que con “Regenerar área de datos” sí se elimina físicamente el espacio ocupado por los registros en el fichero .dat. No así en el fichero contenedor .cnd que irá creciendo irremediablemente con el tiempo.

No hay solución, de momento, a la compactación de las bases de datos en Velneo.

Te copio aquí un hilo del año 2014 …
Conclusiones al tema del fichero Contenedor de campos Objeto CND:
– No hay utilidad nativa (ni se espera que haya) para la compactación de los ficheros.
– Procedimiento para la compactación a pedal.
1-Duplicar tabla en Diseño
2-Prohibir la entrada a los Usuarios
3-Traspasar los datos de una tabla a la otra (me miraré los Tubos)
4-Parar el servidor
5-Renombrar la nueva Tabla sobreescribiendo la original
6-Quitar del proyecto la tabla duplicada
7-Poner en marcha de nuevo
– El contenido de los campos Objeto no se fragmenta y por lo tanto siempre habrá huecos no utilizados.
– El comando “Crear copia de ficha en memoria” NO DUPLICA la parte del contenedor CND, solo duplica los campos de la tabla dat. (ver la info siguiente).
– Los campos Objeto que se modifican, aunque solo sea añadir una palabra de 3 letras, o incluso quitar un punto, obligan a la base de datos a crear un nuevo puntero y duplicar de nuevo el contenido del campo Objeto en el fichero CND.
Así que teniendo esto en cuenta, vuestros ficheros CND pueden crecer rápidamente en aquellas aplicaciones donde vaya a existir mucha edición de campos Objeto.

Si tenéis alguna técnica de optimizar los ficheros CND, pues la compartís.

Saludos
Paco Satué


([N1] Spicer) #5

Paco,

Hice unas pruebas, con “Regenerar area de datos” y el tamaño del archivo .dat siguió exactamente igual, a pesar que la tabla quedó vacía (lo verifiqué exportando su contenido). No así con los indices (.idx), ya que al eliminar algunos que no estaba ocupando, el tamaño del archivo sí experimentó una reducción.

Sobre los archivos .cnd, hay una instruccion “Limpiar campo objeto”, de modo que quizá la alternativa sea crear un campo duplicado, traspasar los contenidos a este último, limpiar el campo original y volver a traspasar, aunque no he probado si eso efectivamente hace que el tamaño del archivo disminuya, si alguien puede realizar esta verificación, seremos varios los que agradezcamos.

A todo esto, el repentino interés en esto obedece a que mi servidor de producción cuenta con licencia Express, y como he aumentado el número de clientes, el límite de 256 Mb ya no aparece como tan lejano en el horizonte.

Saludos,


([N4] maserrano) #6

Para eliminar los registros de una tabla de datos una vez borrados los registros deberás crear un campo nuevo en la tabla y reiniciar la instancia.

Como el campo que acabas de crear no lo quieres para nada, lo eliminas y vuelves a reiniciar la instancia.

Con los .cnd el tema es más complejo

Saludos


([N3] pacosatu) #7

Hola maserrano.

Muy buena idea.
Forzar la recreación de la tabla cambiando su estructura.
Con la recreación se crea una nueva tabla en la que se copian solo los registros vivos.

No es necesario añadir un nuevo campo, con modificar por ejemplo la propiedad “Comentarios” de cualquier campo ya se desencadena un evento “Cambio de estructura” en el vServer.

Saludos
Paco Satué


([N1] Spicer) #8

Muy buena aportación, agradecido!