я создал Flask
WSGI-приложение, использующее gunicorn
как WSGI-сервер, для БД он использует PostgreSQL
через Flask SQLAlchemy
расширение. Это все размещено на Heroku
.
конфигурация пулеметчика
Конфигурация Heroku PostgreSQL
Для всего остального используется конфигурация по умолчанию.
Я получаю такую ошибку: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: too many connections for role <id>
. Очевидно, я превысил допустимое количество подключений к БД.
Я пробовал вот это исправить:
poolclass
к NullPool
;pool_recycle
до 2. Количество подключений остается неизменным даже после более чем 2 секунд;session.close()
с участием engine.dispose()
;max_overflow = 0
, SQLALchmey pool_size = 10
(я получаю эту ошибку: sqlalchemy.exc.TimeoutError: QueuePool limit of size 10 overflow 0 reached, connection timed out, timeout 30
).Ничего из этого не работает. Я все еще получаю эту ошибку даже при минимальной конфигурации Gunicorn (1 рабочий с 18 подключениями). Я действительно начал не понимать, что происходит на самом деле.
Я думал, что это работает так: у каждого воркера есть собственный экземпляр движка, и у каждого движка свой размер пула. Итак, если есть 2 воркера с конфигурацией двигателя по умолчанию (размер пула 5), то у нас есть 2 * 5 = 10 максимальных подключений к БД. Но похоже, что это действительно не так.
Вопросы
SQLAlchemy
объединение работает с gevent
рабочие? т.е. как я могу подсчитать максимальное количество подключений к БД?