MySQL в Windows - как мне установить wait_timeout для соединений с использованием именованных каналов?
Я использую базу данных MySQL, работающую на Windows, и по соображениям производительности я подключаюсь к ней по именованным каналам.
Приложение (Java), использующее базу данных (через Hibernate), может позволить соединению бездействовать в течение достаточно долгого времени, что приводит к сбою соединения со следующим сообщением:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: последний пакет, успешно полученный от сервера, был 33 558 297 миллисекунд назад. Последний пакет, успешно отправленный на сервер, был 33 558 297 миллисекунд назад. больше, чем сконфигурированное сервером значение wait_timeout. Чтобы избежать этой проблемы, следует рассмотреть возможность истечения срока действия и / или проверки допустимости соединения перед использованием в приложении, увеличения значений, настроенных сервером для тайм-аутов клиента, или использования свойства соединения Connector/J 'autoReconnect=true'.
autoReconnect
к сожалению не имеет никакого эффекта (и ни один не делает autoReconnectForPools
), но wait_timeout
документы утверждают, что wait_timeout
применяется только "к соединениям файлов сокетов TCP/IP и Unix, но не к соединениям, выполняемым через именованные каналы или разделяемую память".
Как я могу изменить wait_timeout
для именованных труб?
1 ответ
В зависимости от того, как вы конфигурируете свой источник данных, вы можете указать такой параметр, как idle-timeout-minutes
, Если wait_timeout
были установлены на 5 минут, установлены idle-timeout-minutes
до 4.
Для соединений MySQL можно указать только два значения времени ожидания: wait_timeout и interactive_timeout. interactive_timeout
потенциально может также применяться к именованным каналам, если он подключен как клиент.
Если я правильно помню, если не указаны ни wait_timeout, ни interactive_timeout, по умолчанию используется значение 28800.