SQL to list retrieval, processing and rendering duration times of SSRS reports executions

 --Transact-SQL to list retrieval, processing and rendering duration times of SSRS reports executions.
/*
The most often complain of users is "My report is running that slowly, why?" and when you run it as admin, it works normal.
With this Transact-SQL script you can check the execution durations of report splitted in data retrieval, processing and rendering durations to analyse which part takes to most time and if it's really slow.
Please remark: Querying the ReportServer database directly is not a supported way.
Works with SQL Server 2005 / Reporting Services 2005 and higher version in all editions.
Requires select permissions on the ReportServer database.
*/

-- List processing duration times of SSRS reports executions.
DECLARE @begin datetime, @end datetime, @minDuration int;

-- Include executions of the last month.
SET @begin = DATEADD(m, -1, GETDATE());
SET @end   = GETDATE();
SET @minDuration = 3000;  -- min Duration in Millisecondes = 3 sec.

;WITH ExeLog AS

   -- Basic CTE query for ExecutionLogStore
   (SELECT CTL.[Path] AS ReportPath
      ,ELS.Format
  ,ELS.TimeStart
  ,ELS.TimeEnd
  ,DATEDIFF(ms, ELS.TimeStart, ELS.TimeEnd) AS TimeDuration
  ,ELS.TimeDataRetrieval
  ,ELS.TimeProcessing
  ,ELS.TimeRendering
  ,ELS.TimeDataRetrieval + ELS.TimeProcessing + ELS.TimeRendering AS TimeTotal
  ,ELS.ByteCount
  ,ELS.[RowCount] AS RwCount
FROM dbo.ExecutionLogStorage AS ELS
INNER JOIN
dbo.[Catalog] AS CTL
ON ELS.ReportID = CTL.ItemID
    WHERE ELS.TimeStart BETWEEN @begin AND @end
          AND DATEDIFF(ms, ELS.TimeStart, ELS.TimeEnd) >= @minDuration
          AND ELS.[Status] = 'rsSuccess')

SELECT ExeLog.ReportPath
      ,ExeLog.Format
      ,ExeLog.ByteCount
      ,ExeLog.RwCount
      ,ExeLog.TimeStart
      ,ExeLog.TimeDuration AS Duration
      ,ExeLog.TimeTotal AS Total
      ,ExeLog.TimeDataRetrieval AS DataRetrieval
      ,ExeLog.TimeProcessing AS Processing
      ,ExeLog.TimeRendering AS Rendering
       -- Percentage related to TimeTotal
      ,CASE WHEN ExeLog.TimeTotal = 0 THEN 0.0
            ELSE CONVERT(numeric(4, 2), (100.0 * ExeLog.TimeDataRetrieval / ExeLog.TimeTotal)) END AS [Data%]
      ,CASE WHEN ExeLog.TimeTotal = 0 THEN 0.0
            ELSE CONVERT(numeric(4, 2), (100.0 * ExeLog.TimeProcessing / ExeLog.TimeTotal)) END AS [Proc%]
      ,CASE WHEN ExeLog.TimeTotal = 0 THEN 0.0
            ELSE CONVERT(numeric(4, 2), (100.0 * ExeLog.TimeRendering / ExeLog.TimeTotal)) END AS [Rend%]
FROM ExeLog
ORDER BY ExeLog.TimeDuration DESC;

Comments

  1. I really like your blog because it has valuable information for learners and experts also. so please keep share on MSBI Online Training

    ReplyDelete
  2. Thanks for your valuable feedback.

    ReplyDelete
  3. Great article,Thank you for sharing this valuable info with us.
    Keep updating...

    MSBI Online Course

    ReplyDelete
  4. Thanks for your information

    ReplyDelete

Post a Comment

Hi User,
Thanks for visiting My Blog and please provide your valuable feedback and subscribe for more updates. Please don't post any spam content or comments.
Thank You

Popular Posts

Failed to execute the package or element. Build errors were encountered

Restore of database 'DataBase_Name' failed. (Microsoft.SqlServer.Management.RelationalEngineTasks)

Cannot convert "Column" between a unicode and a non-unicode string data types in SSIS