Cómo Realizar un Benchmark de PostgreSQL para un Rendimiento Óptimo

A medida que la adopción de PostgreSQL crece, los administradores de bases de datos (DBAs) y los desarrolladores a menudo necesitan evaluar su rendimiento para asegurar que sus aplicaciones funcionen eficientemente bajo diferentes cargas de trabajo. El benchmarking de rendimiento es un proceso crítico que mide qué tan bien PostgreSQL maneja cargas variables, ayudando a identificar cuellos de botella y áreas de optimización. Este artículo explora herramientas, métricas y escenarios de prueba para ayudarte a evaluar PostgreSQL como un profesional.

¿Por qué evaluar PostgreSQL?

La evaluación permite:

  1. Medir el rendimiento y la latencia de tu base de datos bajo cargas de trabajo específicas.
  2. Identificar cuellos de botella en hardware o configuración.
  3. Comparar el impacto de optimizaciones como cambios en índices o reescrituras de consultas.
  4. Simular escenarios del mundo real como alta actividad de usuarios concurrentes o escrituras masivas de datos.

Métricas clave a seguir

Al evaluar PostgreSQL, enfócate en estas métricas:

  • TPS (Transacciones Por Segundo): Mide cuántas transacciones completa la base de datos en un segundo.
  • IOPS (Operaciones de Entrada/Salida Por Segundo): Rastrea la actividad del disco.
  • Latencia: Mide el tiempo que se tarda en ejecutar consultas, lo que impacta en la experiencia del usuario.
  • Utilización de Recursos: Rastrea el uso de CPU, memoria y disco durante la evaluación.

Herramientas para el Benchmarking de PostgreSQL

1. pgbench

¿Qué es pgbench?

pgbench es una herramienta de prueba de rendimiento integrada en PostgreSQL. Simula clientes concurrentes ejecutando transacciones y mide el rendimiento de la base de datos.

Instalación

Viene incluida en las instalaciones de PostgreSQL. Para verificar, ejecute:

Shell

 

bash
pgbench --version

Primeros Pasos

1. Inicialice una base de datos de prueba:

Shell

 

bash
pgbench -i -s 50 mydb

Aquí, -s establece el factor de escala, que determina el tamaño del conjunto de datos.

2. Ejecute una prueba de rendimiento simple:

Shell

 

bash
pgbench -c 10 -j 2 -T 60 mydb

  • -c 10: Número de conexiones de clientes.
  • -j 2: Número de hilos.
  • -T 60: Duración de la prueba en segundos.

Salida de ejemplo:

YAML

 

transaction type: TPC-B (sort of)
scaling factor: 50
number of clients: 10
number of threads: 2
duration: 60 s
tps = 1420.123 (excluding connections establishing)

2. Sysbench

¿Por qué usar Sysbench?

Sysbench es una herramienta de prueba versátil para bases de datos y sistemas. Ofrece más flexibilidad que pgbench para cargas de trabajo personalizadas.

Instalación

Instale Sysbench utilizando el siguiente comando:

Shell

 

bash
sudo apt-get install sysbench

Primeros Pasos

1. Prepare la prueba de rendimiento:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --tables=10 --table-size=1000000 \
  oltp_read_write prepare

2. Ejecute la prueba de rendimiento:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --threads=4 \
  --time=60 oltp_read_write run

3. pg_stat_statements

¿Qué es pg_stat_statements?

Una extensión de PostgreSQL que rastrea el rendimiento de las consultas y las estadísticas de ejecución. Aunque no simula cargas de trabajo, ayuda a analizar consultas lentas durante las pruebas de rendimiento.

Configuración

1. Habilite la extensión en postgresql.conf:

Plain Text

 

shared_preload_libraries = 'pg_stat_statements'

2. Recargue la configuración y cree la extensión:

SQL

 

CREATE EXTENSION pg_stat_statements;

Uso

Ejecute la siguiente consulta para identificar declaraciones de larga duración:

SQL

 

SELECT query, total_exec_time, calls
FROM pg_stat_statements
ORDER BY total_exec_time DESC;

Escenarios de Pruebas de Rendimiento

A continuación se muestra una representación visual de los resultados de las pruebas de rendimiento para tres escenarios: cargas de trabajo intensivas en lectura, cargas de trabajo intensivas en escritura y cargas de trabajo mixtas. El diagrama de transacciones por segundo (TPS) demuestra la capacidad de PostgreSQL para manejar transacciones concurrentes de manera eficiente, mientras que el diagrama de latencia ilustra el tiempo que toma la ejecución de consultas en milisegundos.

Transacciones por Segundo (TPS) de PostgreSQL

Latencia de Consultas de PostgreSQL

Tipos de Cargas de Trabajo

1. Cargas de Trabajo Intensivas en Lectura

Objetivo: Probar el rendimiento de la base de datos bajo alta actividad de lectura.

Configuración: Use pgbench con transacciones de solo lectura predeterminadas:

Shell

 

bash
pgbench -c 50 -T 120 -S mydb

  • -S: Ejecute solo consultas SELECT.
  • -c 50: Simule 50 clientes concurrentes.

2. Cargas de Trabajo Intensivas en Escritura

Objetivo: Medir el rendimiento de la base de datos con inserciones o actualizaciones frecuentes.

Configuración: Modifique la prueba de rendimiento para incluir escrituras:

Shell

 

bash
pgbench -c 20 -j 4 -T 120 -N mydb

  • -N: Ejecutar consultas no SELECT.

3. Cargas de trabajo Mixtas de Lectura/Escritura

Objetivo: Simular una carga de trabajo del mundo real que mezcla lecturas y escrituras.

Configuración: Utilizar una configuración equilibrada:

Shell

 

bash
pgbench -c 30 -j 4 -T 180 mydb

Optimización de PostgreSQL para Obtener Mejores Resultados en las Pruebas

Ajustar la Configuración de Memoria

Ajustar estos parámetros en postgresql.conf:

Plain Text

 

shared_buffers = 25% of system memory
work_mem = 4MB
maintenance_work_mem = 64MB

Habilitar la Ejecución de Consultas Paralelas

Ajustar estos parámetros en postgresql.conf:

Plain Text

 

max_parallel_workers_per_gather = 4

Optimizar la E/S de Disco

Utilizar SSDs para archivos WAL y ajustar estos parámetros:

Plain Text

 

wal_buffers = 16MB
synchronous_commit = off

Resultados Ejemplo e Interpretación

Escenario: 50 clientes concurrentes ejecutando una carga de trabajo con muchas lecturas durante 60 segundos.

Salida:

Plain Text

 

tps = 2500.456 (excluding connections establishing)

Interpretación: La base de datos es capaz de manejar 2500 transacciones por segundo bajo esta carga de trabajo.

Si TPS es más bajo de lo esperado, analizar los planes de consulta usando EXPLAIN ANALYZE para identificar cuellos de botella de rendimiento.

Conclusión

La evaluación comparativa de PostgreSQL es una forma poderosa de identificar limitaciones de rendimiento y optimizar tu base de datos para diversas cargas de trabajo. Herramientas como pgbench y sysbench, combinadas con información de pg_stat_statements, te permiten simular escenarios del mundo real y ajustar las configuraciones de PostgreSQL.

Al dominar estas herramientas y técnicas, puedes garantizar que tu instancia de PostgreSQL ofrezca un alto rendimiento tanto para aplicaciones intensivas en lectura como para aquellas con muchas escrituras.

Source:
https://dzone.com/articles/how-to-benchmark-postgresql-for-optimal-performance