У меня работает многотеновый сайт, где я хотел бы уменьшить накладные расходы на создание соединения PostgreSQL для каждого запроса. Django CONN_MAX_AGE позволяет это за счет создания большого количества открытых простоя подключений к PostgreSQL (8 рабочих * 20 потоков = 160 соединений). С 10 МБ на соединение это потребляет много памяти.
Основная цель - сократить накладные расходы времени соединения. Отсюда мои вопросы:
- Какую настройку следует использовать для такого решения? (PgBouncer?)
- Можно ли использовать режим пула транзакций с Django?
- Было бы лучше использовать что-то вроде https://github.com/kennethreitz/django-postgrespool вместо пула Django?
Настройки Django 1.6:
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