Sólo la naturaleza de la agregación de la ZODB hace que la base de datos crezca continuamente, incluso si sólo editar la información existente y no añade ningún nuevo contenido. Para asegurarse de que el disco duro de su servidor no se llene rápidamente, usted necesita compactar la ZODB automática y regularmente.
La ZODB almacena cada copia de todos los objetos modificados en una transacción. Esto puede causar que la base de datos crezca bastante grande. En realidad no hay ninguna reducción al tamaño de una base de datos grande aparte de tener un archivo grande de manejar. Tiene poca o ninguna influencia en el rendimiento del sitio. No hay límite para el tamaño de este archivo, sólo lo que el sistema de archivos puede manejar. Los tamaños aproximados a 10gb no son infrecuentes.
Como administrador del sistema tendrá que gestionar que un archivo para asegurarse de que cosas como las copias de seguridad o copias del sistema no se vuelvan difíciles de manejar como el archivo creciente.
Por esta razón se recomienda hacer una compactar (pack) de la base de datos normalmente. Esto elimina todas las copias antiguas en la base de datos. Si está ejecutando una copia de seguridad de forma regularmente (ver copias de seguridad), entonces usted debe tener todos los registros de cada cambio.
Los beneficios son los siguientes:
Las tareas programadas de compactar (pack) la base de datos se pueden configurar de forma predeterminada, eliminando de los datos históricos no versionados en el sistema. Si usted está usando la función de control de versiones de Plone (nuevo en Plone 3.x), a continuación, el compactar (pack) será sin eliminar el contenido versionado.
Para esto utilizaremos configuraciones para programar tareas con crontab para el compactación de la ZODB.
A continuación se describen dos ejemplos útiles:
Si tu instalación es una Zope standalone y estas usando zc.buildout debes crearte un script que cada cierto tiempo realice tareas de compactar la ZODB, a continuación un ejemplo de configuración:
# Pack once a month
[zodbpack]
recipe = collective.recipe.template
output = ${buildout:bin-directory}/zodbpack
mode = 600
input = inline:
wget -O/dev/null -q --post-data='days:float=10' --user=admin --password=admin \
http://localhost:8080/Control_Panel/Database/main/manage_pack
# Pack once a month
[packups]
recipe = z3c.recipe.usercrontab
times = 0 0 1 * *
command = ${buildout:bin-directory}/zodbpack
Truco
En el comando wget contiene dos parámetros --user y --password deben tener asignado el nombre del usuario y contraseña Administrador Zope de su instalación.
El parámetro --post-data define los días para el cual compactara la ZODB.
En el caso de que use puntos de montajes debe indicar la ruta en la dirección URL del comando wget.
Si tu instalación es un ZEO Cluster y usando zc.buildout puede usar el script llamado zeopack que ofrece esta instalación para que cada cierto tiempo realice tareas de compactar la ZODB, a continuación un ejemplo de configuración:
Para instalaciones Plone 4.3 usando configuraciones buildout bajo Linux se encuentra el programa zeopack.py en el directorio:
Nota
Esto puede variar entre versiones de Plone y Zope.
Truco
Un script zeopack sera generado para usted en el directorio bin del proyecto buildout, a menos que usted cambien eso con la opción zeopack-script-name, en este caso el script sera llamado como el nombre que usted especifique en este parámetro.
[backup]
recipe = collective.recipe.backup
# Backup daily
[backups]
recipe = z3c.recipe.usercrontab
times = 0 0 * * *
command = ${buildout:bin-directory}/backup
# Pack once a month
[packups]
recipe = z3c.recipe.usercrontab
times = 0 0 1 * *
command = ${buildout:bin-directory}/zeopack
Truco
Si le gustaría usar este script para compactar un punto de montaje diferente, usted necesitara especificar el parámetro -S nombre_punto_montaje. Usted puede especificar la opción -B para no usar el directorio por defecto blob.
Existe otra forma de realizar tareas de compactar la ZODB automáticamente sin usar tareas crontab.
Para esto agregue el producto Products.ClockServer en su sección eggs en su archivo buildout.cfg.
Además agregue la siguiente configuración en la sección instance en su archivo buildout.cfg como se muestra a continuación:
zope-conf-additional =
<clock-server>
method /pack_it_all
period 86400
user admin
password SU-CONTRASEÑA
host localhost
</clock-server>
Ejecute de nuevo el buildout y luego inicie el servidor Zope, entonces diríjase al raíz de Zope desde la ZMI, del lado derecha elija de la lista de selección la opción Script (Python) y haga clic en el botón Add, como se ilustra a continuación:
Entonces en el campo Id coloque pack_it_all, luego haga clic en el botón Add and Edit, como se ilustra a continuación:
Seguidamente agregue el siguiente contenido al script:
dbs = context.Control_Panel.Database
names = dbs.getDatabaseNames()
for name in names:
if name != 'temporary':
dbs[name].manage_pack(days=3)
print "packed database %s" % name
return printed
Para guardar esta modificación haga clic al botón Save Changes, para probar el funcionamiento del script puede hacer clic en la pestaña Test para verificar su funcionamiento, de igual forma con las configuraciones del producto Products.ClockServer descrita en la declarativa zope-conf-additional dentro de su sección instance se programa la tarea la cual compactara la ZODB cada tres (3) días.
Para descargar el código fuente de este ejemplo ejecute el siguiente comando:
$ git clone https://github.com/Covantec/buildout.zodb.plone4.git
El código fuente de este archivo esta hospedado en GitHub. Todos pueden actualizar y corregir errores en este documento con unos clic - sin necesidad de descargar.
Para mas información básica acerca de como actualizar este manual y referencia a sintaxis Sphinx, por favor consulte la guía Escribiendo y actualizando el manual.