Ich betreibe eine Multi-Tenant-Website, wo ich den Aufwand für die Erstellung einer PostgreSQL-Verbindung pro Anfrage reduzieren möchte. Djangos CONN_MAX_AGE erlaubt dies, auf Kosten von vielen offenen Verbindungen zu PostgreSQL (8 Worker * 20 Threads = 160 Verbindungen). Mit 10 MB pro Verbindung verbraucht dies viel Speicher.Ideale Einstellungen für pgbouncer mit Djangos CONN_MAX_AGE
Der Hauptzweck ist die Reduzierung des Verbindungszeitaufwands. Daher meine Fragen:
- Welchen Setup sollte ich für eine solche Lösung verwenden? (PgBouncer?)
- Kann ich 'Transaktion' Pool-Modus mit Django verwenden?
- Wäre ich besser dran mit etwas wie: https://github.com/kennethreitz/django-postgrespool anstelle von Djangos Pooling?
Django 1.6 Einstellungen:
DATABASES['default'] = {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
....
'PORT': '6432'
'OPTIONS': {'autocommit': True,},
'CONN_MAX_AGE': 300,
}
ATOMIC_REQUESTS = False # default
Postgres:
max_connections = 100
PgBouncer:
pool_mode = session # Can this be transaction?
max_client_conn = 400 # Should this match postgres max_connections?
default_pool_size = 20
reserve_pool_size = 5
Können Sie bitte aktualisieren, was haben Sie schließlich getan? – Anurag