Dominar el rendimiento de PostgreSQL - Prácticas de WeWard para bases de datos eficientes

artículo escrito por

En el panorama tecnológico actual, en constante evolución y en el que el rendimiento es una prioridad absoluta, las bases de datos desempeñan un papel fundamental a la hora de garantizar experiencias de usuario fluidas y aplicaciones fiables.

En WeWard, donde cada milisegundo cuenta para mejorar la experiencia del usuario, nos embarcamos en un ambicioso viaje para transformar PostgreSQL en un motor de rendimiento excepcional. Este artículo explora los retos a los que nos enfrentamos, las soluciones implementadas y las mejores prácticas que nos permitieron optimizar PostgreSQL de forma significativa.

🎯 ¿Por qué es crucial optimizar la base de datos?

En un mundo en el que los usuarios esperan tiempos de respuesta instantáneos, las bases de datos lentas pueden provocar frustración y pérdida de oportunidades. En WeWard, este reto se traduce en millones de transacciones diarias y consultas complejas que requieren un rendimiento impecable. Nuestros retos incluían consultas lentas, carga excesiva y una arquitectura que requería una mayor escalabilidad.

He aquí cómo superamos estos obstáculos.

⚙ Paso 1: Optimización de la consulta

La base de cualquier optimización PostgreSQL comienza con el análisis de consultas. Identificamos ineficiencias estudiando los planes de ejecución de las consultas.

Análisis del plan de ejecución

Utilizando EXPLICAR y ANALIZAR...obtuvimos una radiografía de nuestras consultas.

Ejemplo de consulta problemática:

SELECT level_customer.*
FROM level_customer
JOIN level ON level.id = level_customer.level_id
WHERE level_customer.customer_id = XXXXXXX
 AND level_customer.start_date <= '2024-05-07'::date
 AND level.version = 2
ORDER BY level_customer.start_date DESC, level.value DESC
LIMIT 1;

Problemas detectados:

  • Falta de un índice para gestionar eficazmente la clasificación.
  • Estrategia de unión subóptima elegida por el planificador.

Solución:Creación de índices:

CREATE INDEX idx_level_customer_customer_date_value
ON level_customer (customer_id, start_date DESC, level_id DESC);

Ajuste del planificador:Forzamos a PostgreSQL a utilizar Unión de bucles anidados en lugar del predeterminado Unión Hash para esta consulta específica.

Vistas materializadas:Para consultas complejas, las vistas materializadas reducen la sobrecarga de cálculo en cada ejecución, proporcionando un rendimiento notablemente estable.

⚖ Paso 2: Distribución de la carga con réplica.

Con millones de consultas diarias, adoptamos una arquitectura basada en réplicas para distribuir la carga.

Configuración de la arquitectura:

  • Nodo primario: Gestiona las operaciones de lectura y escritura, garantizando la coherencia de los datos.
  • Nodo réplica: Dedicado a operaciones de solo lectura, lo que reduce la carga del nodo primario y mejora los tiempos de respuesta de las consultas de lectura intensiva.

Ventajas:

  • Mejora del rendimiento: La descarga de las consultas de lectura a las réplicas reduce la latencia y aumenta el rendimiento.
  • Alta disponibilidad: En caso de fallo del nodo primario, se pueden promover réplicas, garantizando la continuidad del servicio.
  • Escalabilidad: Se pueden añadir múltiples nodos de réplica para escalar horizontalmente a medida que aumenta el tráfico.

Consideraciones técnicas:

  • Latencia de replicación: Puede producirse un ligero retraso entre los nodos primario y réplica.
  • Consistencia eventual: Las consultas de lectura en las réplicas pueden devolver datos ligeramente obsoletos.
  • Supervisión: La supervisión proactiva es esencial para garantizar una replicación fiable.

🗂 Paso 3: Gestión de tablas de gran tamaño con particiones

¿Por qué particionar?

Las tablas que contienen miles de millones de filas pueden ralentizar considerablemente las operaciones de lectura y escritura. El particionamiento divide una tabla en subconjuntos más pequeños, lo que mejora la eficacia de las consultas.

