SSRS is a powerful tool, but there is very little available to measure it’s performance or view the SSRS execution log or catalog in detail.  Here are a few simple queries that will give you insight to the system that you never had before.       ACTIVE REPORTS:  Have you ever seen your SQL Server performance take a nose dive due to a long-running report?  If the SPID is executing under a generic Report ID, or it is a scheduled job, you may have no way to tell which report is killing your server.  Running this query will show you which reports are executing at a given time, and WHO is executing them.                                  USE ReportServerNative          SELECT runningjobs.computername,                          runningjobs.requestname,              runningjobs.startdate,                           users.username,             Datediff(s,runningjobs.startdate, Getdate()) / 60 AS    'Active Minutes'               FROM runningjobs               INNER JOIN users               ON runningjobs.userid = users.userid               ORDER BY runningjobs.startdate                                                                                                           SSRS CATALOG:  We have all asked “What was the last thing that changed”, or better yet, “Who in the world did that!”.  Here is a query that will show all of the reports in your SSRS catalog, when they were created and changed, and by who.                                                                            USE ReportServerNative          SELECT DISTINCT catalog.PATH,                                         catalog.name,                                          users.username AS [Created By],                             catalog.creationdate,                                          users_1.username AS [Modified By],                                          catalog.modifieddate               FROM catalog                       INNER JOIN users ON catalog.createdbyid = users.userid  INNER JOIN users AS users_1 ON catalog.modifiedbyid = users_1.userid               INNER JOIN executionlogstorage               ON catalog.itemid = executionlogstorage.reportid               WHERE ( catalog.name <> '' )                                                                                                           SSRS EXECUTION LOG:  Sometimes we need to know what was happening on the SSRS report server at a given time in the past.  This query will help you do just that.  You will need to set the timestart and timeend in the WHERE clause to suit your needs.                                                                       USE ReportServerNative          SELECT catalog.name AS report,                     executionlogstorage.username AS [User],                      executionlogstorage.timestart,                      executionlogstorage.timeend,         Datediff(mi,e.timestart,e.timeend) AS ‘Time In Minutes',                      catalog.modifieddate AS [Report Last Modified],                      users.username               FROM   catalog  (nolock)                      INNER JOIN executionlogstorage e (nolock)                        ON catalog.itemid = executionlogstorage.reportid                      INNER JOIN users (nolock)                        ON catalog.modifiedbyid = users.userid               WHERE  executionlogstorage.timestart >= Dateadd(s, -1, '03/31/2012')                      AND executionlogstorage.timeend <= Dateadd(DAY, 1, '04/02/2012')                               LONG RUNNING REPORTS:  This query will show the longest running reports over a given time period.  Note that the “>5” in the WHERE clause sets the report threshold at 5 minutes, so anything that ran less than 5 minutes will not appear in the result set.  Adjust the threshold and start/end times to your liking.  With this information in hand, you can better optimize your system by tweaking the longest running reports first.                                                                     USE ReportServerNative          SELECT executionlogstorage.instancename,                     catalog.PATH,                      catalog.name,                      executionlogstorage.username,                      executionlogstorage.timestart,                      executionlogstorage.timeend,                      Datediff(mi, e.timestart, e.timeend) AS 'Minutes',                      executionlogstorage.timedataretrieval,                      executionlogstorage.timeprocessing,                      executionlogstorage.timerendering,                      executionlogstorage.[RowCount],                      users_1.username                      AS createdby,                      CONVERT(VARCHAR(10), catalog.creationdate, 101)                      AS 'Creation Date',                      users.username                      AS modifiedby,                      CONVERT(VARCHAR(10), catalog.modifieddate, 101)                      AS 'Modified Date'               FROM   executionlogstorage e         INNER JOIN catalog                        ON executionlogstorage.reportid = catalog.itemid                      INNER JOIN users                        ON catalog.modifiedbyid = users.userid                      INNER JOIN users AS users_1                        ON catalog.createdbyid = users_1.userid               WHERE  ( e.timestart > '03/31/2012' )                      AND ( e.timestart <= '04/02/2012' )                      AND  Datediff(mi, e.timestart, e.timeend) > 5                     AND catalog.name <> ''               ORDER  BY 'Minutes' DESC                                  I have used these queries to build SSRS reports that I can refer to quickly, and export to Excel if I need to report or quantify my findings.  I encourage you to look at the data in the ReportServerNative database on your report server to understand the queries and create some of your own.  For instance, you may want a query to determine which reports are using which shared data sources.      Work smarter, not harder!