Количество одновременных подключений должно быть достаточно большим для количества одновременных запущенных запросов или транзакций, которые могут у вас быть.
Если у вас есть нижний предел, то новым запросам / транзакциям придется ждать доступных connection.
Вы можете отслеживать текущие запросы (см., например, pg_stat_activity
), чтобы обнаруживать такие проблемы.
Однако сервер базы данных должен иметь возможность обрабатывать количество соединений. Если вы используете сервер, предоставленный третьей стороной, он может иметь установленные ограничения. Если вы используете свой собственный сервер, его необходимо правильно настроить.
Обратите внимание, что для обработки большего количества соединений вашему серверу базы данных потребуется больше процессов и больше оперативной памяти. Кроме того, если они долго выполняют запросов (в отличие от транзакций), то вы, скорее всего, ограничены в ресурсах на сервере (часто связаны с вводом-выводом) и добавляете больше запросов, выполняющихся одновременно обычно не помогает с общей производительностью. Возможно, вы захотите посмотреть конфигурацию вашего сервера БД (buffers et c.) И, конечно, если вы еще этого не сделали, оптимизируйте свои запросы (убедитесь, что все они используют индексы). Другие pg_stat_*
представления и EXPLAIN
являются вашими друзьями здесь.
Если у вас есть длительные транзакции с большим количеством времени простоя, тогда могут помочь более параллельные соединения, хотя вам, возможно, придется задуматься, почему у вас такие длительные транзакции.
Подводя итог, вы должны сделать следующие шаги:
Проверить состояние сервера базы данных, используя pg_stat_activity
и друзей.
Если у вас его еще нет, настройте мониторинг статистики ввода-вывода, процессора, памяти, подкачки, postgresql с течением времени. Это даст вам более четкое представление о том, что происходит на вашем сервере. Если у вас этого нет, вы просто работаете вслепую.
Если у вас есть длительные транзакции, убедитесь, что вы всегда правильно сбрасываете транзакции / соединения, в том числе при возникновении ошибок. Это довольно распространенная проблема с node.js веб-серверами. Убедитесь, что вы используете блоки try .. catch
везде, где это необходимо.
Если есть какие-либо длительные запросы, убедитесь, что они должным образом оптимизированы (с использованием индексов). Если нет, сделайте все возможное, чтобы оптимизировать их. Это будет самый полезный шаг, который вы можете предпринять, если возникнет проблема.
Если они правильно оптимизированы и , у вас достаточно свободных ресурсов (ОЗУ, I / O ...), тогда вы можете рассмотреть возможность увеличения количества соединений. В противном случае это просто бессмысленно.
Редактировать
Поскольку вы сами не управляете базой данных, вы не обязательно будете иметь всю наглядность использования ресурсов.
Однако вы все равно можете:
- Проверить
pg_stat_activity
. Уже одно это расскажет вам многое. - Проверка соединений / транзакций, которые хранятся, когда они не должны
- Проверка правильности оптимизации запросов
GCP имеет максимальный предел одновременных подключений по умолчанию, установленный на 100 для экземпляров с 3,75 ГБ ОЗУ. Таким образом, вы действительно можете увеличить размер вашего пула. Но если какие-либо из перечисленных выше проблем присутствуют, вы просто задерживаете или перемещаете проблему немного дальше, поэтому начните с проверки и исправления их, если это необходимо.