Domando al Gigante

Una guía visual para particionar una tabla de 11TB en PostgreSQL usando un enfoque basado en scripts.

El Desafío: La Tabla Monolítica

11 TB

De Datos en una Sola Tabla

`dapta_logs_prod.logs_transacciones_api`

¿Por qué es un problema?

  • 🐌

    Consultas Lentas

    Los escaneos secuenciales sobre terabytes de datos degradan el rendimiento drásticamente.

  • 🔧

    Mantenimiento Doloroso

    Operaciones como `VACUUM` y `REINDEX` se vuelven lentas, costosas y bloqueantes.

  • 🗑️

    Gestión de Datos Ineficiente

    Archivar o eliminar datos antiguos requiere operaciones masivas (`DELETE`) que son lentas y generan fragmentación.

La Solución: Dividir y Conquistar

El particionamiento declarativo de PostgreSQL nos permite dividir una tabla grande en piezas más pequeñas y manejables (particiones) basadas en el valor de una columna, como una fecha.

🗄️

Tabla Monolítica (11 TB)

Jul '23

Ago '23

Sep '23

... etc.

El Rol del Script: Un Generador de Planes

El script de Bash no ejecuta la migración directamente. Su función es actuar como un generador de confianza que, basándose en tu configuración, produce una secuencia de comandos SQL listos para ser ejecutados, minimizando errores manuales.

1. Configuración del Script

(Host, Usuario, Tabla, Fechas)

2. Ejecución del Script Bash

(./generate_partition_sql.sh)

3. Salida: Plan de Migración

(Archivo con comandos psql)

El Viaje de la Migración: Un Proceso en Fases

Fase 1: Preparación (Pre-Downtime)

Antes de detener cualquier servicio, se realizan las verificaciones y preparaciones críticas para asegurar una migración sin sorpresas.

  • 💿Verificar espacio en disco.
  • ⚙️Ajustar `work_mem` de la sesión.
  • 💾Realizar un backup completo de la base de datos.

Fase 2: Ejecución (Downtime Requerido)

Esta es la fase crítica donde se detienen las aplicaciones y se ejecutan los comandos SQL generados para transformar la tabla.

  1. Renombrar tabla original a `_old_backup`.
  2. Crear tabla maestra particionada.
  3. Crear todas las particiones hijas mensuales.
  4. Copiar 11TB de datos a la nueva estructura.
  5. Crear índices en la tabla particionada.
  6. Renombrar la nueva tabla al nombre original.

Fase 3: Post-Migración y Gestión

Se restauran los servicios y comienza la nueva vida de la tabla, con un mantenimiento simplificado y automatizado.

  • 🚀Reiniciar aplicaciones.
  • Verificar funcionalidad y rendimiento.
  • 🤖Automatizar creación de futuras particiones.
  • 📦Archivar o eliminar particiones antiguas (`DETACH`/`DROP`).

La Recompensa: Beneficios del Particionamiento

Más allá de resolver el problema inmediato, el particionamiento desbloquea mejoras significativas en rendimiento y gestión, haciendo el sistema más robusto y escalable.

Mejora en Velocidad de Consulta

Al filtrar por fecha, PostgreSQL escanea solo las particiones relevantes en lugar de la tabla entera de 11TB. (Datos ilustrativos).

Reducción del Tiempo de Mantenimiento

Archivar o eliminar datos antiguos ahora es una operación de metadatos (`DROP TABLE`) casi instantánea en lugar de un `DELETE` masivo. (Datos ilustrativos).