GridView + ObjectDataSource проблема - одинаково плохая производительность для больших и маленьких наборов результатов
-
03-07-2019 - |
Вопрос
Недавно меня вызвали для работы над старым устаревшим веб-приложением .NET. Производительность в последнее время значительно снизилась, так как объем данных в системе увеличился в четыре раза. Все было хорошо в течение предыдущих 2 лет.
Он использовал файл .xsd для общения с хранимой процедурой, которая достаточно сузила результаты (но без подкачки страниц), и передавал их в GridView через ObjectDataSource.
Часть, над которой я не могу разобраться , это занимает около 7 секунд, чтобы загрузить 1 результат, 140 или 1200. Потребовалось разделение второй для 0 результат случаев. (GridView обрабатывает нумерацию страниц)
Используя профилировщик SQL, мы увидели, что запрос занимает 6,9 секунды. Выполнение одного и того же запроса с теми же параметрами заняло 100 мс в SQL Management Studio. Я изменил параметры, чтобы убедиться, что это не просто кэшированный результат. Долгое время ожидания надежно воспроизводится.
Мне известно, что реализует подкачку страниц нужно было бы сделать здесь, но сейчас я просто ретроспективно пытаюсь найти объяснение, почему страница выполняет одинаково плохо для маленьких и больших наборов ...
(«Простой» дисплей GridView подходит для их нужд - нет необходимости контролировать HTML)
Решение
У нас та же проблема:
<Ол>SELECT ObjectName = Object_Name(ind.object_id), IndexName = ind.name, StatisticsDate = STATS_DATE(ind.object_id, ind.index_id) FROM SYS.INDEXES ind order by STATS_DATE(ind.object_id, ind.index_id) desc
- Удалить кеш сервера SQL: Ол>
- Если ни одна из них не помогает, вы можете попытаться применить план запросов SSMS с помощью таких подсказок, как " внутреннее соединение LOOP " и " с (index = ...) ". Ол>
DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE
Другие советы
Вы можете попробовать просмотреть план выполнения и тип параметров, которые отправляются из вашего приложения. Например, если ваше приложение передает nvarchar для сравнения со столбцом varchar, это может вызвать проблемы. http://weblogs.sqlteam.com/tarad/archive/ 2007/11 / 16 / 60408.aspx