Для того, чтобы избежать накладных расходов на создание нового соединения каждый раз, когда потребности запроса обжигали на MySQL, есть две опции:MySQL - постоянное подключение против Пулы соединений
- Постоянные соединения, в результате чего новое соединение запросил проверку, чтобы проверить, открыто ли «идентичное» соединение и если оно его использует.
- Пул соединений, при котором клиент поддерживает пул соединений, так что каждый поток, который должен использовать соединение, будет проверять один из пула и возвращать его обратно в пул по завершении.
Итак, если у меня есть многопоточное серверное приложение, которое должно обрабатывать тысячи запросов в секунду, и каждый поток должен запускать запрос к базе данных, то какой вариант лучше?
С моей точки зрения, при постоянном подключении все потоки в моем приложении будут пытаться использовать одно и то же постоянное соединение с базой данных, потому что все они используют одинаковые соединения. Таким образом, это одно соединение, разделенное между несколькими потоками приложений - в результате в ближайшее время запросы будут блокироваться на стороне базы данных.
Если я использую механизм объединения соединений, у меня будут все потоки приложений, совместно использующие пул соединений. Таким образом, существует меньше возможности запроса блокировки. Однако при подключении пула приложений, если поток приложений ожидает получения соединения из пула или должен ли он отправлять запрос на соединения в пуле в любом случае циклически, и пусть очереди, если они есть, происходят в базе данных?
В случае объединения пула разработчик приложения может контролировать, когда и сколько подключений должно быть открыто/закрыто. Для MySQL, как можно контролировать количество «идентичных» постоянных соединений? Существуют ли какие-либо параметры конфигурации сервера для одного и того же? – user1259642
В пулах, которые я использую, вы устанавливаете минимальный и максимальный размер пула и определяете время простоя, после которого соединение закрывается (плюс некоторые другие вещи). – mrab