GridView + ObjectDataSource проблема - одинаково плохая производительность для больших и маленьких наборов результатов

StackOverflow https://stackoverflow.com/questions/818091

Вопрос

Недавно меня вызвали для работы над старым устаревшим веб-приложением .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
    
    1. Удалить кеш сервера SQL:
    2.     DBCC DROPCLEANBUFFERS
          DBCC FREEPROCCACHE
      
      1. Если ни одна из них не помогает, вы можете попытаться применить план запросов SSMS с помощью таких подсказок, как " внутреннее соединение LOOP " и " с (index = ...) ".

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

    Вы можете попробовать просмотреть план выполнения и тип параметров, которые отправляются из вашего приложения. Например, если ваше приложение передает nvarchar для сравнения со столбцом varchar, это может вызвать проблемы. http://weblogs.sqlteam.com/tarad/archive/ 2007/11 / 16 / 60408.aspx

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top