<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Purple Frog Systems &#187; History</title>
	<atom:link href="http://www.purplefrogsystems.com/blog/tag/history/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.purplefrogsystems.com/blog</link>
	<description>Business Intelligence Consultancy</description>
	<lastBuildDate>Mon, 23 Jan 2012 09:11:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SSRS Report Performance monitoring</title>
		<link>http://www.purplefrogsystems.com/blog/2008/05/ssrs-report-performance-monitoring/</link>
		<comments>http://www.purplefrogsystems.com/blog/2008/05/ssrs-report-performance-monitoring/#comments</comments>
		<pubDate>Wed, 14 May 2008 18:11:37 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Reporting Services]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[History]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.purplefrogsystems.com/blog/?p=13</guid>
		<description><![CDATA[Today&#8217;s Frog-Blog top-tips are quite simple ones, but ones that I always find very useful. SSRS Report Performance monitoring. Once you start to build up a few Reporting Services reports, you need to find out how they&#8217;re performing, whether any particular reports are causing the server problems and even which users are running which reports. [...]]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s <span style="color: #800080;">Frog-Blog top-tips</span> are quite simple ones, but ones that I always find very useful. SSRS Report Performance monitoring.</p>
<p>Once you start to build up a few Reporting Services reports, you need to find out how they&#8217;re performing, whether any particular reports are causing the server problems and even which users are running which reports. The following set of queries should point you in the right direction. They should all be run against the ReportServer database.</p>
<p><strong>The 20 most recently run reports</strong></p>
<pre><span style="color: #008000;"> SELECT TOP 20 C.Path, C.Name, EL.UserName, EL.Status, EL.TimeStart,
     EL.[RowCount], EL.ByteCount,
    (EL.TimeDataRetrieval + EL.TimeProcessing + EL.TimeRendering)/1000 AS TotalSeconds,
     EL.TimeDataRetrieval, EL.TimeProcessing, EL.TimeRendering
   FROM ExecutionLog EL
    INNER JOIN Catalog C ON EL.ReportID = C.ItemID
   ORDER BY TimeStart DESC </span></pre>
<p><strong>The slowest reports (in the last 28 days)</strong></p>
<pre><span style="color: #008000;"> SELECT TOP 10 C.Path, C.Name, Count(*) AS ReportsRun,
   AVG((EL.TimeDataRetrieval + EL.TimeProcessing + EL.TimeRendering))
                                            AS AverageProcessingTime,
   Max((EL.TimeDataRetrieval + EL.TimeProcessing + EL.TimeRendering))
                                            AS MaximumProcessingTime,
   Min((EL.TimeDataRetrieval + EL.TimeProcessing + EL.TimeRendering))
                                            AS MinimumProcessingTime
 FROM ExecutionLog EL
   INNER JOIN Catalog C ON EL.ReportID = C.ItemID
 WHERE EL.TimeStart&gt;Datediff(d,GetDate(),-28)
 GROUP BY C.Path,C.Name
 ORDER BY AVG((EL.TimeDataRetrieval + EL.TimeProcessing + EL.TimeRendering)) DESC </span></pre>
<p><strong>The most active users</strong></p>
<pre><span style="color: #008000;"> SELECT TOP 10 EL.UserName, Count(*) AS ReportsRun,
   Count(DISTINCT C.[Path]) AS DistinctReportsRun
  FROM ExecutionLog EL
    INNER JOIN Catalog C ON EL.ReportID = C.ItemID
  WHERE EL.TimeStart&gt;Datediff(d,GetDate(),-28)
  GROUP BY EL.UserName
  ORDER BY Count(*) DESC </span></pre>
<p><strong>The most popular reports</strong></p>
<pre><span style="color: #008000;"> SELECT TOP 10 C.Path, C.Name, Count(*) AS ReportsRun,
   AVG((EL.TimeDataRetrieval + EL.TimeProcessing + EL.TimeRendering))
                                            AS AverageProcessingTime,
   Max((EL.TimeDataRetrieval + EL.TimeProcessing + EL.TimeRendering))
                                            AS MaximumProcessingTime,
   Min((EL.TimeDataRetrieval + EL.TimeProcessing + EL.TimeRendering))
                                            AS MinimumProcessingTime
  FROM ExecutionLog EL
   INNER JOIN Catalog C ON EL.ReportID = C.ItemID
  WHERE EL.TimeStart&gt;Datediff(d,GetDate(),-28)
  GROUP BY C.Path, C.Name
  ORDER BY Count(*) DESC </span></pre>
<p><strong>Failed Reports</strong></p>
<pre><span style="color: #008000;"> SELECT TOP 20 C.Path, C.Name, EL.UserName, EL.Status, EL.TimeStart,
   EL.[RowCount], EL.ByteCount,
   (EL.TimeDataRetrieval + EL.TimeProcessing + EL.TimeRendering)/1000 AS TotalSeconds,
   EL.TimeDataRetrieval, EL.TimeProcessing, EL.TimeRendering
  FROM ExecutionLog EL
   INNER JOIN Catalog C ON EL.ReportID = C.ItemID
  WHERE EL.Status &lt;&gt; 'rsSuccess'
  ORDER BY TimeStart DESC </span></pre>
<p>There are countless other variations, but this should be enough to get you going.</p>
<p>[Update: 05/09/2011 - Thanks to Jonathan [<a href="http://twitter.com/FatherJack" target="_blank">Twitter</a>|<a href="http://www.sqlsouthwest.co.uk" target="_blank">Website</a>] for pointing out a typo!]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.purplefrogsystems.com/blog/2008/05/ssrs-report-performance-monitoring/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

