Что наиболее важно влияет на производительность в веб-приложении, поддерживаемом базой данных? - PullRequest
3 голосов
/ 11 февраля 2010

Меня недавно попросили ускорить веб-сайт бизнес-приложения на C # / ASP.NET / SQL Server. Так как я только начал, я не знаю слишком много о внутренностях. Так с чего мне начать? Незаметно, что является самым важным фактором, влияющим на производительность системы, подобной этой? Настройка базы данных? Аппаратные средства? Индивидуальная оптимизация страницы? Какую первую вещь вы бы посмотрели?

РЕДАКТИРОВАТЬ: После того, как я на самом деле сделаю работу, я вернусь и отправлю ответ. ;)

Снова отредактируйте: «Профиль» в настоящее время является наиболее востребованным ответом, и я согласен, что именно это и нужно делать. Но я искал предположения / опыт относительно того, что показывают результаты профилирования, поэтому я не думаю, что этот ответ имеет значение ...

Ответы [ 8 ]

10 голосов
/ 11 февраля 2010

Какую первую вещь вы бы посмотрели?

Профилировщик.

6 голосов
/ 11 февраля 2010

Первое, что я хотел бы сделать, - это получить копию приложения dotTrace JetBrains и использовать ее для профилирования сайта. Не делайте предположений о том, в чем заключается проблема с производительностью - узнайте!

5 голосов
/ 11 февраля 2010

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

4 голосов
/ 11 февраля 2010

Все может быть проблемой. Возьмите страницу, которая ведет себя плохо и проследить поток контроля. Используйте отладчик и профилировщик sql и посмотрите ВСЕ, что делает эта страница. Должно быть понятно, что исправить тогда.

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

Конечно, с опытом вы можете просто посмотреть на коды (DB + .NET) и узнать, в чем проблема, но у вас нет опыта. Таким образом, другой вариант - нанять консультанта, который имеет опыт.

Редактировать - Мои догадки (потому что я хочу печенье)

  • Если это AJAX, то это может быть JavaScript
  • В противном случае это, скорее всего, TSQL
  • Если программист не знал, как использовать TSQL, а просто извлекал целые таблицы БД и манипулировал данными в C #
  • или программист не понимал модель страницы (или модель MVC), и это самый странный код, который вы когда-либо видели в своей жизни.

Я видел все это.

1 голос
/ 14 февраля 2010

Оказывается, что наиболее вопиющей проблемой было несколько страниц с проблемами, которые забивали базу данных тысячами запросов SQL. Код выглядел относительно невинно, только некоторые сетки данных. Однако C # / LINQ был слишком мощным для его (или нашего) собственного блага: если вы привязываете сетку к таблице, но сетка хочет отобразить поле из другой таблицы, связанной через внешний ключ, она это делает! Но он делает это, выполняя zillion запросов:

SELECT ... FROM other_table WHERE Id = 1
...
SELECT ... FROM other_table WHERE Id = 2
...
SELECT ... FROM other_table WHERE Id = 3
...
SELECT ... FROM other_table WHERE Id = 4
...

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

Теперь вернемся к профилированию ...

1 голос
/ 11 февраля 2010

Для части базы данных, вот хорошее начало, что искать:

Устранение неполадок с производительностью в SQL Server 2005

Но я бы тоже не удивился, если бы вы нашли неэффективный клиентский код. Особенно при общении с базой данных.

1 голос
/ 11 февраля 2010

Использование профилировщика - хороший способ измерить производительность, но сложно, если вы не выполните разумную эмуляцию производительности.

Большинство поддерживаемых БД веб-приложений привязаны к вводу / выводу, а не к вычислениям. При отсутствии профилировщика я бы догадался о производительности запросов. Вы можете улучшить производительность запросов, запустив объяснение запросов, чтобы выяснить, какие индексы вам нужны. Или избегайте оптимизации запроса, помещая наборы результатов / активные записи в кеш.

0 голосов
/ 11 февраля 2010

Я бы проголосовал за проблемы с блокировкой базы данных из моего опыта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...