Вопрос

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

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

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

После этого мы перепроверили индексы всех таблиц, и все они были в порядке.

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

Это было полезно?

Решение

Я просто об этом подумал, но проверьте, сколько памяти использует SQL Server, если у вас более 20 пользователей. Одним из ограничений версии Express является то, что она ограничено 1 ГБ ОЗУ.Так что это может быть просто вопрос нехватки памяти, доступной серверу из-за ограничений Express.

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

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

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

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

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

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

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

Это еще одна ссылка, которую я использую для сбора статистики из представлений динамического управления (DMV) SQL Server и связанных с ними функций динамического управления (DMF).Не уверен, сможем ли мы использовать его в экспресс-издании.Раскройте скрытые данные для оптимизации производительности приложений.


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

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

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

Обновлять:Перейдите на отдельный шпиндель или обновите версию SQL Server, как удачно предлагает Гульзар.

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

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

  • возврат слишком большого количества данных
  • построен плохо
  • выполняются слишком много раз
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top