Ich habe ein PgPool II-Cluster mit 2 PostreSQL 9.5 Backends (4vCores, 8GB RAM) Loadbalancing + Replikation. Mein Anwendungsfall ist eine Website, die nur SSO-Anmeldung/Registrierung bietet, ist eine relativ kleine Datenbank, die Abfragen sind sehr einfach, aber es muss sehr hohe Parallelität (mehrere tausend gleichzeitige Benutzer) unterstützen.Hohe Parallelität auf PgPool + PostgreSQL Cluster
Bevor ich weitere Backends hinzufüge, möchte ich sicherstellen, dass die Konfiguration des aktuellen Clusters optimal ist. Habe einen Test mit pgbench ausgeführt (normale SELECT-Abfragen, die das normale Verhalten der Website simulieren) und konnte den Verbindungspool ohne großen Aufwand überlasten (pgbench -c 64 -j 4 -t 1000 -f queries.sql), auch wenn es dort war war reichlich CPU/RAM in der LB und den Backends verfügbar.
Dies sind die gewünschten Einstellungen vor:
pgpool II
listen_backlog_multiplier = 3
connection_cache = on
num_init_children = 62
max_pool = 4
child_life_time = 0
child_max_connections = 0
connection_life_time = 0
client_idle_limit = 0
PostgreSQL
max_connections = 256
shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 8MB
maintenance_work_mem = 512MB
min_wal_size = 1GB
max_wal_size = 2GB
checkpoint_completion_target = 0.7
wal_buffers = 16MB
default_statistics_target = 100
Erhöhung der num_init_children/max_pool wird mich zwingen, die max_connections auf die Backends zu erhöhen und das scheint nicht zu empfehlen. Irgendwelche Vorschläge? Vielen Dank!