У меня вопрос с моей проблемой, моя система работает на нескольких серверах (назовем их узлами), указывающими на одну и ту же базу данных (postgres), на каждом узле есть задачи для сельдерея, которые контролируют около 1000 датчиков каждый , все эти данные собираются в центральной базе данных (postgress) с интервалом 30 секунд.
Моя проблема в том, что я не знаю, почему сельдерей сохраняет все мои подключения к базе данных «открытыми», а один только узел требует почти 40 подключений для postgress. По умолчанию Postgress имеет ограничение около 100 подключений, поэтому добавление более пары узлов приводит к превышению лимита подключений.
Я пробовал использовать pgbouncer, но у него было. действительно плохое влияние на производительность системы, я думаю, я попробую pgpool II с репликацией базы данных на нескольких серверах и протестирую это.
Вместо того, чтобы пытаться исправить проблему, я хотел знать, есть ли все, что я могу сделать с сельдереем, чтобы уменьшить количество открытых соединений с базой данных. В качестве быстрого теста после каждой задачи я добавил строку db.connections['default'].close()
, чтобы попытаться принудительно закрыть базу данных, но я все еще вижу несколько соединений сельдерея с базой данных.
Есть идеи, что вызывает это? Я использую django 2.2 с django -cookiecutter, но отключил django_celery_beat, так как мне нужен контроль над задачами.