sql >> Base de Datos >  >> RDS >> PostgreSQL

Sobre el rendimiento plógico

Hace unos días lanzamos pglogical, una solución de replicación lógica de código abierto para PostgreSQL, que esperamos se incluya en el árbol de PostgreSQL en un futuro no muy lejano. No voy a hablar sobre todas las cosas habilitadas por la replicación lógica:el anuncio de lanzamiento de pglogical presenta una descripción general bastante buena, y Simon también explicó brevemente las ventajas de la replicación lógica en otra publicación hace unos días.

En su lugar, me gustaría hablar sobre un aspecto particular mencionado en el anuncio:la comparación del rendimiento con las soluciones existentes. La página plógica menciona

Valor de referencia

Esta publicación explica los detalles de los puntos de referencia que realizamos para encontrar el rendimiento máximo "sostenible" (transacciones por segundo) que cada una de las soluciones puede manejar sin retrasos. Para hacer eso, realicé una serie de pruebas de pgbench en un par de instancias de AWS i2.4xlarge con una cantidad variable de clientes, y midí el rendimiento en el maestro y cuánto tardó el modo de espera en ponerse al día (si estaba retrasado) . Luego, los resultados se usaron para calcular una estimación del rendimiento máximo en el nodo en espera.

Por ejemplo, supongamos que hemos estado ejecutando pgbench con 16 clientes durante 30 minutos y hemos medido 10000 tps en el maestro, pero el modo de espera estaba retrasado y tomó otros 15 minutos para ponerse al día. Entonces, la estimación de rendimiento máximo sostenible es

tps =(transacciones ejecutadas) / (tiempo de ejecución total hasta que el modo de espera se puso al día)

es decir,

tps =(30 60 10.000) / (45 * 60) =18.000.000 / 2.700 =6.666

Entonces, en ese caso, el rendimiento máximo sostenible en el modo de espera es de 6,666 tps, es decir, solo ~66 % de la tasa de transacción medida en el maestro.

Sistema

El punto de referencia se realizó en un par de instancias de AWS i2.4xlarge, configuradas en el mismo grupo de ubicación (por lo tanto, con una conexión de red de ~2 Gbit entre ellas) y unidades SSD 4x configuradas en RAID-0 (por lo que es poco probable que la E/S sea una problema aquí). Las instancias tienen ~122 GB de RAM, por lo que el conjunto de datos (pgbench con escala 5000) cabe en la RAM. Todas las pruebas se realizaron en PostgreSQL 9.5.0 con exactamente la misma configuración:

checkpoint_timeout = 15min
effective_io_concurrency = 32
maintenance_work_mem = 1GB
max_wal_size = 8GB
min_wal_size = 2GB
shared_buffers = 16GB

Para todos los sistemas de replicación se utilizó la versión disponible más reciente, en particular

  • slony1 2.2.4
  • SkyTools 3.2

y se configuró una replicación simple como se describe en los tutoriales (ambos usan el ejemplo de pgbench usado para el punto de referencia).

Resultados

Los resultados presentados a continuación también incluyen replicación de transmisión (modo asíncrono) para darle una mejor idea de la sobrecarga asociada con la replicación lógica. Las tasas de transacción no son los números "en bruto" medidos por pgbench, sino las tasas "sostenibles" calculadas usando la fórmula presentada al comienzo de esta publicación.

clientes transmisión pglógico loco Londres
1 1075 1052 949 861
2 2118 2048 1806 1657
4 3894 3820 3456 1643
8 6506 6442 2040 1645
16 9570 8251 1535 1635
24 11388 7728 1548 1622
32 12384 7818 1358 1623