<?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 : Scalability</title><link>http://blogs.msdn.com/robertbruckner/archive/tags/Scalability/default.aspx</link><description>Tags: Scalability</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>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>Scale-Up Improvements in Reporting Services 2008</title><link>http://blogs.msdn.com/robertbruckner/archive/2008/07/20/Scale-up-improvements-in-reporting-services-2008.aspx</link><pubDate>Mon, 21 Jul 2008 04:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8759880</guid><dc:creator>Robert M. Bruckner</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/robertbruckner/comments/8759880.aspx</comments><wfw:commentRss>http://blogs.msdn.com/robertbruckner/commentrss.aspx?PostID=8759880</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Tahoma&gt;A few months ago, leading up to the release of RC0 of SQL Server 2008, I was involved in working with the &lt;A class="" href="http://sqlcat.com/" target=_blank mce_href="http://sqlcat.com"&gt;SQL Server Customer Advisory Team&lt;/A&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;They were investigating and comparing the scalability of Reporting Services 2005 and Reporting Services 2008, using common customer report scenarios and workloads. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;A more detailed whitepaper is planned for&amp;nbsp;the future, which will also provide the underlying code and test framework so that you could plug-in your own reports, define your&amp;nbsp;workload, and run these tests on your particular hardware and environment.&amp;nbsp;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Tahoma&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Tahoma&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;In the meantime, if you are thinking of moving to Reporting Services 2008, I’d strongly encourage you to read the following technical note titled &lt;/FONT&gt;&lt;A class="" href="http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx" target=_blank mce_href="http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx"&gt;&lt;FONT face=Tahoma&gt;Scaling Up Reporting Services 2008 vs. Reporting Services 2005: Lessons Learned&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Tahoma&gt;.&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Tahoma&gt;The key take away from the Technical Note is that SQL 2008 Reporting Services can scale-up better than SQL 2005 Reporting Services.&amp;nbsp; &lt;/FONT&gt;&lt;FONT face=Tahoma&gt;Summarizing the results, quoting from the technical note:&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;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Tahoma&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Tahoma"&gt;&lt;FONT face=Tahoma&gt;1) "&lt;SPAN style="FONT-FAMILY: 'Tahoma','sans-serif'"&gt;Reporting Services 2008 was able &lt;STRONG&gt;to respond to 3–4 times the total number of users and their requests on the same hardware&lt;/STRONG&gt; without HTTP 503 Service Is Unavailable errors compared with Reporting Services 2005, regardless of the type of renderer."&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Tahoma','sans-serif'; mso-bidi-font-size: 10.0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Tahoma&gt;&lt;SPAN style="mso-bidi-font-size: 10.0pt; mso-bidi-font-family: Tahoma"&gt;2) "&lt;SPAN style="FONT-FAMILY: 'Tahoma','sans-serif'"&gt;With our test workload, &lt;STRONG&gt;Reporting Services 2008&lt;/STRONG&gt; &lt;STRONG&gt;consistently&lt;/STRONG&gt; &lt;STRONG&gt;outperformed Reporting Services 2005 with the PDF and XLS renderers&lt;/STRONG&gt; on the four-processor, quad-core hardware platform (16 cores) both in terms of response time and in terms of total throughput.&lt;/SPAN&gt;"&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Tahoma&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;FONT face=Tahoma&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Tahoma&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Tahoma&gt;The SQL Server Customer Advisory Team did a great job of pulling together report scenarios and workloads, testing on three different hardware platforms, testing a few configuration options, and identifying key results.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;These results validate some of the quite significant work we have been doing in Reporting Services 2008.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Furthermore, note that the scalability testing was performed with a non-optimized pre-release RC0 build of Reporting Services – an RTM deployment of Reporting Services 2008 is expected to show even slightly improved results.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;/FONT&gt;&lt;FONT face=Tahoma&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Tahoma&gt;The underlying architecture has changed considerably in Reporting Services 2008 (e.g. removing IIS dependency), and we added a number of&amp;nbsp;quite significant new capabilities in the report processing engine and rendering extensions (e.g. tablix with arbitrary grouping and flexible layout support, vastly improved scalability support).&amp;nbsp;&amp;nbsp;We have been doing ongoing and extensive performance, throughput, and scalability testing internally within the Reporting Services team – so I guess some of these great results shown in the technical note&amp;nbsp;weren’t all that surprising to members of the RS team.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There was also anecdotal evidence and excitement by customers in blog postings and other forums, impressed with some of the improvements in Reporting Services that were visible as early as with the public SQL Server 2008 CTP release back in July 2007.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Tahoma&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Tahoma&gt;In future postings on this blog, I plan to cover important tips and tricks related to diagnosing and improving performance of complex reports (e.g. involving custom code) in RS 2008.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This will hopefully enable you to even better take advantage of some of the underlying architecture changes in the RS 2008 report processing engine, such as dynamic on-demand processing.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Tahoma&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8759880" width="1" height="1"&gt;</description><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/Upgrade/default.aspx">Upgrade</category></item></channel></rss>