Психогрин изнурительный postgres max_connections - PullRequest
0 голосов
/ 28 февраля 2019

Поскольку я использую сельдерей с пулом Gevent, я подумал, что postgres может быть узким местом (блокировки IO).

Поэтому я исправил psycopg2 с помощью psycogreen:

import gevent
import gevent.monkey

gevent.monkey.patch_all()  # noqa

import psycogreen.gevent

psycogreen.gevent.patch_psycopg()  # noqa

Itускоряет выполнение задач сельдерея (WORKER_CONCURRENCY = 100, масштабируется до 14 экземпляров):

celery worker -n my-queue@%h. --app=worker --loglevel=INFO --without-mingle --without-gossip -Ofair --pool=gevent --concurrency=100

Однако он почти мгновенно достигает postgres max_connections для более чем 100 соединений - и выдает следующую ошибку: OperationalError: (psycopg2.OperationalError) ERROR: no more connections allowed (max_client_conn)

Я пытался использовать pgBouncer для смягчения этого, но он все еще превышает предел.(используя конфигурацию по умолчанию из kubernetes repo )

Я использую SqlAlchemy ORM:

import sqlalchemy as sa
from sqlalchemy.orm import sessionmaker, scoped_session
from config import postgres_url_db

engine = sa.create_engine(
    postgres_url_db,
    pool_recycle=3600,
    pool_size=7
)
session = scoped_session(
    sessionmaker(
        autocommit=False,
        autoflush=False,
        bind=engine
    )
)

db_session = session()
db_session.execute(...) # my db query
db_session.commit()

Любые рекомендации о том, как лучше использовать gevent с postgres?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...