У меня есть веб-приложение ASP.NET 2.0, подкрепленное довольно сложной базой данных SQL Server (множество таблиц и множество объединений происходят в большом количестве запросов).Мои журналы показывают, что однажды время загрузки на стороне сервера для одного конкретного типа страниц значительно возросло.Обычно она была ниже 100 мс, а иногда - около 200 мс до того, и она превышала 600 мс и была там с тех пор (чуть более недели назад).В прошлый раз, когда мы переносили новый код в производство, прошло почти две недели, прежде чем это произошло, и в эту дату в систему не было помещено большого объема новых данных.
Я смотрел на этот неправильно работающий тип страницы в нашемСреда тестирования (которая, конечно, менее громоздкая, чем производство), и в среднем она составила около 450 мс, что выше, чем я хочу, но не так высоко, как производство.Это странно;Я бы ожидал, что тестовая среда будет работать медленнее, чем производственная, поскольку у них по существу один и тот же набор данных.
Я сузил его до одного вызова базы данных (одна строка C #), который занимал около 200 мсвызвать хранимую процедуру и собрать результаты в объекты .NET (подавляющее большинство этого времени находится в БД).Я поднял этот sproc, скопировал его тело и заставил SQL Server Manager сообщить мне примерный план выполнения.Он сказал мне, что отсутствовал некластеризованный индекс, который я создал;это привело к тому, что время обращения к базе данных стало меньше 100 мс.Еще одно исследование показало, что у этого типа страницы нет другого существенного снижения производительности.
Так что я немного улучшил ситуацию, и мне хочется создать этот индекс в работе и посмотреть, не уменьшится ли время загрузки страницы.значительно.Но у меня все еще есть вопросы, которые меня беспокоят, и на которые я предпочел бы ответить, прежде чем возиться в производстве:
- Почему производительность внезапно падает?Если бы это был просто отсутствующий индекс, я бы ожидал, что он всегда был фактором (медленно снижается производительность по мере добавления большего количества данных).
- Почему тест будет работать лучше, чем производственный, если он получит те же данныеset?
Я знаю, что никто не может рассказать мне о моем приложении, но я надеюсь получить некоторое представление о том, какие вещи могут измениться таким образом и быть специфичными для установки.
РЕДАКТИРОВАТЬ: я добавил индекс в производство, и это снизило время загрузки страницы примерно до 100 мс.Я все еще не совсем понимаю, что случилось;может быть, когда-нибудь я узнаю что-то не связанное с базами данных и SQL.