Назад | Перейти на главную страницу

Потеря TCP-пакетов на SQL-сервере

Там, где я работаю, у нас были проблемы с подключением к базе данных. Мы получаем много сбоев, которые на стороне клиента отображаются как «сбой recv». Я использовал Wireshark, чтобы попытаться отладить проблему, и пошел немного дальше, но теперь я в значительной степени застрял.

Сначала немного об инфраструктуре:

Проблема заключается в связи между приложениями во внутренней зоне и базой данных во внешней зоне. Проблема возникает только на некоторых (в то время фактически только на одном) виртуальных серверах и не зависит от приложения (это происходит как через пулы соединений Glassfish и JDBC, так и через SQL-клиенты, такие как SQuirreL).)

И это становится еще более странным, поскольку небольшие SQL-операторы выполняются, но когда они достигают определенной длины, ничего не происходит, пока соединение не будет закрыто на стороне клиента (с ошибкой recv).

Вот что я обнаружил с помощью Wireshark:

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

Обновление: перезапуск виртуального сервера решил проблему - по крайней мере, пока ..

Обновление №2: .. и теперь проблема вернулась ..

У нас был сетевой эксперт, который посмотрел на это, и выяснилось, что это вызвано ошибочными настройками MTU. Насколько я понимаю, большая часть сетевой инфраструктуры поддерживает jumbo-кадры, поэтому MTU был установлен на 9000. Но был один компонент (VPN-туннель), который не поддерживал это, поэтому кадры более определенного размера были усечены. Изменение всех настроек MTU 1500/1460 устранило проблему.