Во-первых, пожалуйста, прочитайте наш канонический вопрос по планированию мощностей .
Конкретный совет, который вы запрашиваете, - это совет по планированию пропускной способности, и вам придется решить его самостоятельно, в зависимости от конкретной среды.
Во-вторых, вы смотрите на это неправильно.
Количество памяти (или любого другого ресурса), которое у вас есть, не определяет количество установленных вами соединений, а количество необходимых вам соединений определяет, насколько мощным является сервер, который вы должны приобрести.
Требования к ресурсам для каждого соединения подробно изложены в руководстве , а также обсуждены в вики, с которой вы связаны. Выясните, в чем нуждается ваша среда (или сделайте обоснованное предположение), и убедитесь, что оборудование, на котором вы собираетесь работать, сможет справиться с тем, что вы намереваетесь использовать.
В частности, в отношении ограничений на соединения и размера пула у вас должно быть «достаточно» соединений для удовлетворения требований вашего приложения - либо на одном сервере, либо через пул / баунсер.
«Достаточно» - это относительное число: приложение, которое устанавливает (и постоянно использует) одно соединение, требует только одного соединения. Приложение, которое устанавливает соединение для каждого конечного пользователя, который входит в систему, требует столько же подключений к БД, сколько и пользователей.
Значения по умолчанию для Postgres и pgbouncer
являются значениями по умолчанию :
100 подключений к базе данных - это много для обычного человека, бросающего Postgres в среду.
Разработчикам, вероятно, не понадобится больше 10. Любой другой будет знать достаточно, чтобы увеличить число.
20 подключений pgbouncer
к одному пулу БД означают, что вы можете получить 4 пула, указывающих на один сервер, и не превышать установленное по умолчанию ограничение на количество соединений Postgres
Можно pgbouncer
указывать несколько объединенных ресурсов для указания на одну внутреннюю базу данных, и вам всегда нужны некоторые доступные соединения на ваших внутренних серверах.
Если значения по умолчанию не подходят для вашей среды, вы должны их изменить.
Помните, что пул соединений не означает «всегда связывать каждое доступное соединение с базой данных».
Смысл, pgbouncer
как вы заметили, заключается в повторном использовании соединений. Прибыль эффективности здесь не требует, чтобы вы связывали каждое доступное соединение, просто вы не отсоединяете, повторно соединяете, повторно согласовываете SSL, повторно аутентифицируетесь в базе данных и повторно запускаете запросы на установление соединения каждый раз.
Обратите внимание на определение документации
default_pool_size
Таким образом, если конфигурация по умолчанию имеет размер пула 20, из 100 соединений в общей сложности это означает, что 5 различным парам пользователь / база данных придется максимально увеличить свой размер пула, прежде чем они достигнут общего предела. И наоборот, если, например, вы используете pgbouncer для маршрутизации в одну базу данных через одного пользователя, ваш эффективный лимит соединения составляет 20, а не 100, поэтому вы должны соответствующим образом установить размер пула для этого варианта использования. YMMV.
источник