Что вызывает это SqlException: при получении результатов от сервера произошла ошибка транспортного уровня

Вот полная ошибка: SqlException: A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, error: 1 - I/O Error detected in read/write operation)

Я начал периодически видеть это сообщение для нескольких модульных тестов в моем приложении (существует более 1100 модульных и системных тестов). Я использую средство запуска тестов в ReSharper 4.1.

Еще одно: моя машина для разработки - это виртуальная машина VMWare.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
4 077
5

Ответы 5

Я столкнулся с этим много лун назад. Суть в том, что у вас заканчиваются доступные порты.

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

Если это так, проверьте количество доступных портов для SQL Server.

Что происходит, так это то, что если пул отключен, каждый вызов принимает порт, и по умолчанию требуется 4 минуты, чтобы истек срок действия порта, и у вас заканчиваются порты.

Если пул включен, вам необходимо профилировать все порты SQL Server и убедиться, что у вас их достаточно, и при необходимости расширить их.

Когда я столкнулся с этой ошибкой, пул соединений был отключен, и это вызывало эту проблему всякий раз, когда на веб-сайт была помещена приличная нагрузка. Мы не видели ее в разработке, потому что максимальная нагрузка составляла 2 или 3 человека, но как только число выросло до 10, мы продолжали видеть эту ошибку. Мы включили пул, и он это исправил.

Я тоже столкнулся с этим много лун назад. Однако, чтобы не сбрасывать со счетов объяснение @ Longhorn213s, у нас было прямо противоположное поведение. Мы получили ошибку при разработке и тестировании, но не в продакшене, где очевидно, что нагрузка была намного больше. В итоге мы терпели проблему в разработке, поскольку она была спорадической и существенно не замедляла прогресс. Я думаю, что у этой ошибки могло быть несколько причин, но я никогда не мог определить причину самостоятельно.

Как предполагает Трампи, я обнаружил, что эта ошибка может возникнуть просто при включении цикла сервера БД (или чего-либо, что заставляет сервер разрывать соединение). Соединение по-прежнему кэшируется на каком-то уровне с другого конца (в клиентском программном обеспечении или в пуле), а затем во время попытки его использования обнаружение того, что оно более недействительно, возвращает «ошибку транспортного уровня». Вероятно, это связано с тем, что вы не перезагружаете свой производственный сервер БД (это хорошо), и вы перезагружаете свой сервер БД разработчиков (кого это волнует?)

ErikE 08.06.2013 05:57

Мы видели это в нашей среде и проследили часть этого до подсказки «NOLOCK» в наших запросах. Мы удалили подсказку NOLOCK и настроили наши серверы на использование режима Snapshot Isolation, и частота этих ошибок была значительно уменьшена.

Мы также столкнулись с этой ошибкой и выяснили, что мы прерываем соединение с сервером SQL с сервером базы данных. У клиентского приложения создается впечатление, что соединение все еще активно, и оно пытается использовать это соединение, но терпит неудачу, поскольку оно было прервано.

Мы видели эту ошибку несколько раз и пробовали разные разрешения с переменным успехом. Одна из распространенных основополагающих причин заключалась в том, что системе, выдавшей ошибку, не хватало памяти. Это особенно верно, если сервер, на котором размещен Sql Server, выполняет ЛЮБОЙ другой процесс, не связанный с ОС. По умолчанию SQL Server будет захватывать любую память, которую он может, а затем, если он оставит мало для других процессов / драйверов. Это может вызвать неустойчивое поведение и прерывистые сообщения. Рекомендуется настроить SQL Server на максимальный объем памяти, который оставляет некоторый запас, если это может потребоваться другим процессам. Пример: Visual Studio на компьютере разработчика, на котором запущена копия версии для разработчиков SQL Server на том же компьютере.

Другие вопросы по теме