Как обнаружить потерянный сервер MySQL, но при этом учесть длительные запросы - PullRequest
0 голосов
/ 13 марта 2019

У меня есть стандартное соединение jdbc между приложением java и сервером mysql.

Настроенное время ожидания соединения составляет 5 секунд, но всякий раз, когда соединение, которое было создано и используется повторно (через пул соединений), время ожидания соединения больше не имеет значения.

Существует также сокетвремя ожидания настроено, но оно установлено на 5 минут, чтобы разрешить некоторые длительные запросы.

Итак, теперь проблема в том, что я не могу обнаружить фактически потерянный сервер MySQL за более короткое время, чем эти 5 минут.

У меня есть концептуальная идея установить для параметров проверки активности активности tcp в ОС значение, намного меньшее, чем значение по умолчанию, равное 7200 секундам, и начать отправлять зонды проверки TCP.Моя проблема с этим решением заключается в том, что оно влияет на все на сервере приложений, и в идеале я хотел бы повлиять только на свое собственное приложение.

Нет ли способа, чтобы драйвер jdbc также отправлял зонды проверки активности, чтобы определить, не работает ли сервер или просто работает?

1 Ответ

0 голосов
/ 13 марта 2019

Вы можете открыть соединение напрямую с портом MySQL (обычно на 3306) и установить очень короткий тайм-аут на сокете.В сокетах Java есть два тайм-аута: тайм-аут установления соединения и тайм-аут ответа.Последнее может представлять проблему, если соединение принято, но поставлено в очередь ОС (да, это может случиться с MySQL на высокой скорости соединения).В этом случае установите этот тайм-аут:

socket.setSoTimeout(timeOut);

Это вызовет исключение сокета, если тайм-аут (в миллисекундах) превышает.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...