Отчет SSRS с проблемами производительности базы данных Oracle - PullRequest
0 голосов
/ 24 февраля 2012

Я создаю отчет с помощью служб отчетов SQL Server, который выбирает данные из базы данных Oracle.Отчет работает, но его генерация занимает много времени (~ 75 секунд).У меня есть следующий очень простой запрос в моем отчете:

SELECT  
(SELECT   COUNT(*)  
   FROM   CALL  
  WHERE   trunc(start_time) >= :Begin_Date 
    AND   trunc(finish_time) <=  :End_Date) AS total_calls,
(SELECT   COUNT(*)  
   FROM   CALL  
  WHERE   DISCONNECT = 'T' 
    AND   trunc(start_time) >= :Begin_Date 
    AND   trunc(finish_time) <=  :End_Date) AS transfered_calls,
(SELECT   COUNT(*)  
   FROM   CALL  
  WHERE   DISCONNECT = 'H' 
    AND   trunc(start_time) >=  :Begin_Date 
    AND   trunc(finish_time) <=  :End_Date) AS hangups
FROM DUAL

Теперь я могу выполнить этот запрос в Oracle, используя SQLPlus * (с указанием дат, конечно), и он выполняется примерно за 8 секунд.Когда я пытаюсь выполнить тот же запрос в отчете SSRS, генерация занимает 75 секунд.Я обеспокоен тем, что мне нужно добавить гораздо больше запросов, чтобы завершить отчет, и если для создания этой базовой версии отчета потребуется так много времени, готовый отчет не будет работать.Как я могу улучшить производительность отчета?Есть идеи?

Заранее спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Вы, безусловно, можете улучшить производительность, ударяя по столу CALL один раз

SELECT COUNT(*) total_calls,
       SUM(CASE WHEN disconnect = 'T'
                THEN 1
                ELSE 0
             END) transferred_calls,
       SUM(CASE WHEN disconnect = 'H'
                THEN 1
                ELSE 0
              END) hangups
  FROM call
 WHERE trunc(start_time)  >= :Begin_Date
   AND trunc(finish_time) <= :End_Date

Кроме того, функциональный индекс для TRUNC(start_time) и TRUNC(finish_time), вероятно, будет полезен (при условии, что передаваемые вами параметры ограничивают набор рассматриваемых строк относительно небольшим подмножеством строк в таблице) .

Что касается разницы в производительности между SSRS и SQL * Plus, планы запросов одинаковы? Можете ли вы отследить отчет SSRS, чтобы увидеть, что он ожидает?

0 голосов
/ 24 февраля 2012

Пара предложений. Сначала убедитесь, что ваши таблицы правильно проиндексированы, чтобы вы могли использовать Oracle Optimizer. Когда я делаю такие отчеты, я обнаруживаю, что если я создаю представление, которое получает нужные мне данные, оно работает лучше. Вы также можете создать хранимую процедуру, чтобы сделать то же самое. Я использовал оба, и я получаю отличные результаты от них. Кроме того, использование встроенных операторов выбора в предложении SELECT никогда не было хорошей идеей. Если вы сможете найти способ удалить их (например, вызвать функцию вместо этого), вы, вероятно, увидите некоторые дополнительные улучшения производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...