MySql - истекло время ожидания клиента - PullRequest
0 голосов
/ 03 декабря 2018

Я использую пул соединений C3P0 (0.9.5.2) для подключения к БД MySQL.Я установил тайм-аут по умолчанию на 1 секунду.Я вижу, что во время высокой нагрузки время ожидания некоторых запросов на соединение (checkoutTimeout равно 1 секунде), хотя максимальная емкость пула не была достигнута.При анализе стека потоков я видел потоки «таймера отмены MySQL» в работоспособном состоянии.Вероятно, существует большой тайм-аут, который вызывает нереагирующую БД и не создает новое соединение в течение 1 секунды.

Есть ли способ минимизировать влияние таймера отмены и гарантировать, что тайм-аут клиента не произошел, если максимальная емкость пула не достигнута?

1 Ответ

0 голосов
/ 04 декабря 2018

Даже если пул не является maxPoolSize, попытки извлечения будут задержаны, если установлено checkoutTimeout и новые соединения не могут быть получены в течение времени ожидания.checkoutTimeout - это просто тайм-аут, который будет устанавливать ограничение по времени независимо от причины.

Если вы хотите предотвратить тайм-ауты, вы должны убедиться, что соединения могут быть сделаны доступными в течение выделенного времени.Если что-то делает базу данных невосприимчивой к запросам на соединение, очевидно, что самым простым решением будет решение этой проблемы.Другие подходы могут включать в себя установку большего acquireIncrement (так что соединения с большей вероятностью будут предварительно выбраны) или большего minPoolSize (то же самое).

В качестве альтернативы, вы можете выбрать более длительное время ожидания (или не устанавливать время ожидания).на всех).

...