<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Robert Bruckner's Advanced Reporting Services Blog : Performance</title><link>http://blogs.msdn.com/robertbruckner/archive/tags/Performance/default.aspx</link><description>Tags: Performance</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Report Server Optimizations</title><link>http://blogs.msdn.com/robertbruckner/archive/2009/01/14/report-server-optimizations.aspx</link><pubDate>Wed, 14 Jan 2009 22:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9319280</guid><dc:creator>Robert M. Bruckner</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/robertbruckner/comments/9319280.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robertbruckner/commentrss.aspx?PostID=9319280</wfw:commentRss><description>&lt;P&gt;The fourth and final technical note "&lt;A class="" href="http://sqlcat.com/technicalnotes/archive/2009/01/14/reporting-services-performance-optimizations.aspx" target=_blank mce_href="http://sqlcat.com/technicalnotes/archive/2009/01/14/reporting-services-performance-optimizations.aspx"&gt;Reporting Services Performance Optimizations&lt;/A&gt;" in our series on&amp;nbsp;&lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2008/11/03/technical-note-series-on-reporting-services-performance-and-scalability.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2008/11/03/technical-note-series-on-reporting-services-performance-and-scalability.aspx"&gt;Building and Deploying Large Scale SQL Server Reporting Services Environments&lt;/A&gt; is now available on SQLCAT.com.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The focus of this final&amp;nbsp;technical note is&amp;nbsp;on how to optimize your Reporting Services architecture for better performance and higher report execution throughput and user loads. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9319280" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/Scalability/default.aspx">Scalability</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/RS+2008/default.aspx">RS 2008</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/RS+2005/default.aspx">RS 2005</category></item><item><title>Optimizing Reports - Show the Right Set of Data</title><link>http://blogs.msdn.com/robertbruckner/archive/2009/01/12/optimizing-reports-show-the-right-set-of-data.aspx</link><pubDate>Tue, 13 Jan 2009 10:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9313373</guid><dc:creator>Robert M. Bruckner</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/robertbruckner/comments/9313373.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robertbruckner/commentrss.aspx?PostID=9313373</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;You are probably now thinking, of course my report shows the right data!&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Ok, but is it fast (enough)?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;My esteemed colleague &lt;A class="" href="http://blogs.msdn.com/deanka" target=_blank mce_href="http://blogs.msdn.com/deanka"&gt;Dean Kalanquin&lt;/A&gt; started blogging recently.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;He has been working in databases for a long time, and has gained great experience and knowledge by working on several different areas of SQL Server before joining the Reporting Services team a few years ago.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Among our common interests are certainly performance and scalability.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;While Dean and I typically approach these areas in similar ways, Dean tends to focus more on the database side of things, and I leverage my knowledge about the internals of the report processing engine to look at it also from a report design and data processing point of view.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Together, we regularly figure out great ways to effectively optimize systems and reports.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;In his first technical blog post titled "&lt;A class="" href="http://blogs.msdn.com/deanka/archive/2009/01/13/pet-peeve-slow-reports.aspx" target=_blank mce_href="http://blogs.msdn.com/deanka/archive/2009/01/13/pet-peeve-slow-reports.aspx"&gt;Pet Peeve: Slow Reports&lt;/A&gt;", Dean provides tips on how to optimize reports by applying pre-aggregation already in the database query and only returning data you really want to show upfront.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; Further d&lt;/SPAN&gt;etail data&amp;nbsp;can then be provided as drillthrough reports that only retrieve a specific subset of the original data, or you could apply a combination of drill-down + drillthrough, as discussed in a &lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2009/01/08/report-performance-optimization-tips-subreports-drilldown.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2009/01/08/report-performance-optimization-tips-subreports-drilldown.aspx"&gt;recent posting&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Tahoma','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt; mso-bidi-theme-font: minor-bidi"&gt;I think Dean is going to be doing a whole series on various report design and optimization "gotchas", so his blog is definitely worth keeping an eye on.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9313373" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/RS+2008/default.aspx">RS 2008</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/RS+2005/default.aspx">RS 2005</category></item><item><title>Report Performance Optimization Tips (Subreports, Drilldown)</title><link>http://blogs.msdn.com/robertbruckner/archive/2009/01/08/report-performance-optimization-tips-subreports-drilldown.aspx</link><pubDate>Fri, 09 Jan 2009 10:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9286620</guid><dc:creator>Robert M. Bruckner</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/robertbruckner/comments/9286620.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robertbruckner/commentrss.aspx?PostID=9286620</wfw:commentRss><description>&lt;P&gt;In a previous posting, I explained the new &lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2009/01/05/executionlog2-view.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2009/01/05/executionlog2-view.aspx"&gt;ExecutionLog2&lt;/A&gt; view in Reporting Services 2008: how to utilize it to measure report execution performance, identify report candidates for optimizations, and verify the impact of the latter.&amp;nbsp; I also included two tips at the bottom of that posting, that I want to call out&amp;nbsp;explicitly as a separate posting.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Subreports&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;One of the aspects I usually investigate when optimizing reports&amp;nbsp;is the usage of subreports.&amp;nbsp; Subreports provide a convenient way to reuse report designs, but&amp;nbsp;it may make sense to refactor the report design to lift the subreports&amp;nbsp;contents into the main report.&amp;nbsp; Not only does this frequently result in improved performance, it can also provide better control over rendering behavior.&lt;/P&gt;
&lt;P&gt;Btw, this related blog &lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2009/03/03/subreport-usage.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2009/03/03/subreport-usage.aspx"&gt;posting&lt;/A&gt; explains how one can quickly&amp;nbsp;find out which published reports reference subreports.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Splitting large drilldown reports into parameterized drillthrough reports&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When reports use large datasets, I have sometimes seen the usage of drilldown group hierarchies (toggles) to provide an initial overview to the report consumer, and enable dynamic drilldown to interesting areas.&amp;nbsp;&lt;BR&gt;&lt;BR&gt;What may work really well for those kind of reports is to change the original report to only include data till e.g. the third level of drilldown (and thereby reduce the amount of data retrieved and processed by the initial report, and improve response time).&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Then at the innermost drilldown level of the main report, create drillthrough actions with parameters based on the current group values to another report.&amp;nbsp; The drillthrough target report&amp;nbsp;provides further details and drilldown capabilities, but only has to retrieve a small subset of the original data.&amp;nbsp; &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9286620" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/RS+2008/default.aspx">RS 2008</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/RS+2005/default.aspx">RS 2005</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/Report+Design/default.aspx">Report Design</category></item><item><title>ExecutionLog2 View - Analyzing and Optimizing Reports</title><link>http://blogs.msdn.com/robertbruckner/archive/2009/01/05/executionlog2-view.aspx</link><pubDate>Tue, 06 Jan 2009 09:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9258936</guid><dc:creator>Robert M. Bruckner</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/robertbruckner/comments/9258936.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robertbruckner/commentrss.aspx?PostID=9258936</wfw:commentRss><description>&lt;P&gt;There are several options for monitoring performance of a report server.&amp;nbsp; The&amp;nbsp;fourth&amp;nbsp;article in our &lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2008/11/03/technical-note-series-on-reporting-services-performance-and-scalability.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2008/11/03/technical-note-series-on-reporting-services-performance-and-scalability.aspx"&gt;technical note series on performance and scalability&lt;/A&gt; covers information for &lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2009/01/14/report-server-optimizations.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2009/01/14/report-server-optimizations.aspx"&gt;optimizing entire report servers&lt;/A&gt;.&amp;nbsp; Besides &lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms159809.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms159809.aspx"&gt;performance counters&lt;/A&gt;,&amp;nbsp;analyzing &lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms155836.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms155836.aspx"&gt;report execution log data&lt;/A&gt; in particular&amp;nbsp;can help answer questions such as, which reports might be good candidates for &lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms155927.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms155927.aspx"&gt;caching&lt;/A&gt;,&amp;nbsp;how many reports were returned from cache vs. live execution vs. execution snapshot, what was the most popular report for the week, and what are the poor performing reports that need to be taken action upon?&lt;/P&gt;
&lt;P&gt;Before you can optimize particular reports or your entire system, you need metrics and understand what they tell you.&amp;nbsp; In this posting, I want to focus on&amp;nbsp;how to effectively interpret and utilize the data present in the new ExecutionLog2 view in the Reporting Services 2008 catalog database.&amp;nbsp; In summary, I am covering the following topics:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Description of ExecutionLog2 columns, with tips on how to interpret values&lt;/LI&gt;
&lt;LI&gt;ExecutionLog2.AdditionalInfo and some interesting pieces of information it provides&lt;/LI&gt;
&lt;LI&gt;Tips for analyzing ExecutionLog2 information&lt;/LI&gt;
&lt;LI&gt;Tips for optimizing reports&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Note that the ExecutionLog2 view&amp;nbsp;defines appropriate&amp;nbsp;(nolock) hints to minimize the impact when querying this view directly.&amp;nbsp; Let's&amp;nbsp;start with a simple query against the report server's database:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;use&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT size=2&gt; ReportServer&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;select&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;&lt;FONT color=#808080 size=2&gt;*&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;from&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ExecutionLog2 &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;order&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;by&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; TimeStart &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;DESC&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;Description&amp;nbsp;of ExecutionLog2 Columns&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;InstanceName&lt;BR&gt;&lt;/STRONG&gt;The RS instance which processed the request.&amp;nbsp;&amp;nbsp;In a scale-out configuration, this value specifies which node/instance of the RS web farm executed a particular&amp;nbsp;request.&amp;nbsp; The InstanceName distribution may help determine whether your network-load balancer distributes requests across a RS scale-out configuration as expected.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;ReportPath&lt;/STRONG&gt;&lt;BR&gt;Specifies the full path and name of the report executed.&amp;nbsp; If the ReportPath is null, it is an ad-hoc execution (&lt;EM&gt;Source=Adhoc&lt;/EM&gt;)&amp;nbsp;meaning that it is either a dynamically generated report model based drillthrough report, or a Report Builder 2.0 report that is previewed on a client utilizing the report server for processing and rendering.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;UserName&lt;/STRONG&gt;&lt;BR&gt;Specifies the user who initiated the request.&amp;nbsp;&amp;nbsp;For subscription executions, this is the&amp;nbsp;RS&amp;nbsp;service account.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;ExecutionId&lt;/STRONG&gt;&lt;BR&gt;The&amp;nbsp;id associated with the request.&amp;nbsp;&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;RequestType&lt;/STRONG&gt;&lt;BR&gt;Specifies the type of the request:&amp;nbsp;{ &lt;EM&gt;Interactive, Subscription &lt;/EM&gt;}&lt;BR&gt;Analyzing execution log data filtered by RequestType=Subscription and sorted by TimeStart may reveal&amp;nbsp;potential subscription "hotspots" if many subscriptions are scheduled for a similar time window (e.g. Monday morning&amp;nbsp;around 7 AM) or overlap with high interactive load time windows.&amp;nbsp; In those cases, you might want to consider adjusting subscription schedules to stagger those executions and/or move them to low load time windows.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Format&lt;BR&gt;&lt;/STRONG&gt;The rendering format for a particular request.&amp;nbsp; If null, then the request is an interactivity event (such as toggle, drillthrough, interactive sort) and not a rendering request.&amp;nbsp; Typical values for rendering formats in RS 2008 include RPL, HTML4.0, Excel, Word, PDF.&lt;BR&gt;Note that &lt;STRONG&gt;RPL&lt;/STRONG&gt; (Report Page Layout Format)&amp;nbsp;in RS 2008 represents interactive viewing of a report&amp;nbsp;in HTML (report server / report manager) or Preview in Report Builder 2.0 when connected to a report server.&amp;nbsp; RPL is an internal, binary format utilized by the RS 2008 server when communicating with the new viewer controls, to offload some of the rendering work from the server to the client viewer control.&lt;BR&gt;If you see &lt;STRONG&gt;HTML4.0&lt;/STRONG&gt; as rendering format in RS 2008, it means that the report was not requested with the new viewer controls, but likely&amp;nbsp;with the VS 2005 or VS 2008 report viewer controls in server mode that don't support client side rendering yet.&amp;nbsp; This capability will only be available with the updated report viewer controls.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Parameters&lt;/STRONG&gt;&lt;BR&gt;The report parameter values associated with&amp;nbsp;the request.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;ReportAction&lt;BR&gt;&lt;/STRONG&gt;The action performed on the report.&amp;nbsp; It is one of the following values: { &lt;EM&gt;Render, BookmarkNavigation, DocumentMapNavigation, DrillThrough, FindString, GetDocumentMap, Toggle, Sort&lt;/EM&gt; }&lt;BR&gt;Note that this detailed report action information is new in RS 2008 with the ExecutionLog2.&amp;nbsp; It provides information about what interactivity events where utilized in a report session and the corresponding event values (shown as part of the AdditionalInfo column).&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;TimeStart&lt;BR&gt;&lt;/STRONG&gt;Time the request began.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;TimeEnd&lt;BR&gt;&lt;/STRONG&gt;Time the request finished.&lt;BR&gt;Note that (TimeEnd - TimeStart) provides the end-to-end duration of the request.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Important Notes on TimeDataRetrieval, TimeProcessing, TimeRendering&lt;BR&gt;&lt;/STRONG&gt;A&amp;nbsp;value of -1 for any of the timing related columns indicates that&amp;nbsp;the report server&amp;nbsp;detected that the timer was unreliable.&amp;nbsp; This can happen on particular multi-proc/core hardware, particularly X64, when the CPU clocks get out of sync.&lt;BR&gt;Execution log entries are created&amp;nbsp;only for the initial request to the server.&amp;nbsp; If you want to get&amp;nbsp;separate execution log entries for every page rendering request sent to the server while interactively navigating individual pages of a particular report viewed in report manager or previewed in Report Builder 2.0,&amp;nbsp;remove the &lt;EM&gt;LogAllExecutionRequests="false"&lt;/EM&gt; setting from the RPL renderer registration in the RSReportServer.config file.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;TimeDataRetrieval&lt;BR&gt;&lt;/STRONG&gt;The number of milliseconds spent interacting with data sources and data extensions for all data sets in the main report and all of its subreports. This value includes:&lt;BR&gt;-&amp;nbsp;Time spent opening connections to the data source&lt;BR&gt;-&amp;nbsp;Time spent reading data rows from the data extension&lt;BR&gt;Note: If a report has multiple data sources/data sets that can be &lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2008/08/07/dataset-execution-order.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2008/08/07/dataset-execution-order.aspx"&gt;executed in parallel&lt;/A&gt;, TimeDataRetrieval contains the duration of the &lt;EM&gt;longest&lt;/EM&gt; DataSet, not the sum of all DataSets durations.&amp;nbsp; If DataSets are executed sequentially, TimeDataRetrieval contains the &lt;EM&gt;sum&lt;/EM&gt; of all DataSet durations.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;TimeProcessing&lt;BR&gt;&lt;/STRONG&gt;The number of milliseconds spent in the processing engine for the request.&amp;nbsp; This value includes:&lt;BR&gt;-&amp;nbsp;Report processing bootstrap time &lt;BR&gt;-&amp;nbsp;Tablix processing time (e.g. grouping, sorting, filtering, aggregations, subreport processing), but excludes &lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2008/08/11/on-demand-report-processing-in-rs-2008.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2008/08/11/on-demand-report-processing-in-rs-2008.aspx"&gt;on-demand expression evaluations&lt;/A&gt; (e.g. TextBox.Value, Style.*)&lt;BR&gt;-&amp;nbsp;ProcessingScalabilityTime (see AdditionalInfo column)&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;TimeRendering&lt;/STRONG&gt;&lt;BR&gt;The number of milliseconds spent after the Rendering Object Model is exposed to the rendering extension.&amp;nbsp; This value includes:&lt;BR&gt;-&amp;nbsp;Time spent in&amp;nbsp;renderer&lt;BR&gt;-&amp;nbsp;Time spent in pagination modules&lt;BR&gt;-&amp;nbsp;Time spent in &lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2008/08/11/on-demand-report-processing-in-rs-2008.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2008/08/11/on-demand-report-processing-in-rs-2008.aspx"&gt;on-demand expression evaluations&lt;/A&gt; (e.g. TextBox.Value,&amp;nbsp;Style.*).&amp;nbsp;This is different from prior releases, where TimeProcessing included all expression evaluation.&amp;nbsp;&lt;BR&gt;-&amp;nbsp;PaginationScalabilityTime (see AdditionalInfo column)&lt;BR&gt;-&amp;nbsp;RenderingScalabilityTime (see AdditionalInfo column)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Source&lt;BR&gt;&lt;/STRONG&gt;Specifies the type of the execution.&amp;nbsp; It is one of the following values: { &lt;EM&gt;Live, Cache, Snapshot, History, AdHoc, Session, Rdce&lt;/EM&gt; }&lt;BR&gt;Source=Cache indicates a cached execution, i.e. dataset queries are not executed live.&lt;BR&gt;Source=AdHoc indicates either a dynamically generated report model based drillthrough report, or a Report Builder 2.0 report that is previewed on a client utilizing the report server for processing and rendering.&lt;BR&gt;Source=Session indicates a subsequent request within an already established session (e.g. the initial request is to view page 1, and the subsequent request is to export to Excel with the current session state).&amp;nbsp; &lt;BR&gt;Source=Rdce indicates a &lt;A class="" href="http://msdn.microsoft.com/en-us/library/cc281022.aspx#RDCE" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/cc281022.aspx#RDCE"&gt;Report Definition Customization Extension&lt;/A&gt;&amp;nbsp;(RDCE; a new feature in RS 2008) that&amp;nbsp;can dynamically customize a report definition before it is passed to the processing engine upon report execution.&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Status&lt;BR&gt;&lt;/STRONG&gt;&lt;EM&gt;rsSuccess&lt;/EM&gt; if the execution succeeded.&amp;nbsp; &lt;BR&gt;If multiple errors occurred, only the first&amp;nbsp;critical error code is recorded.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;ByteCount&lt;BR&gt;&lt;/STRONG&gt;Number of bytes generated as output streams for this request.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;RowCount&lt;BR&gt;&lt;/STRONG&gt;Number of data set rows processed in this request.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;AdditionalInfo&lt;BR&gt;&lt;/STRONG&gt;In short, an XML property bag containing additional information about the execution.&amp;nbsp; &lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;ExecutionLog2.AdditionalInfo&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;This is where it gets really interesting.&amp;nbsp; A typical value&amp;nbsp;for the AdditionalInfo column may look like this:&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT face="courier new,courier" color=#a31515 size=2&gt;AdditionalInfo&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;ProcessingEngine&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;2&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;ProcessingEngine&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;ScalabilityTime&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Pagination&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;0&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Pagination&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Processing&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;0&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Processing&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;ScalabilityTime&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;EstimatedMemoryUsageKB&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Pagination&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;0&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Pagination&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Processing&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;115&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;Processing&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;EstimatedMemoryUsageKB&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DataExtension&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;SQL&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;1&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;SQL&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;DataExtension&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;AdditionalInfo&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Most frequent / interesting AdditionalInfo entries:&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;ProcessingEngine&lt;/STRONG&gt;&lt;BR&gt;Identifies the version of the processing engine utilized for the report.&amp;nbsp; &lt;BR&gt;1 = Yukon Engine&lt;BR&gt;2 = On-Demand Processing Engine&lt;BR&gt;After a deployment is upgraded to RS 2008, reports will internally auto-upgrade to the latest RDL 2008 schema so that the &lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2008/08/11/on-demand-report-processing-in-rs-2008.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2008/08/11/on-demand-report-processing-in-rs-2008.aspx"&gt;on-demand processing engine&lt;/A&gt; can be used&amp;nbsp;for processing.&amp;nbsp; However, if the auto-upgrade is not possible (e.g. reports that were built with &lt;A class="" href="http://blogs.gotdotnet.com/robertbruckner/archive/2008/12/31/customreportitem.aspx" mce_href="http://blogs.gotdotnet.com/robertbruckner/archive/2008/12/31/customreportitem.aspx"&gt;2005-based CustomReportItem controls&lt;/A&gt;), those particular reports will be processed with the&amp;nbsp;old Yukon engine in a transparent backwards-compatibility mode.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;ScalabilityTime&lt;BR&gt;&lt;/STRONG&gt;A value of 0 indicates that no additional time was spent doing scalability operations and means the request was not under memory pressure.&amp;nbsp; If the value is &amp;gt; 0, it represents the cumulative&amp;nbsp;number of &lt;EM&gt;milliseconds&lt;/EM&gt; spent performing scalability specific operations&amp;nbsp;in a particular report server component to react to memory pressure during the request.&amp;nbsp; &lt;BR&gt;A scalability time value should be set in perspective with the total execution time (TimeEnd - TimeStart) of the request.&amp;nbsp; If a report frequently shows high relative scalability time values, it is a great starting point for optimizing that particular report to reduce memory pressure and optimize the overall system as well.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;EstimatedMemoryUsageKB&lt;/STRONG&gt;&lt;BR&gt;In short, this indicates resource utilization of a report. &lt;BR&gt;A value of 0 indicates&amp;nbsp;memory usage too low to be tracked specifically to minimize the overhead of this algorithm.&amp;nbsp; If the value is &amp;gt; 0, it&amp;nbsp;represents&amp;nbsp;an estimate of the &lt;STRONG&gt;peak&lt;/STRONG&gt; amount of memory, in kilobytes, consumed by a particular component during a request.&amp;nbsp; These memory estimates only include objects allocated via the report server's scalability infrastructure, which is mainly utilized&amp;nbsp;by data size dependent operations such as grouping, sorting, filtering, aggregations, page layout, and rendering operations.&amp;nbsp; Generally, reports with estimated peak memory usage&amp;nbsp;above 10000 (i.e. above 10 MB) for scalable data structures may deserve a closer look from a report design point of view.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;DataExtension&lt;BR&gt;&lt;/STRONG&gt;Identifies which types of data extensions / data sources are utilized by the report.&amp;nbsp; For report models, this is prefixed with "Model:". The numeric value of the element is a counter to determine how many times&amp;nbsp;that particular type of data source is queried.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;Tips for Analyzing ExecutionLog2 Information&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Long running reports&lt;/STRONG&gt;&lt;BR&gt;Which reports have the highest (TimeEnd - TimeStart) values?&amp;nbsp;&lt;BR&gt;If the TimeDataRetrieval is high, the data source could be a bottleneck, or the queries retrieve lots of data.&amp;nbsp; If the there is a high RowCount,&amp;nbsp;lots of data is being retrieved - you might want to review the&amp;nbsp;dataset queries.&amp;nbsp; If high volumes of data&amp;nbsp;are grouped, sorted, and aggregated, high EstimatedMemoryUsageKB values for Processing are very likely.&amp;nbsp; &lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Live Data or Snapshots&lt;BR&gt;&lt;/STRONG&gt;Sorting by the Source field reveals the types of load on the server.&amp;nbsp; If reports don't need to always run with the latest up-to-the-millisecond data (e.g. parameterized reports that report from constant past data, or reports that run from data sources that are only refreshed with delays anyway), consider creating &lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms155849.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms155849.aspx"&gt;history snapshots&lt;/A&gt;,&amp;nbsp;configuring &lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms157146.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms157146.aspx"&gt;execution snapshots&lt;/A&gt;,&amp;nbsp;and/or setup &lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms155927.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms155927.aspx"&gt;caching&lt;/A&gt;. Thereby&amp;nbsp;repeated query executions for the same data are avoided, including&amp;nbsp;certain aspects of report processing.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Discover report patterns&lt;BR&gt;&lt;/STRONG&gt;Sorting by ReportPath and TimeStart may reveal&amp;nbsp;interesting report execution patterns – for example, an expensive report that takes 5 minutes to run is executed every 10 minutes.&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Most popular reports&lt;/STRONG&gt;&lt;BR&gt;Grouping&amp;nbsp;by ReportPath and counting report executions shows the most popular reports.&amp;nbsp; Analyze the results by &lt;EM&gt;Source&lt;/EM&gt; type, and focus on&amp;nbsp;live executions first.&amp;nbsp; Review and optimize the ones with the highest resource utilization (RowCount, TimeDataRetrieval, TimeProcessing, TimeRendering, EstimatedMemoryUsageKB, ScalabilityTime). &lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Users&amp;nbsp;utilizing the report server the most, and their favorite&amp;nbsp;reports &lt;/STRONG&gt;&lt;BR&gt;Group the data by user and look for total report executions, live executions, reports with high resource utilization.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;High resource utilization&lt;BR&gt;&lt;/STRONG&gt;Review reports with the highest resource utilization, particularly those with EstimatedMemoryUsageKB &amp;gt; 50000, ScalabilityTime &amp;gt; 10000.&amp;nbsp; Frequent high&amp;nbsp;values for ScalabilityTime might&amp;nbsp;also point to&amp;nbsp;general high load on the report server, which causes memory pressure for large requests.&amp;nbsp; You might want to review the memory configuration of the report server as well.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Number of bytes/rows returned&lt;BR&gt;&lt;/STRONG&gt;Are there reports that return&amp;nbsp;100,000 and more&amp;nbsp;rows (RowCount), but are only ever viewed interactively (&lt;EM&gt;Format&lt;/EM&gt; = RPL, HTML4.0), and never exported to other formats?&amp;nbsp; If yes, do these reports aggregate data, or just provide a list of several thousand pages of detail data and users only look at the first few pages?&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Large report outputs&lt;/STRONG&gt;&lt;BR&gt;Are there reports with very large outputs (ByteCount)?&amp;nbsp; You might want to investigate e.g. reports with &amp;gt;100&amp;nbsp;MB PDF output.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Report Health&lt;/STRONG&gt;&lt;BR&gt;Sort by Status and look for report executions with Status != rsSuccess, which might indicate missing subreports, expired stored data source credentials, subscription delivery errors, invalid report definitions, etc.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;Quick Tips for Optimizing Reports&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Once you identified great candidates for further individual report design review and optimization, I recommend to utilize EstimatedMemoryUsageKB, ScalabilityTime,&amp;nbsp;TimeDataRetrieval, TimeProcessing, TimeRendering, and ByteCount&amp;nbsp;for gauging the&amp;nbsp;impact a particular optimization has made.&amp;nbsp; In order to reduce noise and improve repeatability of measurements, you should use a separate report server with minimal other user load.&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;My specific report optimization tips of the day: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Subreports&lt;/STRONG&gt;&lt;BR&gt;One of the aspects I usually investigate when optimizing reports&amp;nbsp;is the usage of subreports.&amp;nbsp; Subreports provide a convenient way to reuse reports, but&amp;nbsp;it may make sense to refactor the report design to lift the subreports&amp;nbsp;contents into the main report.&amp;nbsp; Not only does this frequently result in improved performance, it can also provide better control over rendering behavior.&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Splitting large reports into parameterized drillthrough reports&lt;BR&gt;&lt;/STRONG&gt;When reports use large datasets, I have sometimes seen the usage of drilldown group hierarchies (toggles) to provide an initial overview to the report consumer, and enable dynamic drilldown to interesting areas.&amp;nbsp; &lt;BR&gt;What may work really well for those kind of reports is to change the original report to only include data till e.g. the third level of drilldown (and thereby reduce the amount of data retrieved and processed by the initial report, and improve response time).&amp;nbsp; &lt;BR&gt;Then at the innermost drilldown level of the main report, create drillthrough actions with parameters based on the current group values to another report.&amp;nbsp; The drillthrough target report&amp;nbsp;provides further details and drilldown capabilities, but only has to retrieve a small subset of the original data.&amp;nbsp; &lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9258936" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/Scalability/default.aspx">Scalability</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/RS+2008/default.aspx">RS 2008</category></item><item><title>Technical Note Series on Reporting Services Performance and Scalability</title><link>http://blogs.msdn.com/robertbruckner/archive/2008/11/03/technical-note-series-on-reporting-services-performance-and-scalability.aspx</link><pubDate>Tue, 04 Nov 2008 08:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9012461</guid><dc:creator>Robert M. Bruckner</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/robertbruckner/comments/9012461.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robertbruckner/commentrss.aspx?PostID=9012461</wfw:commentRss><description>&lt;CENTER&gt;&lt;A class="" href="http://sqlcat.com/" target=_blank mce_href="http://sqlcat.com"&gt;&lt;IMG title="Click to go to SQLCAT website" style="WIDTH: 272px; HEIGHT: 160px" height=160 alt="Click to go to SQLCAT website" src="http://blogs.msdn.com/photos/robertbruckner/images/9012473/original.aspx" width=272 border=0 mce_src="http://blogs.msdn.com/photos/robertbruckner/images/9012473/original.aspx"&gt;&lt;/A&gt;&amp;nbsp;&lt;/CENTER&gt;
&lt;P&gt;Over the past few months, I contributed to a series of technical notes by my esteemed colleagues &lt;A class="" href="http://denster.spaces.live.com/" target=_blank mce_href="http://denster.spaces.live.com/"&gt;Denny&lt;/A&gt;&amp;nbsp;and &lt;A class="" href="http://blogs.msdn.com/lukaszp" target=_blank mce_href="http://blogs.msdn.com/lukaszp"&gt;Lukasz&lt;/A&gt;&amp;nbsp;on &lt;A href="http://sqlcat.com/" mce_href="http://sqlcat.com/"&gt;http://sqlcat.com/&lt;/A&gt;. The technical notes provide guidance on how to build,&amp;nbsp;deploy, and optimize&amp;nbsp;large scale SQL Server Reporting Services (SSRS)&amp;nbsp;environments.&amp;nbsp; We derived some of the best practices from internal as well as external enterprise SSRS deployments.&lt;/P&gt;
&lt;P&gt;So far, a webcast and three technical notes are available; we are working on (at least) one more.&amp;nbsp;&amp;nbsp;The notes apply to both SQL Server Reporting Services 2005 and 2008, unless a particular section calls out one of the releases explicitly.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;New:&lt;/STRONG&gt; &lt;A class="" href="http://sqlcat.com/presentations/archive/2008/11/03/technet-webcast-building-sql-server-reporting-services-2008-large-scale-solutions-level-400.aspx" target=_blank mce_href="http://sqlcat.com/presentations/archive/2008/11/03/technet-webcast-building-sql-server-reporting-services-2008-large-scale-solutions-level-400.aspx"&gt;&lt;STRONG&gt;TechNet Webcast&lt;/STRONG&gt;&lt;BR&gt;&lt;/A&gt;Webcast summarizing the material of all four technical notes below.&lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://sqlcat.com/technicalnotes/archive/2008/06/05/reporting-services-scale-out-architecture.aspx" target=_blank mce_href="http://sqlcat.com/technicalnotes/archive/2008/06/05/reporting-services-scale-out-architecture.aspx"&gt;&lt;STRONG&gt;Reporting Services Scale-Out Architecture&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;The focus of the technical note is an overview of the Reporting Services scale-out architecture, referenced throughout the technical note series.&lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://sqlcat.com/technicalnotes/archive/2008/06/26/report-server-catalog-best-practices.aspx" target=_blank mce_href="http://sqlcat.com/technicalnotes/archive/2008/06/26/report-server-catalog-best-practices.aspx"&gt;&lt;STRONG&gt;Report Catalog Best Practices&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;Provides guidance and best practices on the report server catalog databases; i.e. the underlying databases that provide metadata (parameters, snapshots, history, etc.) used by Reporting Services to provide your reports. &lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://sqlcat.com/technicalnotes/archive/2008/10/21/reporting-services-scale-out-deployment-best-practices.aspx" target=_blank mce_href="http://sqlcat.com/technicalnotes/archive/2008/10/21/reporting-services-scale-out-deployment-best-practices.aspx"&gt;&lt;STRONG&gt;Scale-Out Deployment Best Practices&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;Provides guidance and best practices on deployment details for scaling out your Reporting Services environment including configurations and the use of File System snapshots. &lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;New: &lt;A class="" href="http://sqlcat.com/technicalnotes/archive/2009/01/14/reporting-services-performance-optimizations.aspx" target=_blank mce_href="http://sqlcat.com/technicalnotes/archive/2009/01/14/reporting-services-performance-optimizations.aspx"&gt;Reporting Services Performance Optimizations&lt;/A&gt;&lt;BR&gt;&lt;/STRONG&gt;This fourth technical note&amp;nbsp;focuses on general considerations for optimizing your entire system.&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;In addition, I&amp;nbsp;put together a blog post about the &lt;A class="" href="http://blogs.gotdotnet.com/robertbruckner/archive/2009/01/05/executionlog2-view.aspx" mce_href="http://blogs.gotdotnet.com/robertbruckner/archive/2009/01/05/executionlog2-view.aspx"&gt;ExecutionLog2&lt;/A&gt;&amp;nbsp;view which provides insights into analyzing and optimizing reports.&amp;nbsp; This is related to what I covered in my very well received&amp;nbsp;CT-27 chalk talk at the Microsoft Business Intelligence Conference recently on "Report Design Tips, Tricks, and Best Practices for Performance and Scalability".&amp;nbsp; I might put together additional postings to cover more of that information - check my postings marked&amp;nbsp;with the "Performance" and/or "Scalability" tags frequently.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Related to these topics, I'd also like to point to one of my initial &lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2008/07/20/Scale-up-improvements-in-reporting-services-2008.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2008/07/20/Scale-up-improvements-in-reporting-services-2008.aspx"&gt;postings&lt;/A&gt; about scale up improvements in Reporting Services 2008.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9012461" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/Scalability/default.aspx">Scalability</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/RS+2008/default.aspx">RS 2008</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/RS+2005/default.aspx">RS 2005</category></item><item><title>On-Demand Report Processing in Reporting Services 2008</title><link>http://blogs.msdn.com/robertbruckner/archive/2008/08/11/on-demand-report-processing-in-rs-2008.aspx</link><pubDate>Tue, 12 Aug 2008 09:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8848402</guid><dc:creator>Robert M. Bruckner</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/robertbruckner/comments/8848402.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robertbruckner/commentrss.aspx?PostID=8848402</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;You may have heard by now that the report processing engine of Reporting Services 2008 works significantly different underneath the covers, compared to previous releases.&amp;nbsp; While I plan to dive into more technical details in future postings, I wanted&amp;nbsp;to provide a few examples upfront explaining why&amp;nbsp;you as a report author or end user&amp;nbsp;might care:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;&lt;STRONG&gt;On-demand processing of reports with many datasets and data regions.&lt;BR&gt;&lt;/STRONG&gt;For instance, if&amp;nbsp;a user only views&amp;nbsp;page one through three, and those pages only refer to data regions / expressions referencing DataSet1, all other data regions bound to other datasets are not necessarily processed immediately.&amp;nbsp; Processing can be delayed&amp;nbsp;until a user&amp;nbsp;navigates to a particular page showing that data region or&amp;nbsp;hitting an expression that references information from those other datasets.&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;&lt;STRONG&gt;Reports with heavy usage of interactivity can be significantly faster.&amp;nbsp; &lt;BR&gt;&lt;/STRONG&gt;The main reason for the speedup is that certain interactivity related calculations (e.g. toggles, drillthrough actions) are now performed on-the-fly as pages are viewed by the user, instead of having to do these upfront before the first page is shown.&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;&lt;STRONG&gt;Faster page-by-page navigation when viewing reports interactively.&amp;nbsp; &lt;BR&gt;&lt;/STRONG&gt;The new architecture allows us to cache a few bytes per page that enable quick restart of pagination of a partially/fully paginated report.&amp;nbsp; As a result, navigating to a page of a report which was already previously accessed during the same session is now faster, particularly the larger the report in size.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You can verify this with a report with several thousand pages.&amp;nbsp; Navigate to the last page of the report (which triggers paginating the entire report), and then try to randomly navigate to any page within the report.&amp;nbsp; Reporting Services 2008 will be faster.&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;STRONG&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;S&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;STRONG&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;ma&lt;/FONT&gt;ller memory footprint.&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;The memory footprint of requests is generally smaller with the on-demand processing engine, particularly for very large reports.&amp;nbsp; However on a system&amp;nbsp;with low load, you may not see any significant working set difference in task manager due to various types of caches utilized within the processing engine.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo1; tab-stops: list .5in"&gt;&lt;STRONG&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;So what is the main architectural difference with on-demand report processing?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;Unlike the RS 2005 processing engine that processed the report as a snapshot evaluating all expressions exactly once upfront (including textbox values, style expressions, etc.), the RS 2008 on-demand processing engine pre-computes and persists only certain invariants, such as grouping, sorting, filtering, aggregates, and report/group variables.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;All other expressions (style expressions, textbox values) are evaluated &lt;B style="mso-bidi-font-weight: normal"&gt;on-demand&lt;/B&gt; based on the invariants, at the time a rendering extension requests a specific page containing those values.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Hence, you could also call it rendering-driven on-demand processing engine.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;You probably now think,&amp;nbsp;thanks that’s&amp;nbsp;nice;&amp;nbsp;and where is the catch? &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;Well, most expressions in a report, particularly textbox values and style expressions, are evaluated on-demand in Reporting Services 2008 as you navigate to a particular page.&amp;nbsp; If you go&amp;nbsp;there multiple times, it might&amp;nbsp;be re-evaluated again.&amp;nbsp; Try this to see the effect of on-demand processing:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;Generate a multi-page report with a textbox value of &lt;FONT face="courier new,courier"&gt;=Now&lt;/FONT&gt; on the first page.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;/SPAN&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;View the first page in HTML and note the textbox timestamp value.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;/SPAN&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Navigate to the second page, then go back to the first page.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;/SPAN&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Note that the textbox was re-evaluated as the first page was rendered again in RS 2008. The timestamp changed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;If you do not want this on-demand behavior&amp;nbsp;in particular cases&amp;nbsp;(e.g. time-dependent calculations, custom code, or expensive calculations requiring caching), you should use so-called Report Variables or Group Variables, and then reference the variable value in the report (e.g. &lt;FONT face="courier new,courier"&gt;=Variables!V1.Value&lt;/FONT&gt;).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Variables&amp;nbsp;are covered in more detail in a &lt;/FONT&gt;&lt;A class="" href="http://blogs.msdn.com/robertbruckner/archive/2008/07/20/Using-group-variables-in-reporting-services-2008-for-custom-aggregation.aspx" mce_href="http://blogs.msdn.com/robertbruckner/archive/2008/07/20/Using-group-variables-in-reporting-services-2008-for-custom-aggregation.aspx"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;previous posting&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;.&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;If it is&amp;nbsp;just about consistent time stamps, you should instead use &lt;FONT face="courier new,courier"&gt;=Globals!ExecutionTime&lt;/FONT&gt;, regardless of the version of Reporting Services&amp;nbsp;(more info on &lt;/FONT&gt;&lt;A class="" href="http://msdn.microsoft.com/en-us/library/ms157274.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms157274.aspx"&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;global built-in collections &lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=tahoma,arial,helvetica,sans-serif&gt;is available on MSDN).&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Among other topics, future postings in the on-demand processing series will also provide report design tips to better leverage the new processing engine in RS 2008. &lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8848402" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/RS+2008/default.aspx">RS 2008</category><category domain="http://blogs.msdn.com/robertbruckner/archive/tags/On-Demand+Processing/default.aspx">On-Demand Processing</category></item></channel></rss>