Herramienta: pg_partman

Ventajas:

  • Gestión automatizada de particiones: Gestiona la creación y eliminación de particiones en función de criterios predefinidos.
  • Mejora del rendimiento de las consultas: Las consultas se dirigen únicamente a las particiones relevantes.
  • Mantenimiento de datos históricos más sencillo: Simplifica el archivado y la purga sin alterar los datos actuales.

🚦 Paso 4: Estabilización de la conexión

Cada conexión PostgreSQL consume recursos del sistema. Para evitar la sobrecarga del servidor:

  • Límites de conexión: max_conexiones se ajustó en función del hardware disponible y de las necesidades de la aplicación.
  • Agrupación de conexiones: La reutilización de las conexiones existentes redujo la carga del servidor y mejoró la capacidad de respuesta de las aplicaciones.

Parámetros clave de memoria PostgreSQL:

  • buffers_compartidos: Controla la asignación de memoria para almacenar en caché los datos a los que se accede con frecuencia.
  • work_mem: Define la memoria para la clasificación y las tablas hash durante la ejecución de la consulta.

📈 Paso 5: Una arquitectura escalable con el lago de datos

Los datos críticos ("calientes") permanecen en PostgreSQL, mientras que los de acceso menos frecuente ("fríos") se transfieren a Amazon S3 o Google Cloud Storage. El análisis de los datos fríos se realiza mediante Google BigQuery.

Ventajas:

  • Escalabilidad: Capacidad de almacenamiento ilimitada en plataformas en la nube.
  • Rentabilidad: Reducción de los costes de almacenamiento de datos en frío.
  • Flexibilidad: Herramientas adecuadas para cada tipo de datos.

👁 Paso 6: Seguimiento y observabilidad

WeWard utiliza herramientas de supervisión avanzadas como:

  • Información sobre el desempeño de AWS: Visualización del rendimiento de la base de datos en tiempo real.
  • Supervisión del rendimiento de las aplicaciones (APM): Rastreo de transacciones de extremo a extremo.
  • Supervisión del rendimiento de la base de datos (DBM): Información sobre el rendimiento de las consultas.

Ventajas:

  • Detección rápida de problemas.
  • Optimización del rendimiento.

🏁 Conclusión: Una base sólida para el futuro

Al combinar una rigurosa optimización de las consultas, una gestión inteligente de los recursos y arquitecturas modernas, PostgreSQL se ha convertido en un aliado clave para WeWard. Estas soluciones son aplicables a cualquier organización que pretenda maximizar el potencial de las bases de datos.

💬 ¿Cuáles son tus estrategias para optimizar PostgreSQL? ¡Comparte tus experiencias y únete a la conversación!

👉 Explora nuestra aplicación móvil: WeWard.

flecha-izquierda
Artículo anterior
Artículo siguiente
flecha-derecha

También te puede interesar

Sus rutas a pie
/
21 de febrero de 2025

Paseo matinal por el Sena en Conflans-Sainte-Honorine

Da Fonseca, usuario de WeWard, nos lleva a dar un delicioso paseo matinal junto al Sena en Conflans-Sainte-Honorine, una encantadora localidad situada a las afueras de París.

écrit par
La Comunidad WeWard
/
¡Comparte tu camino!
Sus rutas a pie
/
16 de febrero de 2025

Ruston Way: Un paseo panorámico frente al mar en Tacoma 🌊

Ruston Way, en Tacoma, es un impresionante paseo marítimo que combina las serenas vistas de la bahía de Commencement con la vibrante energía de la ciudad.

écrit par
La Comunidad WeWard
/
¡Comparte tu camino!
Sus rutas a pie
/
14 de febrero de 2025

Un paseo musical matinal por Cognac 🎶

Angie, paseante empedernida y amante de la música, nos lleva en un viaje escénico y rítmico por las encantadoras calles de Cognac.

écrit par
La Comunidad WeWard
/
¡Comparte tu camino!