По моему опыту, часто неплохо часто закрывать связи. В частности, MySQL любит закрывать соединения, которые некоторое время простаивали, а иногда это может оставить постоянное соединение в устаревшем состоянии, что может сделать приложение не отвечающим.
Что вы действительно хотите сделать, так это оптимизировать «время разрыва соединения», долю времени, в течение которого соединение установлено, но не выполняет никакой работы. В случае создания нового соединения с каждым запросом это мертвое время - это просто время установки и разрыва. Если установить соединение только один раз (для каждого потока), и оно никогда не испортится, то время простоя - это время простоя.
Когда ваше приложение обслуживает только несколько запросов, количество возникающих подключений также будет небольшим, и поэтому не так уж и много преимуществ сохранять соединение открытым, но бездействующим. С другой стороны, когда приложение очень занято, соединения почти никогда не простаивают, и закрытие соединения, которое будет немедленно открыто снова, также теряется. В середине, когда новые запросы иногда следуют в запросах на полеты, но иногда нет, вам придется выполнить некоторую настройку производительности для таких вещей, как размер пула, время ожидания запроса и т. Д.
Очень загруженное приложение, которое использует пул соединений для поддержания открытых соединений, увидит только один вид мертвого времени; ожидание запросов, которые никогда не вернутся из-за плохого соединения. Простое решение этой проблемы состоит в том, чтобы выполнить известный, хороший запрос (который в MySQL записан SELECT 1
) перед предоставлением соединения из пула для запроса и перезапустить соединение, если оно не возвращается быстро.