SQL Server 2000 прерывистые исключения соединения на производственной сервере специфическая проблема среды? - PullRequest
2 голосов
/ 08 января 2009

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

Нашей настройкой является веб-приложение ASP.Net/C# в Windows Server 2003 Standard Edition с SQL Server 2000 на серверной части. Недавно мы выполнили серьезное обновление продукта на сервере VMWare нашего клиента (у нас есть гостевой экземпляр, выделенный нам), и, хотя у нас не было ни одной из этих проблем с предыдущим выпуском, добавленная сложность, которую новое обновление принесло продукту, вызвала много вопросов. Мы также запускаем SQL Server 2000 (сборка 8.00.2039 или SP4) и приложение IIS / ASP.NET (.Net v2.0.50727) в одном блоке и подключаемся друг к другу через соединение TCP / IP.


В первую очередь, выбрасываются исключения:

System.IndexOutOfRangeException: не удается найти таблицу 0.

System.ArgumentException: столбец «пароль» не принадлежит таблице Table.

[Это исключение возникает в сценарии входа в систему, хотя столбец пароля явно доступен]

System.InvalidOperationException: уже существует открытый DataReader, связанный с этой Командой, который должен быть закрыт в первую очередь.

[Это происходит очень регулярно]

System.InvalidOperationException: эта SqlTransaction завершена; его больше нельзя использовать.

System.ApplicationException: ExecuteReader требует открытого и доступного Соединения. Текущее состояние соединения - подключение.

System.Data.SqlClient.SqlException: истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает.

И только сегодня впервые:

System.Web.UI.ViewStateException: неверное состояние просмотра.


Мы провели нагрузочное тестирование приложения с использованием того же числа одновременно работающих пользователей, что и на производственном сервере, и не можем воспроизвести эти ошибки. Они очень непостоянны и происходят, даже когда есть только 8/9/10 пользовательских соединений. Моя интуиция говорит мне о своих проблемах с подключением к ASP.NET - SQL Server 2000 ..

На этом этапе мы в значительной степени исключили ошибки уровня доступа к данным на уровне кода (у нас работает команда из 15 опытных разработчиков), поэтому мы считаем, что это специфическая проблема рабочей среды сервера.

Ответы [ 3 ]

1 голос
/ 12 января 2009

Ошибка Invalid Viewstate довольно распространена на веб-сайте с высоким трафиком. Однако, если вы недавно перешли на несколько веб-серверов, убедитесь, что вы используете один и тот же ключ компьютера, чтобы Viewstate подписывалось одним и тем же ключом на всех серверах. http://www.codinghorror.com/blog/archives/000132.html

На основании других ошибок я бы предположил, что вы используете общие подключения в нескольких потоках. Ваши соединения хранятся в статических переменных, состоянии приложения, состоянии сеанса или другом объекте, который используется в нескольких запросах? Может быть, где-то есть хеш-таблица, содержащая соединения, команды или транзакции. Ни один из объектов ADO.Net не является поточно-ориентированным. Поэтому убедитесь, что вы используете их только в однопоточном режиме.

Другая возможность заключается в том, что вы обмениваетесь объектами ADO.NET, а не последовательно избавляетесь от них и управляете их областью действия. Может быть, они кешируются в контексте запроса или что-то подобное?

0 голосов
/ 16 января 2009

Ребята, просто как обновление, оказалось, что проблема связана с VMWare при интенсивном использовании - какая веселая неделя! Мы меняем код, чтобы он соответствовал среде VMWare, и мы уже видим некоторые улучшения.

Спасибо за предложения, я ценю это.

0 голосов
/ 08 января 2009

Я знаю, что вы не хотите это слышать, но люди умнее, чем я это сказал (посмотрите Код Макконнелла , если вы мне не верите):

Это, вероятно, ваш код, и ваша интуиция, вероятно, верна:

Мой инстинкт говорит мне о своем ASP.NET - SQL Проблемы с соединением с сервером 2000 ..

Выбрасываемые ошибки весьма специфичны, и с точки зрения контекста они выглядят так, как будто они просто пытаются подключиться и испытывают трудности - что, если это происходит только в среде клиента, может указывать на неправильную настройку для виртуальной машины для доступа к TCP-соединениям на хост-компьютере (под другим экземпляром).


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

Если это не проблема, и я правильно читаю ваше сообщение: вы запускаете сервер на гостевом экземпляре, предоставленном клиентом, по его каналу и пропускной способности? Если это так, то вполне возможно (примерно в то же время, что и при обновлении) была изменена некоторая конфигурация маршрутизации, или были внесены изменения в брандмауэр, или в любой другой ящик, на котором установлен экземпляр, были внесены некоторые изменения, теперь он обрабатывает ваши вещи по-другому. *

Если вы не можете воспроизвести его в своей среде, и вы 100% уверены, что это не ваш код; тогда, по логике, проблема может быть только в их окружении.

...