Это редкий MySQL сервер, который может обрабатывать все, что близко к 1600 соединениям. Если у вас есть один из этих серверов, вы это знаете: вы платите небольшое состояние за оборудование, и, вероятно, у вас есть команда администраторов баз данных, которая за ним присматривает.
Здесь есть некоторый парадокс: больше соединений с производственными MySQL серверами обычно замедляют работу. Почему? Когда многие соединения представляют похожие запросы к серверу, они часто конкурируют друг с другом.
Обширные пулы также могут скрывать проблемы приложений, такие как очень медленные запросы и утечки соединения с пулом.
Редактировать Другая проблема приложения, ваша проблема, заключается в повторном использовании соединения, пока к нему еще активен запрос. MySQL сообщает об этом с помощью Packets out of order
сообщений. Если у вас есть настройка вложенного запроса, подобная этому псевдокоду
for each item in SELECT some query
for each detail in SELECT some query WHERE something = (item value from outer query)
, то для каждого запроса требуется свое собственное соединение. Если вы добавите новый запрос к первому соединению, пока оно все еще дает результаты предыдущего, MySQL запутается и скажет Packets out of order
.
Pro tip Используйте каждое соединение только для одного запроса, затем .release()
его к пулу.
Ваше внезапное закрытие пула может быть результатом какого-то сбоя сервера. (Вы не дали нам много подробностей, так что это только предположение.)
Попробуйте запустить приложение с максимальным размером пула 5 для каждого экземпляра. Убедитесь, что вы правильно установили параметры пула : waitForConnections
должно быть истинным, и вы должны разрешить высокий (или 0) poolLimit
.
Если у вас было время и аппетит к сложности, вы могли бы написать небольшое гнездо обработчиков событий пула , чтобы отслеживать, как долго запросы пула остаются в их очереди. Если он окажется слишком длинным, вы можете сделать максимальный размер пула немного большим (например, 6, а не 5).
Pro tip Отладка с очень небольшим количеством соединений в вашем бассейне. Вы найдете свои ошибки быстрее.