Мы перенесли приложение, которое занимается бизнес-аналитикой, поэтому оно действительно управляет большим объемом данных. Это приложение отлично работает в нашей собственной среде, но при работе в AWS мы получили много проблем со «сбросом соединения».
Мы определили, что один запрос извлекает данные из таблицы, в которой есть столбец с XML-содержимым. Столбец имеет значение VARBINARY (MAX), и его содержимое сильно различается по размеру. Если мы не вернем этот столбец, проблема исчезнет. Изучив немного больше, мы получили сброс соединения только тогда, когда содержимое этого столбца близко или превышает 40 КБ.
Мы запускаем SQL Server 2012 Web Edition и получаем к нему доступ через JDBC. Если мы подключимся через SQL Server Management Studio, проблема не исчезнет, так что это не проблема JDBC или нашего приложения.
Эта проблема действительно похожа на Другой вопрос, но в нашем случае нам удалось определить, что это происходит только тогда, когда содержимое столбца близко или превышает 40 КБ.
MS указать Ограничение 2 ГБ на VARBINARY (макс.), значит, он должен работать.
Есть ли ограничения в AWS? В нашей среде мы используем SQL Server 2012 Standard; в AWS есть веб-версия, но ни в одном источнике не указано, что существуют ограничения на размер столбцов.
ОБНОВИТЬ: мы выполнили запрос на том же компьютере с помощью SQL Server Management Studio (ранее была удаленной), и запрос вернул нормально, даже с гораздо большими результатами! Так что проблема в работе в AWS. Машина, которая делает доступ, тоже находится в AWS, но в другом ящике.
ОБНОВЛЕНИЕ 2: простой запрос моделирования:
SELECT CONVERT(VARBINARY(MAX),REPLICATE(CONVERT(VARCHAR(MAX),'A'), 500000))
Иногда более низкие значения, например 5000, вызывают проблему, но периодически. Сообщая 500000, вы всегда теряете связь. К журналам SQL Server ничего не добавляется.
Попробуйте настроить MTU вашего окна Windows: ping -f -l [пробный номер MTU] [IP-адрес другого сервера]
В этом посте объясняется, как пользоваться этим советом: ссылка на сайт
Надеюсь на эту помощь!