2008-09-12 4 views
0

Я стресс-тестирование веб-приложения .NET. Я сделал это по двум причинам: я хотел посмотреть, что такое производительность в реальных условиях, а также убедиться, что мы не пропустили никаких проблем во время тестирования. У нас было 30 одновременных пользователей в приложении, использующих его, как и во время обычной работы. Большинство пользователей открыли несколько окон приложения.SqlServer Express медленная производительность

  • 10 пользователей: Не плохо
  • 20 пользователей: замедляя
  • 30 пользователей: Очень, очень медленно, но нет времени ожидания

Он был загружен на сервер. Это виртуальный сервер с процессором Xeon с частотой 2,66 ГГц и 2 ГБ оперативной памяти. Мы используем Win2K3 SP2. У нас загружены .NET 1.1 и 2.0 и используются SQLExpress SP1.

Мы перепроверяли индексы на всех таблицах послесловия, и все они были такими, какими они должны быть.

Как мы можем улучшить производительность нашего приложения?

ответ

2

Это что-то, о чем я думал, но проверьте, сколько памяти SQL Server использует, когда у вас есть 20+ пользователей. Одним из ограничений версии Express является то, что это limited to 1GB of RAM. Таким образом, может быть просто вопрос, что на сервере недостаточно памяти для доступа из-за ограничений Express.

2
  1. Возможно, вы столкнулись с проблемами параллелизма, в зависимости от того, как работает ваше приложение. Попробуйте выполнить чтение с помощью ключевого слова «nolock».

  2. Попробуйте добавить псевдонимы таблицы для своих столбцов (и избегать использования SELECT *), это помогает MSSQL, так как не нужно «угадывать», из какой таблицы столбцы приходят.

  3. Если вы еще не перешли на SPROC, это позволит MSSQL лучше индексировать ваши данные для обычного результирующего набора заданного запроса.

  4. Попробуйте выполнить план выполнения ваших SPROCS, чтобы убедиться, что они используют индексы, которые, по вашему мнению, они есть.

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

+0

Мы очень meticilous с NOLOCK, и мы с помощью представлений для чтения данных с алиасы и SPROCS для обработки CRUD, а также SubSonic. – 2008-09-12 14:19:02

+0

Я не понимаю, почему это было отклонено. Все эти предложения актуальны – rpetrich 2008-09-12 14:36:40

+0

Согласен. Даже если это не совсем актуально здесь, они действительны и могут быть полезны для других. Голосование ... – 2008-09-12 14:38:20

0

Обновление: похоже, SQL Server express не проблема, поскольку они использовали тот же продукт в предыдущей версии приложения. Я думаю, что ваш следующий шаг в определении узких мест. Если вы уверены, что он находится в слое базы данных, я бы рекомендовал использовать трассировку профилировщика и сократить время выполнения самых дорогих запросов.

Это еще одна ссылка, которую я использую для сбора статистики из представлений динамического управления SQL Server (DMV) и связанных с ними функций динамического управления (DMF). Не уверен, можем ли мы использовать в Express Edition. Uncover Hidden Data to Optimize Application Performance.


Вы используете SQL Server Express для веб-приложения? Насколько я знаю, у него есть некоторые ограничения для развертывания производства.

SQL Server Express является бесплатным и может быть перераспределен ISV (по договоренности). SQL Server Expressидеально подходит для обучения и создания настольных и небольших серверных приложений.Это издание является лучшим выбором для независимых поставщиков программного обеспечения, непрофессиональных разработчиков и любителей создания клиентских приложений. Если вам нужны более сложные функции базы данных, SQL Server Express можно легко модернизировать до более сложных версий SQL Server.

0

Я бы проверял производительность диска на виртуальном сервере. Если это одна из проблем, я бы рекомендовал разместить базу данных на отдельном шпинделе.

Обновление: переход на отдельный шпиндель или обновление версии SQL Server, как предлагает Gulzar.

0

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

0

Запустите SQL Profiler, чтобы просмотреть запросы, отправленные в базу данных. Посмотрите на запросы, которые:

  • возвращающихся слишком много данных
  • построены плохо
  • в настоящее время выполняется слишком много раз
Смежные вопросы