Производительность SSRS. Играем со временем ожидания.

By | January 20, 2015

Рассмотрим ещё один аспект оптимизации отчетов. Он связан с долго выполняющимися запросами. Правильным решением будет ограничить пользователя от долгого ожидания отчета по причине того, например, что запрос плохо спроектирован.

В отчете поставщиками данных являются наборы данных (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, но об этом в другой раз.