Может кто-нибудь прояснить ситуацию с пулом соединений базы данных для воркеров Sidekiq?
В данный момент мы установили DISCOURSE_DB_POOL в 15, при этом у нас работает 2 воркера Sidekiq, каждый с параметром concurrency, равным 10. После прочтения документации Sidekiq выяснилось, что потоки Sidekiq используют общий пул соединений с БД, поэтому я ожидаю максимум 15 * 2 = 30 соединений к БД от воркеров Sidekiq. Однако, несмотря на это понимание, мы наблюдаем всплески количества соединений к БД, превышающие ожидаемый максимум в 30.
Боюсь, я не помню сразу всех деталей того, как это всё работает.
Стоит проверить, не настроили ли вы переменную окружения UNICORN_SIDEKIQS. Она указывает, сколько процессов sidekiq запускается (каждый из которых будет иметь множество потоков).
Что именно показывает ваш график? Это «количество одновременных подключений» или «количество созданных подключений»? Если второе, возможно, некоторые подключения создаются и уничтожаются очень быстро.
И последний вопрос: какую проблему вы здесь пытаетесь решить? Есть ли какая-то проблема, вызванная количеством подключений?
Ниже приведены соответствующие конфигурации, которые у нас есть:
DISCOURSE_DB_POOL: “15”
DISCOURSE_SIDEKIQ_WORKERS: “10”
UNICORN_SIDEKIQS: “2”
Это означает, что у нас есть 2 процесса Sidekiq, каждый из которых использует 10 потоков.
На графике показано текущее количество подключений клиентов.
Мы пытаемся правильно настроить размер пула соединений (RDS-прокси, расположенный перед PostgreSQL). Для этого нам нужно лучше понять механизмы пулинга соединений на стороне приложения. Почему приложение не учитывает конфигурацию DISCOURSE_DB_POOL так, как ожидалось?
Если DISCOURSE_DB_POOL работает как положено, почему мы наблюдаем такие значительные скачки в количестве подключений к базе данных? Эти скачки, похоже, совпадают с запуском запланированных задач PeriodicalUpdates.
Дайте знать, если у вас возникнут дополнительные вопросы. Благодарим за помощь в разгадке этой тайны.