В течение некоторого времени я получал ошибки connection pool timeout
и 2020-06-17T16:15:33.701Z pid=1132347 tid=goeqpzc8b WARN: PG::ConnectionBad: FATAL: sorry, too many clients already
при использовании рабочих sidekiq и postgres. Я попытался понять, как все это просто работает, но просто не могу избавиться от этих ошибок, независимо от того, на что я настраиваю свои настройки.
Прямо сейчас мой config/database.yml
файл использует эти настройки в качестве своих параметров :
default: &default
adapter: postgresql
encoding: unicode
pool: 20
port: 25060
В моем файле config/sidekiq.yml
также установлены следующие параметры:
development:
:concurrency: 20
production:
:concurrency: 20
:queues:
- default
и в соответствии с настройками моей базы данных из Digital Ocean у меня есть подключение к внутреннему серверу. предел 22.
С учетом сказанного, почему задания sidekiq завершаются сбоем, вместо того, чтобы просто стоять в очереди и ждать выполнения? В каждом из моих работников sidekiq есть код для записей CRUD в ActiveRecord, но я не уверен, насколько это важно для фактических работников sidekiq.
Насколько я понимаю, мой лимит с управляемой базой данных составляет 22 подключений вверху, но мои настройки в файлах database.yml
и sidekiq.yml
ниже предела, поэтому я не уверен, как и почему он все еще не работает, а не просто остается в очереди, пока не останется место.
Учитывая этот сценарий, существуют ли рекомендуемые параметры пула и параллелизма, которые мне следует использовать? Некоторые команды в работниках sidekiq на самом деле отслеживают изменения в конкретной записи, чтобы видеть, когда она обновляется, поэтому он постоянно проверяет запись, а затем продолжает работу, как только ожидаемая информация там появляется.
Я ищу любые предложения или разъяснения по этому поводу.