В настоящее время я пытаюсь повысить производительность своего веб-сайта для отчетов, использующего linq to sql и базу данных sql server express 2008.
Я обнаружил, что, когда я подхожу к миллиону строк в моих более «уродливых» таблицах, производительность становится реальной проблемой, в частности, для создания одного отчета требуется 3 минуты.
По сути, у меня есть цикл, который для каждого пользователя обращается к базе данных и собирает на них набор данных. Затем эти данные запрашиваются различными способами (и по мере необходимости загружается больше строк), пока у меня не получится симпатичный небольшой сводный объект, который я могу запустить для набора диаграмм silverlight. Используется отложенная загрузка, и отчеты извлекают данные из приблизительно 8 связанных таблиц.
Проблема в том, что я не знаю, где сейчас находится узкое место и как улучшить производительность. Из-за определенных ограничений я был вынужден использовать уникальные идентификаторы для ряда первичных ключей в задействованных таблицах - может ли это быть проблемой?
По сути, мне нужно потратить время на повышение производительности, но не достаточно для этого как с базой данных, так и с linq to sql. Могу ли я увидеть, где находятся узкие места?
Поскольку я работаю в экспрессе, у меня нет доступа к профилировщику. Я рассматриваю возможность переписать свои запросы в скомпилированный linq для sql, но боюсь, что причиной может быть база данных.
Я понимаю, что этот вопрос является немного открытым, и на него трудно ответить, не зная гораздо больше о моей настройке (схема базы данных и т. Д.), Но любой совет о том, как найти узкие места, более ценится!
Спасибо
UPDATE:
Спасибо за все отличные советы, ребята, и некоторые ссылки на некоторые отличные инструменты.
ОБНОВЛЕНИЕ для интересующихся
Я не смог ускорить свои запросы, настроив linq. Кажется, проблема в том, что большая часть кода доступа к моей базе данных находится в цикле. Я не вижу выхода из этого. По сути, я создаю отчет, просматривая данные ряда пользователей - отсюда и цикл. Вытягивание всех записей заранее кажется немного сумасшедшим - 800 000 + строк. Я чувствую, что есть намного лучший способ, но это технологический скачок для меня слишком далеко!
Однако добавление еще одного индекса к одному из внешних ключей в одной из таблиц повысило производительность, поэтому теперь генерация отчета занимает 20 секунд, а не 3 минуты!