Utilizar diferentes formatos de Backup: Plain, Directory, Custom

Hola a todos. Quisiéramos saber su opinión sobre que tipo de formato usar a la hora de hacer backups.

Estuvimos analizando y:

Los backups en formato Plain ocupan mucho espacio, no obstante si se comprimen ocupan poco espacio.
Los backups en formato Custom ocupan menos espacio.
Los backups en formato Directory son similares a Custom solo que dentro de un directorio varios archivos.

El formato Directory permite hacer dump y restore con la opción -j para establecer tareas en paralelo reduciendo el tiempo de creación de backup.
El formato Custom solo permite usar la opción -j con restore.
El formato Plain no permite usar tareas en paralelo.

Nota: Directory fue muy rápido en cuando al dump 25 minutos para 31GB de base, comprimiendo a 5.1GB, no obstante, el restore tardo mucho, más de hora, pero como estuvo utilizándose el server para otras cuestiones esta referencia no debería tomarse en cuenta.

Ejemplo de dump: Base de 700MB

Plain: 396MB
Custom: 44MB

Tiempos en Plain y Custom

Plain dump: 40segundos
Plain restore: 237segundos

Custom dump: 52segundos
Custom restore: 168segundos

En Custom se utilizo la opción -j6, con -j10 dio como resultado 140segundos.

queda por analizar ventajas y desventajas entre el numero asociado a -j y los núcleos de procesamiento del servidor, hilos, etc.

Más allá de estas cuestiones, nos preocupa el tener problemas a futuro con un u otro formato.

A pesar de las ventajas de Custom y la opción -jX. ¿Es recomendable utilizar Custom?

!Desde ya muchas gracias¡

Hola
muy bueno el analisis!
Una diferencia para agregar entre plain y custom. El plain te deja un archivo resultante que es un txt con todo el SQL para re-crear la base de datos. Por lo tanto, si tuvieras que extrar alguna tabla, o incluso algunos registros es posible hacerlo. El formato custom, genera un comprimido que no se puede editar.

Otro elemento mas, ambos (plain y custom) son una foto de la base a un instante dado. Todas las transacciones que ocurren posteriormente no estan backupeadas. Si se usa la modalidad de backup PITR (o tambien conocido como backup de WALs) podes restaurar la base y las transacciones posteriores. Incluso definiendo un timestamp limite (Point In Time Recovery)

saludos
Ignacio

Hola Ignacio, gracias por responder.

Utilizando el comando “pg_restore base.custom > base.plain” transforma el formato custom a plain lo que permite extraer tablas, datos, modificar, etc., lo que nos lleva a inclinarnos por la utilización de custom y sus opciones de paralelismo.

Respecto a WALs, realizamos pruebas de replicación con la opción REPLICA (postgresql 9.6) con un server principal y uno o dos esclavos en modo asíncrono. Seguimos analizando el espacio utilizado por los WALs (mucho espacio al realizar, por ejemplo, actualización de una base completa.), cuando y como eliminarlos de forma segura y de forma automática. También existen varios mensajes en los logs que son un poco confusos, al arrancar el sistema (esclavos) informa que no es consistente o que falta X archivo WAL (aún teniendo sincronizadas las carpetas WALs entre master y slave), pero el siguiente mensaje es que el sistema se encuentra en modo consistente. No encontramos mucha información respecto a la correcta implementación de la opción REPLICA.

En cuanto a la opción PITR, analizaremos su utilización. ¿Tienes algún link con tutorial para su correcta implementación?

Además de la opción REPLICA, utilizamos backups en formato custom o plain a modo “Histórico”, está es la cuestión principal del análisis de los formatos de backups. Muchas veces nos solicitan que restauremos una base de X meses anteriores y algunas bases pesan mas de 30GB.

Sugerencias y opiniones son bienvenidas.

Hola, excelente análisis!
Una desventaja del binario es que si se “rompe” el archivo se pierde todo. El Plano es mas facil de recuperar (o parte del mismo). Otra cosa a tener en cuenta es que el binario siempre esta asociado a una versión del cliente (pg_restore). El plano es mas fácil de manipular e ignorar versiones (mas que nada cuando se quiere levantar un backup viejo).
Saludos, Nico