Рассмотрим ещё один аспект оптимизации отчетов SQL Server Reporting Services. Он связан с долго выполняющимися запросами. Правильным решением будет ограничить пользователя от долгого ожидания отчета по причине того, например, что запрос плохо спроектирован.
В отчете поставщиками данных являются наборы данных (datasets). И у нас есть несколько возможностей создания ограничения времени исполнения времени и лучший вариант – это использование timeout для datasets.
Отчеты имеют две секции в которых время ожидания (timeout) может быть применен – Data Source Connection Timeout и Dataset Timeout. Часто разработчики путают где нужно указывать необходимое время ожидания. В данном случае нас интересует время ожидания для наборов данных.
Для встроенных наборов данных (embedded dataset) значение timeout по умолчанию – 30 секунд, для общих наборов данных (shared dataset) нет ограничения по умолчанию. Подробности можно прочитать здесь.
Давайте рассмотрим пример. Создадим простой отчет, который возвращает данные (например, из таблицы HumanResources.Employee базы данных AdventureWorks). Будем использовать встроенный набор данных (embedded dataset).
Теперь сделаем симуляцию долго работающего запроса. Для этого добавим в запрос вызов WAITFOR DELAY, например, на сорок секунд. И теперь 30 секундное время ожидания не даст отчету выполнится корректно.
Если же вы уверены что запрос должен выполняться долго, то нужно использовать Cache и Snapshot, но об этом в другой раз.
Автор: Андрей Коршиков
*** *** *** *** *** *** *** *** *** *** *** ***
Полезные Скрипты
Рубрика Проверь себя
Ссылка на наш канал YouTube
Рекомендуем ознакомиться с другими темами по SQL Server Reporting Services тут