Причины этого SqlException: ошибка транспортного уровня при получении результатов с сервера - PullRequest
6 голосов
/ 09 сентября 2008

Вот полная ошибка: 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.

Ответы [ 5 ]

5 голосов
/ 09 сентября 2008

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

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

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

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

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

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

2 голосов
/ 09 сентября 2008

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

1 голос
/ 10 сентября 2008

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

0 голосов
/ 25 апреля 2012

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

0 голосов
/ 10 сентября 2008

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

...