<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Technical Notes</title><link>http://sqlcat.com/technicalnotes/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20910.1126)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/TechnicalNotes" type="application/rss+xml" /><item><title>Initializing a Transactional Replication Subscriber from an Array-Based Snapshot</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/Pz8lPcGdgyg/initializing-a-transactional-replication-subscriber-from-an-array-based-snapshot.aspx</link><pubDate>Mon, 04 May 2009 18:46:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:793</guid><dc:creator>premmehra</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=793</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2009/05/04/initializing-a-transactional-replication-subscriber-from-an-array-based-snapshot.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Benjamin Wright-Jones &lt;br /&gt;&lt;strong&gt;Contributors:&lt;/strong&gt; Ken England, Prem Mehra, Mike Ruthruff, Greg Yvkoff, Qun Guo and Gopal Ashok &lt;br /&gt;&lt;strong&gt;Technical&lt;/strong&gt; &lt;strong&gt;Reviewers:&lt;/strong&gt; Joseph Sack, Jimmy May, Paul Randal (SQLskills.com), Dennis Tighe and Glenn Berry (SQL Server MVP)&lt;/p&gt;
&lt;h4&gt;Overview &lt;/h4&gt;
&lt;p&gt;This article describes how to initialize a transactional replication Subscriber from an array-based snapshot rather than using the native SQL Server snapshot mechanism. Initializing the Subscriber using a SAN-based restore solution is particularly beneficial for very large databases. In this context, I use the term VLDB to mean a database that is typically multi-terabyte and requires specialized administration and management This is primarily because the standard transactional replication initialization process, which is typically restricted by either the network or storage I/O bandwidth, could take longer than the business service-level agreement (SLA) permits because of the time needed to initialize or recover the Subscriber. In contrast, initializing a Subscriber using an array-based snapshot utilizes the Virtual Device Interface (VDI) freeze and thaw mechanism, thereby minimizing recovery time. This procedure is also particularly beneficial in non-production environments that use transactional replication and require repeatable tests with large volumes of data. &lt;/p&gt;
&lt;h4&gt;Scope&lt;/h4&gt;
&lt;p&gt;This procedure was performed using Microsoft SQL Server 2005 Enterprise Edition IA64 with Service Pack 2 (SP2) and cumulative update 9 running on Windows Server 2003 Datacenter Edition IA64. The procedure is expected to be identical in SQL Server 2008; however, this was not tested during the exercise. The storage array was provided by Hitachi Data Systems (HDS), and HDS Split Second was used to manage the array-based snapshots (backup and restore of the databases). VERITAS Storage Foundation HA software was used for volume management. &lt;/p&gt;
&lt;p&gt;It should be emphasized that even though the hardware listed above was used, the principle of initializing a Subscriber from an array-based snapshot can be performed using other storage array network (SAN) vendor technologies – specific implementation details will vary. Microsoft recommends that customers attempting this procedure work closely with an engineer from the storage vendor to ensure the solution are implemented correctly. &lt;/p&gt;
&lt;h4&gt;When Is This Technique Useful? &lt;br /&gt;&lt;/h4&gt;
&lt;p&gt;There may be situations where the Publisher, Distributor, and Subscriber need to be restored after data loss. This technique:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;· &lt;/p&gt;
&lt;p&gt;Minimizes the transactional replication setup time for the Subscriber through the use of the underlying Virtual Device Interface (VDI) storage mechanisms, which reduce the time required to back up and restore large volumes of data. &lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;· Supports repeated benchmark tests to re-establish a test baseline.&lt;/p&gt;
&lt;p&gt;· Provides rapid recovery of the Subscriber if data loss has occurred and the database(s) need to be recovered from a point outside of the distribution retention period.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h4&gt;Background&lt;/h4&gt;
&lt;p&gt;Transactional replication has been available as a feature in SQL Server since version 6.0. Available functionality has grown since this time to include tracer tokens to measure latency, concurrent snapshot processing, and peer-to-peer replication. However, the general premise has remained the same: to replicate a copy or subset of the data to another database. The Publisher, Distributor, and Subscriber terminology is used to describe the nodes within the topology. For more information about replication, see SQL Server Books Online. &lt;/p&gt;
&lt;p&gt;A transactional replication Subscriber can be initialized using one of the following mechanisms:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a) Transactional replication concurrent snapshot processing&lt;/p&gt;
&lt;p&gt;b) Database snapshot (this requires SQL Server 2005 Enterprise Edition with Service Pack 2)&lt;/p&gt;
&lt;p&gt;c) Initialize from log sequence number (LSN) (SQL Server 2008 only)&lt;/p&gt;
&lt;p&gt;d) SQL Server backup (initialize from backup)&lt;/p&gt;
&lt;p&gt;e) Copy of the data or array-based restore&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;A summary of the pros and cons for each technique is presented in a table below.&lt;/p&gt;
&lt;p&gt;Option (a) – Transactional replication concurrent snapshot processing does not require an outage, and it allows production activity to occur on the Publisher while the initialization process is copying the schema and data to the Subscriber. Concurrent snapshot processing does not hold shared locks during snapshot generation, thereby allowing production activity to continue. However, a schema modification lock (Sch-M) is taken for a brief period. In contrast to option (d) and (e), this procedure also has the benefit of only copying the schema and data that is required rather than making a complete copy of the database. &lt;/p&gt;
&lt;p&gt;Option (b) – SQL Server 2005 Enterprise Edition with Service Pack 2 introduced a new snapshot mechanism that permits the initialization of the Subscriber from a database snapshot. The database snapshot functionality was introduced in SQL Server 2005 to provide a read-only static view of the database using sparse files. Before a page is updated in the source database, the original page is copied to the sparse file. Subsequent updates to the same modified page do not prompt a repeat of this procedure. That is, the pre-change copy of a particular page only pushes into the database snapshot once after the database snapshot is created. It is possible to initialize a transactional replication Subscriber from a database snapshot as described above. This procedure is similar to the concurrent snapshot processing described in option (a) in that it permits transactional activity during the initialization procedure. However, although a database snapshot utilizes the sparse file capability of NTFS, with a lot of concurrent updates, the database snapshot may grow. It is important to ensure that sufficient storage space is allocated for the database snapshot sparse files to store data pages that have been updated during the Subscriber initialization period, because the database snapshot stores the pre-updated page images.&lt;/p&gt;
&lt;p&gt;Option (c) – Initialize from LSN was introduced in SQL Server 2008 to aid the configuration of peer-to-peer transactional replication topologies. Initializing from an LSN can also be used in disaster recovery scenarios; instead of performing a full re-initialization of the Subscriber database, you can initialize a Subscriber from an LSN. This means that the Distribution Agent will apply transactions (after the supplied LSN), from the distribution database to the Subscriber, as long as the distribution retention period has been set appropriately. &lt;/p&gt;
&lt;p&gt;Option (d) - A Subscriber can also be initialized from a SQL Server backup. For more information, see “Initializing a Transactional Subscription without a Snapshot” in SQL Server Books Online (&lt;a href="http://msdn.microsoft.com/en-us/library/ms151705.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms151705.aspx&lt;/a&gt;). This approach restores the complete dataset on the Subscriber and does not require an outage for the initialization, as long as the distribution database stores the in-flight transactions that were taken after the backup. Post-configuration administrative procedures may be required to remove unwanted objects and data on the Subscriber database.&lt;/p&gt;
&lt;p&gt;Option (e) - It is also possible to initialize the Subscriber using a copy of the data. The database can be provisioned using any mechanism that will copy the Publisher schema and data to the Subscriber, such as a manual network file copy of the data and log files, a native SQL Server restore, or alternatively, an array-based restore. While this approach does require an outage during the initialization process, an array-based restore is particularly beneficial for very large databases (VLDBs) in either production or benchmark environments where the setup time can be minimized by using the VDI mechanisms. This technique was used to initialize the Subscriber from a HDS-array based snapshot, which is the focus of this article, and is discussed in more detail in the rest of this article. For more information about VDI, see “SQL Server 2005 Virtual Backup Device Interface (VDI) Specification” (&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=416f8a51-65a3-4e8e-a4c8-adfe15e850fc&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=416f8a51-65a3-4e8e-a4c8-adfe15e850fc&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The table below summarizes the pros and cons of the transactional replication snapshot techniques.&lt;/p&gt;
&lt;table class="MsoTableColorfulGridAccent5" style="BORDER-COLLAPSE:collapse;mso-yfti-tbllook:1184;mso-padding-alt:0in 5.4pt 0in 5.4pt;" cellspacing="0" cellpadding="0" class="MsoTableColorfulGridAccent5"&gt;

&lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#b6dde8;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:102pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:102;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:5;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:9pt;COLOR:white;mso-bidi-font-size:11.0pt;mso-themecolor:background1;"&gt;Initialization technique &lt;/span&gt;&lt;/b&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#b6dde8;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:38.1pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:102;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:1;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Online &lt;/span&gt;&lt;/b&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#b6dde8;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.2pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:102;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:1;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Pros &lt;/span&gt;&lt;/b&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#b6dde8;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.25pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:102;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:1;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Cons &lt;/span&gt;&lt;/b&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#b6dde8;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:140.25pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:102;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:1;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Use when &lt;/span&gt;&lt;/b&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:0;"&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#31849b;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:102pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;mso-background-themeshade:191;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:68;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:white;mso-bidi-font-size:11.0pt;mso-themecolor:background1;"&gt;Concurrent snapshot processing &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:38.1pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Yes &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.2pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Available in Workgroup, Standard, and Enterprise editions, allows online processing, generates a snapshot only for published objects. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.25pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Duration of Subscriber initialization is impacted by size of database, network, and so on. DML statements can be expensive. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:140.25pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Online processing is a requirement, storage space is limited on the Subscriber. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:1;"&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#31849b;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:102pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;mso-background-themeshade:191;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:4;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:white;mso-bidi-font-size:11.0pt;mso-themecolor:background1;"&gt;Database snapshot &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#daeef3;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:38.1pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:51;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Yes &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#daeef3;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.2pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:51;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;No locking on the Publisher database, in comparison to concurrent snapshot processing. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#daeef3;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.25pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:51;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Enterprise Edition only. Requires sufficient storage for the snapshot sparse files. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#daeef3;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:140.25pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:51;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Online processing is a requirement, concurrency is essential, sufficient storage exists for the sparse file. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:2;"&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#31849b;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:102pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;mso-background-themeshade:191;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:68;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:white;mso-bidi-font-size:11.0pt;mso-themecolor:background1;"&gt;Initialize from LSN &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:38.1pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Yes &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.2pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Full snapshot not required, allows online processing. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.25pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;SQL Server 2008 Enterprise only, must be able to determine correct LSN. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:140.25pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Only consider if a full snapshot is not feasible and not necessary. May also be suitable for environments that use database mirroring and transactional replication. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:3;"&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#31849b;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:102pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;mso-background-themeshade:191;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:4;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:white;mso-bidi-font-size:11.0pt;mso-themecolor:background1;"&gt;SQL Server Backup &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;(initialize with backup) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#daeef3;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:38.1pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:51;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Yes &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#daeef3;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.2pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:51;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Full snapshot not required, allows online processing. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#daeef3;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.25pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:51;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Restores a complete copy of the database on the Subscriber (for example, requires more storage space) and persists copies of all objects unless removed. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#daeef3;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:140.25pt;PADDING-TOP:0in;BORDER-BOTTOM:white 1pt solid;mso-border-bottom-themecolor:background1;mso-border-bottom-alt:solid white .5pt;mso-background-themecolor:accent5;mso-background-themetint:51;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Data volume is manageable and offline initialization is not an option. Speed of backup and restore is preferable to use of the &lt;b style="mso-bidi-font-weight:normal;"&gt;BCP&lt;/b&gt; utility to copy data. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:4;mso-yfti-lastrow:yes;"&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#31849b;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:102pt;PADDING-TOP:0in;BORDER-BOTTOM:medium none;mso-background-themecolor:accent5;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;mso-background-themeshade:191;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:68;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:white;mso-bidi-font-size:11.0pt;mso-themecolor:background1;"&gt;Copy of data / &lt;br /&gt;array-based restore &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:38.1pt;PADDING-TOP:0in;BORDER-BOTTOM:medium none;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;No &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.2pt;PADDING-TOP:0in;BORDER-BOTTOM:medium none;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Rapid backup/restore of large data volumes, replication snapshot is not required. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:99.25pt;PADDING-TOP:0in;BORDER-BOTTOM:medium none;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Offline processing, must stop transactional activity, requires a complete copy of the data on the Subscriber. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:medium none;PADDING-RIGHT:5.4pt;BORDER-TOP:medium none;PADDING-LEFT:5.4pt;BACKGROUND:#a5d5e2;PADDING-BOTTOM:0in;BORDER-LEFT:medium none;WIDTH:140.25pt;PADDING-TOP:0in;BORDER-BOTTOM:medium none;mso-background-themecolor:accent5;mso-background-themetint:127;mso-border-top-alt:solid white .5pt;mso-border-top-themecolor:background1;"&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;mso-bidi-font-size:11.0pt;mso-themecolor:text1;"&gt;Volume of data is in the terabyte range and backup and restore times are a priority. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Pros and Cons for Transactional Replication Initialization Techniques&lt;/p&gt;
&lt;h4&gt;Setup Procedure – Initializing the Subscriber from an Array-Based Snapshot&lt;/h4&gt;
&lt;p&gt;The procedure to initialize the Subscriber from a copy of the data is similar to using the native SQL Server restore mechanism. However, the array-based approach is more useful for large databases, because hardware implementations of the VDI freeze and thaw mechanism allow large amounts of data to be copied quickly and in a transactionally consistent manner, thereby reducing the restore time.&lt;/p&gt;
&lt;h4&gt;High-Level Steps&lt;/h4&gt;
&lt;p&gt;The following procedure was used to initialize the Subscriber during a high-end benchmark with a multi-terabyte database. The backup and restore of the database was performed using the HDS array capabilities. This includes the use of HDS Split Second, which is a command-line utility developed by Hitachi Consultancy Services. We also tested a full database backup operation with SQL Server 2005. However, this was simply to benchmark the operation for a 17-terabyte database.&lt;/p&gt;
&lt;p&gt;It is important to note that application activity must be paused during this operation, because any change in data at the Publisher will result in data inconsistency. This inconsistency will be raised as an alert in Replication Monitor. One can use &lt;b&gt;tablediff,&lt;/b&gt; a command line utility that returns detailed information about the differences between two tables. It can also generate a Transact-SQL script to bring a subscription into convergence with data at the Publisher. This utility can be used to correct data inconsistencies; however, it is recommended that precautionary steps be put in place to ensure that the application or any other activity cannot write to the Publisher or Subscriber databases during this procedure. These steps are discussed later. Alternatives to this approach that allow transactional activity during the setup procedure include concurrent snapshot processing, initialization from backup, and initialization from a database snapshot. Generating a replication snapshot for this volume of data would take many hours, so we elected to initialize the Subscriber using an array-based restore in order to minimize the movement of data. &lt;/p&gt;
&lt;h4&gt;Initializing the Subscriber&lt;/h4&gt;
&lt;p&gt;The following steps were used to initialize the Subscriber from the array-based restore. The majority of the time was consumed by the backup and restore procedures using HDS Split Second. This was approximately two hours. The other activities were DBA operations to modify and validate the replication metadata. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Pause application activity.&lt;/p&gt;
&lt;p&gt;2. Disable the application login(s) using ALTER LOGIN &amp;lt;login&amp;gt; DISABLE.&lt;/p&gt;
&lt;p&gt;3. Ensure the database is in RESTRICTED_USER WITH ROLLBACK IMMEDIATE mode to clear user connections that may still be in the database. Please note that RESTRICTED_USER does not prevent access to applications run under the context of &lt;b&gt;sysadmin&lt;/b&gt;, &lt;b&gt;dbcreater&lt;/b&gt;, or &lt;b&gt;sysadmin&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;4. Back up the primary (Publisher) database using a storage array-based mechanism.&lt;/p&gt;
&lt;p&gt;5. Restore the primary (Publisher) database on a separate instance using the storage array-based mechanism. This database will become the Subscriber. &lt;/p&gt;
&lt;p&gt;6. Recover the Subscriber database and check the SQL Server error log to verify completion of the recovery operation. &lt;/p&gt;
&lt;p&gt;7. Set the RESTRICTED_USER mode on the subscription database to prevent any user activity. This is simply an additional precautionary step to ensure that applications or users cannot access the database. Please refer to step 3 above, because the same caveat applies. &lt;/p&gt;
&lt;p&gt;8. Enable the NOT FOR REPLICATION value on the Subscriber tables (and any other objects that will be published for replication). The NOT FOR REPLICATION option enables you to specify which database objects are treated differently if a replication agent performs a transactional operation. For example, the identity column value is not incremented if a replication agent performs an insert operation. For more information, see “Controlling Constraints, Identities, and Triggers with NOT FOR REPLICATION” in SQL Server 2005 Books Online (&lt;a href="http://msdn.microsoft.com/en-us/library/ms152529(SQL.90).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms152529(SQL.90).aspx&lt;/a&gt;) or SQL Server 2008 Books Online (&lt;a href="http://msdn.microsoft.com/en-us/library/ms152529.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms152529.aspx&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;9. Create the publication(s) on the Publisher.&lt;/p&gt;
&lt;p&gt;10. Drop any redundant columns on the subscription database using ALTER TABLE DROP COLUMN. For our tests, binary large object (BLOB) columns were dropped, because we did not replicate columns of this data type (primarily to reduce the storage requirement on the Subscriber). We did not drop any other objects, because there were scenarios where we wanted to be able to view or query copies of nonpublished tables on the Subscriber. &lt;/p&gt;
&lt;p&gt;11. Optional: Reclaim storage space on the Subscriber by using DBCC CLEANTABLE in the subscription database and by specifying a batch size to reduce the impact on the transaction log. In previous smaller volume tests, we also reclaimed the BLOB storage space, using DBCC CLEANTABLE with a batch size of 100,000. If a batch size is not specified, DBCC CLEANTABLE processes the whole table in one transaction and the table is exclusively locked during the operation. This can require considerable transaction log space for very large tables. &lt;/p&gt;
&lt;p&gt;12. Create the subscriptions using the &lt;i&gt;replication support only&lt;/i&gt; sync_type of sp_addsubscription. This is a key component of the process, because it indicates that the Subscriber already has a copy of the schema and data and does not require initialization with a replication snapshot. &lt;/p&gt;
&lt;p&gt;13. Perform DBA checks. For this exercise, we used Transact-SQL scripts to ensure that the number of objects marked for publication was consistent with the number of objects marked for replication at the Subscriber. For example:&lt;/p&gt;
&lt;p&gt;-- Count the number of columns with the NOT FOR REPLICATION option set to 1.&lt;/p&gt;
&lt;p&gt;-- Execute this on the Publisher and Subscriber to ensure the count is consistent.&lt;/p&gt;
&lt;p&gt;-- Investigate further if there is a difference.&lt;/p&gt;
&lt;p&gt;USE &amp;lt;Publisher or Subscriber&amp;gt;&lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;p&gt;SELECT COUNT(*) NOT_FOR_REPL_IDENT_Tables&lt;/p&gt;
&lt;p&gt;FROM sys.identity_columns&lt;/p&gt;
&lt;p&gt;WHERE is_not_for_replication = 1&lt;/p&gt;
&lt;p&gt;AND OBJECTPROPERTY(OBJECT_ID, &amp;#39;IsMSShipped&amp;#39;) = 0;&lt;/p&gt;
&lt;p&gt;Similar statements can also be executed for foreign keys, triggers, and constraints that may require this property to be set.&lt;/p&gt;
&lt;p&gt;14. Enable the publication and subscription databases for MULTI_USER activity.&lt;/p&gt;
&lt;p&gt;15. Enable the application login(s); for example, use ALTER LOGIN &amp;lt;login&amp;gt; ENABLE.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;It is advisable to launch Replication Monitor (Sqlmonitor.exe) to verify that the publications are healthy and that the Log Reader and Distribution agents are not reporting any problems. Similarly, posting a tracer token will also provide a good idea of latency between the databases. &lt;/p&gt;
&lt;h4&gt;Restoring the Databases for Repeated Benchmark Tests – Initializing the Subscriber from an Array-Based Snapshot&lt;/h4&gt;
&lt;p&gt;There may be situations where the transactional replication databases need to be restored to a previous point in time, for example, in a benchmark environment to re-establish the baseline for repeated tests. This eliminates the need to re-create the replication objects and also synchronise the Publisher and Subscriber, which can be time-consuming for large databases.&lt;/p&gt;
&lt;p&gt;The procedure is similar to that shown above, with the added advantage that SQL Server transactional replication has already been configured and is functioning correctly. &lt;/p&gt;
&lt;p&gt;The following steps were used to initialize the transactional replication Publisher, Distributor, and Subscriber from the array-based restore prior to each test cycle. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Pause application activity.&lt;/p&gt;
&lt;p&gt;2. Disable the application login(s) by using ALTER LOGIN &amp;lt;login&amp;gt; DISABLE; on both the publication and subscription databases. &lt;/p&gt;
&lt;p&gt;3. Ensure that the Publisher database is in RESTRICTED_USER WITH ROLLBACK IMMEDIATE mode to clear user connections that may still be in the database. Connections under the context of &lt;b&gt;sysadmin&lt;/b&gt;, &lt;b&gt;dbcreator&lt;/b&gt;, or &lt;b&gt;db_owner&lt;/b&gt; will still be allowed. &lt;/p&gt;
&lt;p&gt;4. Stop the SQL Server Agent services on both the Publisher and Subscriber, or disable the Log Reader and Distribution agent jobs to ensure that the array-based backup and restore mechanisms have exclusive access to the database.&lt;/p&gt;
&lt;p&gt;5. Set RESTRICTED_USER mode on the subscription database to prevent any user activity.&lt;/p&gt;
&lt;p&gt;6. Use the HDS array-based restore mechanisms to:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Restore the Publisher database.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b. Restore the distribution database.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c. Restore the Subscriber database.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; For large OLTP databases with high transaction volume, you may observe intermittent I/O in System Monitor or Performance Monitor (perfmon.exe) after the restore and recovery. This is typically due to the GHOST_CLEANUP process, which is removing records that have been marked for deletion. This process can be observed in the sys.dm_exec_requests catalog view. &lt;/p&gt;
&lt;p&gt;7. Start the SQL Agent Service on the Publisher, Distributor, and Subscriber.&lt;/p&gt;
&lt;p&gt;8. Enable the Publisher and Subscriber databases for MULTI_USER activity.&lt;/p&gt;
&lt;p&gt;9. Enable the application login(s); for example, use ALTER LOGIN &amp;lt;login&amp;gt; ENABLE.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;As with the previous procedure, it is recommended that Replication Monitor be launched to verify the health of the publications. The Log Reader and Distribution agents should also be launched before the application logins are enabled. &lt;/p&gt;
&lt;p&gt;The restore of the Publisher, Distributor, and Subscriber databases can be performed in parallel using the HDS array-based restore mechanism. This approach was used to re-establish the baseline for repeated benchmark tests. &lt;/p&gt;
&lt;p&gt;Observations and Data Points&lt;/p&gt;
&lt;p&gt;A number of observations were documented during the initialization of the Subscriber during the benchmark. This relates to both the initial setup as described above and also to repeated tests conducted during the benchmark. Figure 1.0 below provides a graphical illustration to accompany the following data points. Numbers denote phases in figure 1.0.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. The data was first loaded into the primary OLTP database without using transactional replication. &lt;/p&gt;
&lt;p&gt;2. During this data load phase, the data was shadowed to a second set of volumes. Owing to the volume of data, this was deemed the most appropriate mechanism to provision the Subscriber database due to the volume of data. Loading data with transactional replication enabled was not appropriate, because the operation is fully logged regardless of the database recovery model. &lt;/p&gt;
&lt;p&gt;3. After the data load had completed, the volumes were dismounted from the Publisher and mounted on the Subscriber. Transactional replication was then configured using the ‘replication support only’ sync_type parameter to avoid the need for a replication snapshot. &lt;/p&gt;
&lt;p&gt;4. The 17-terabyte Subscriber database was then paired with a set of volumes as a backup. This process took approximately 17 hours. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;A full backup of the 17-terabyte OLTP database using the native SQL Server 2005 backup mechanism took approximately four hours using eight streams. Please note that this was conducted on SQL Server 2005 Enterprise Edition. SQL Server 2008 may offer additional gains due to the native backup compression. For the native SQL Server 2005 backup procedure, the following Transact-SQL script was executed. &lt;/p&gt;
&lt;p&gt;USE [master]&lt;/p&gt;
&lt;p&gt;GO&lt;/p&gt;
&lt;p&gt;DECLARE&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;@DateStr nvarchar(50),&lt;/p&gt;
&lt;p&gt;@Stmt nvarchar(1000),&lt;/p&gt;
&lt;p&gt;@Filepath nvarchar(50),&lt;/p&gt;
&lt;p&gt;@Quote nvarchar(1),&lt;/p&gt;
&lt;p&gt;@Databasename nvarchar(50)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;SET @Quote = char(39)&lt;/p&gt;
&lt;p&gt;SET @Filepath = &amp;#39;DISK=&amp;#39; + @Quote + &amp;#39;&amp;lt;directory&amp;gt;&amp;#39;&lt;/p&gt;
&lt;p&gt;SET @Databasename = &amp;#39;&amp;lt;database&amp;gt;&amp;#39;&lt;/p&gt;
&lt;p&gt;SELECT @DateStr = N&amp;#39;_&amp;#39; +&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;CONVERT(nchar(8),&lt;/p&gt;
&lt;p&gt;getdate(), 112) +&lt;/p&gt;
&lt;p&gt;N&amp;#39;_&amp;#39; +&lt;/p&gt;
&lt;p&gt;RIGHT(N&amp;#39;0&amp;#39; + rtrim(CONVERT&lt;/p&gt;
&lt;p&gt;(nchar(2), datepart(hh, getdate()))), 2) +&lt;/p&gt;
&lt;p&gt;RIGHT(N&amp;#39;0&amp;#39; + rtrim(CONVERT&lt;/p&gt;
&lt;p&gt;(nchar(2), datepart(mi, getdate()))), 2) +&lt;/p&gt;
&lt;p&gt;RIGHT(N&amp;#39;0&amp;#39; + rtrim(CONVERT&lt;/p&gt;
&lt;p&gt;(nchar(2), datepart(ss, getdate()))), 2)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;SELECT @Stmt =&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#39;BACKUP DATABASE &amp;#39; + @databasename + &amp;#39; TO &amp;#39; +&lt;/p&gt;
&lt;p&gt;@Filepath + @databasename + @DateStr + &amp;#39;_1.BAK&amp;#39; + @Quote + &amp;#39;, &amp;#39; +&lt;/p&gt;
&lt;p&gt;@Filepath + @databasename + @DateStr + &amp;#39;_2.BAK&amp;#39; + @Quote + &amp;#39;, &amp;#39; +&lt;/p&gt;
&lt;p&gt;@Filepath + @databasename + @DateStr + &amp;#39;_3.BAK&amp;#39; + @Quote + &amp;#39;, &amp;#39; +&lt;/p&gt;
&lt;p&gt;@Filepath + @databasename + @DateStr + &amp;#39;_4.BAK&amp;#39; + @Quote + &amp;#39;, &amp;#39; +&lt;/p&gt;
&lt;p&gt;@Filepath + @databasename + @DateStr + &amp;#39;_5.BAK&amp;#39; + @Quote + &amp;#39;, &amp;#39; +&lt;/p&gt;
&lt;p&gt;@Filepath + @databasename + @DateStr + &amp;#39;_6.BAK&amp;#39; + @Quote + &amp;#39;, &amp;#39; +&lt;/p&gt;
&lt;p&gt;@Filepath + @databasename + @DateStr + &amp;#39;_7.BAK&amp;#39; + @Quote + &amp;#39;, &amp;#39; +&lt;/p&gt;
&lt;p&gt;@Filepath + @databasename + @DateStr + &amp;#39;_8.BAK&amp;#39; + @Quote +&lt;/p&gt;
&lt;p&gt;&amp;#39; WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 5&amp;#39;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;EXEC (@Stmt)&lt;/p&gt;
&lt;p&gt;You should modify the @Filepath and @Databasename variables if script reuse is intended. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;5. New gold (baseline) backups were occasionally required due to schema changes like indexes or partitioning for performance reasons. This HDS Split Second backup took approximately 30 minutes to complete; this was also a function of how much data had changed since the last restore, because the data had changed during the test cycle. While this backup process typically occurs almost instantaneously in the background, we opted to wait for the completion signal from the array before commencing a new test. SQL Server 2005 differential database backup timings were comparable and took approximately the same amount of time. &lt;/p&gt;
&lt;p&gt;6. Following a test run, a restore of the Publisher, Distributor, and Subscriber databases took approximately two hours. This was also a symptom of the data that had changed during the test. However, approximately one hour and thirty minutes of this duration was due to the import and export of the VERITAS volumes, which was sequential in nature.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The Publisher and Subscriber databases were restored in parallel, thereby reducing the restore time for the repeated benchmark tests. The Distributor could be restored in parallel; however, we opted to conduct this step separately, because we wanted more control over the procedure.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a class="" title="OLE_LINK3" name="OLE_LINK3"&gt;&lt;/a&gt;&lt;span style="FONT-SIZE:11pt;LINE-HEIGHT:115%;"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/InitializingaTransactionalReplicationSub_BC1E/repl_2.jpg"&gt;&lt;img style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="429" alt="repl" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/InitializingaTransactionalReplicationSub_BC1E/repl_thumb.jpg" width="563" border="0" /&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Figure 1.0. Benchmark Data Points&lt;/p&gt;
&lt;p&gt;As previously mentioned, before commencing a test, ensure that the GHOST_CLEANUP process has completed on both the Publisher and Subscriber databases (following a restore), because it may affect I/O measurements taken during the test.&lt;/p&gt;
&lt;h4&gt;Summary &lt;/h4&gt;
&lt;p&gt;Initializing a transactional replication Subscriber from an array-based restore is beneficial when the data volume is very large and the restore and configuration time need to be minimized. Though this can still be achieved using any other restore or data copy mechanism, the benefit of an array-based VDI freeze and thaw, which allows large amounts of data to be copied quickly and in a transactionally consistent manner, significantly reduces backup and restore time.&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=793" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=Pz8lPcGdgyg:DnYpWC9teck:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=Pz8lPcGdgyg:DnYpWC9teck:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/Pz8lPcGdgyg" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Scalability/default.aspx">Scalability</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Transaction+Log/default.aspx">Transaction Log</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Array-Based+Snapshot/default.aspx">Array-Based Snapshot</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Replication/default.aspx">Replication</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Transactional+Replication/default.aspx">Transactional Replication</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2009/05/04/initializing-a-transactional-replication-subscriber-from-an-array-based-snapshot.aspx</feedburner:origLink></item><item><title>Bulk Loading Data into a Table with Concurrent Queries</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/xlZRDSITp1E/bulk-loading-data-into-a-table-with-concurrent-queries.aspx</link><pubDate>Mon, 06 Apr 2009 12:52:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:753</guid><dc:creator>AlexeiK</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=753</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2009/04/06/bulk-loading-data-into-a-table-with-concurrent-queries.aspx#comments</comments><description>&lt;font color="#365f91" size="5" face="Cambria"&gt;
&lt;h6 style="MARGIN:24pt 0cm 0pt;"&gt;&lt;font size="3"&gt;&lt;font color="#243f60"&gt;&lt;em&gt;Authors: &lt;/em&gt;&lt;span style="FONT-STYLE:normal;mso-bidi-font-style:italic;"&gt;Alexei Khalyako, Stuart Ozer&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/h6&gt;
&lt;h6 style="MARGIN:24pt 0cm 0pt;"&gt;&lt;em&gt;&lt;font color="#243f60" size="3"&gt;Contributor: Sanjay Mishra&lt;/font&gt;&lt;/em&gt;&lt;/h6&gt;
&lt;h6 style="MARGIN:24pt 0cm 0pt;"&gt;&lt;em&gt;&lt;font size="3"&gt;&lt;font color="#243f60"&gt;Technical Reviewers: Mark Souza, Denny Lee, Burzin Patel&lt;span style="mso-bidi-font-style:normal;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/h6&gt;
&lt;h1 style="MARGIN:24pt 0cm 0pt;"&gt;&lt;/font&gt;&lt;font color="#365f91" size="5" face="Cambria"&gt;Introduction&lt;/font&gt;&lt;/h1&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;This article describes load scenarios for the common data warehouse scenario in which many queries read data from a table while the table is loaded. The key question that administrator/developer has to answer before deciding on a strategy is whether the read queries can afford to wait. If they can wait, you won’t want to complicate the loading process by running queries simultaneously with the load. However, if you have a business need to run queries while you load data, read on.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;For these tests, we used Microsoft® SQL Server® 2008. We created two identical tables, each containing 18 million rows totaling 2.6 GB. One table was organized as a heap, and the other was organized as a clustered index. These tables were used as targets into which data was bulk inserted. The input data file for the bulk insert had 65,535 rows. We were not concerned about performance differences between loading heaps or indexes; we were looking instead at the impact of queries concurrent with loads.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;One of the test’s goals was to understand whether &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms188277.aspx"&gt;&lt;font size="3" face="Calibri"&gt;read committed snapshot isolation&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt; (RCSI) makes any difference in query concurrency during loads. Does it help keep readers “unblocked” from the loading process? And how does the WITH TABLOCK option affect the bulk loading process? &lt;/font&gt;&lt;/p&gt;
&lt;h1 style="MARGIN:24pt 0cm 0pt;"&gt;&lt;font color="#365f91" size="5" face="Cambria"&gt;Bulk Insert into Heap Table &lt;/font&gt;&lt;/h1&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;For our first test, we loaded data into the heap with RCSI turned off (that is, with the default READ COMMITTED isolation level). &lt;/font&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0cm 0pt;"&gt;&lt;font color="#4f81bd" size="4" face="Cambria"&gt;BULK INSERT Without TABLOCK hint, Read Committed&lt;/font&gt;&lt;/h2&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-latin;"&gt;To imitate a data warehouse workload, we had five concurrent connections executing random SELECT statements on the table. While the SELECT statements were running, we started the bulk load operation. We used the &lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="COLOR:black;"&gt;sys.dm_exec_requests&lt;/span&gt;&lt;/b&gt;&lt;span style="COLOR:black;"&gt; dynamic management view (DMV) to monitor requests on the server, and we observed that&lt;/span&gt;&lt;/span&gt; the BULK INSERT statement was waiting in the queue with LCK_M_IX wait type. Figure 1. shows the output of &lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-latin;"&gt;sys.dm_exec_requests&lt;/span&gt;&lt;/b&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-latin;"&gt; while the &lt;/span&gt;BULK INSERT statement was &lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-latin;"&gt;being blocked by the SELECT statement.&lt;/span&gt; As soon as the BULK INSERT operation started loading data (Figure 2), all SELECT statements were blocked by the BULK INSERT statement until it completed. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="mso-fareast-language:ZH-CN;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure1.jpg" width="650" height="119" /&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Figure 1 : BULK INSERT is waiting for the SELECT statement to complete&lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure2.jpg" width="650" height="136" /&gt;&lt;/font&gt; 
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="mso-fareast-language:ZH-CN;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Figure 2 : BULK INSERT is loading data, and SELECT statements are blocked&lt;/font&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0cm 0pt;"&gt;&lt;font color="#4f81bd" size="4" face="Cambria"&gt;BULK INSERT With TABLOCK hint, Read Committed&lt;/font&gt;&lt;/h2&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;For this test, the same five SELECT statements were running concurrently when we started the bulk insert, but this time we specified the WITH TABLOCK option. This&lt;span style="mso-bidi-font-family:Calibri;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-latin;"&gt; time the &lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="COLOR:black;"&gt;sys.dm_exec_requests&lt;/span&gt;&lt;/b&gt;&lt;span style="COLOR:black;"&gt; DMV indicated that the &lt;/span&gt;BULK&lt;/span&gt; INSERT operation was waiting with the LCK_M_BU wait type (Figure 3). The LCK_M_BU wait type occurs in SQL Server when a task is waiting to acquire a Bulk Update (BU) lock. Just as with our first test, as soon as BULK INSERT started loading data, we saw that the SELECT statements (Figure 4) were blocked by the bulk insert operation. &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="mso-fareast-language:ZH-CN;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure3.jpg" width="1" height="1" /&gt;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure3.jpg" width="650" height="110" /&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Figure 3: BULK INSERT with TABLOCK waiting for the SELECT statement to complete&lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure4.jpg" width="1" height="1" /&gt;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure4.jpg" width="650" height="122" /&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="mso-fareast-language:ZH-CN;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Figure 4: SELECT statements waiting for the BULK INSERT statement with TABLOCK to complete&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;For our second test, we did the same test but with RCSI enabled. We wanted to see whether it would produce different results.&lt;/font&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0cm 0pt;"&gt;&lt;font color="#4f81bd" size="4" face="Cambria"&gt;BULK INSERT Without TABLOCK Hint, Read Committed Snapshot Isolation&lt;/font&gt;&lt;/h2&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;When we loaded data into the heap table without using the TABLOCK hint, we did not observe any waits. We concluded that option provides the maximum amount of concurrency, if you need to load data into a table while you run SELECT queries.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="mso-fareast-language:ZH-CN;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure5.jpg" width="1" height="1" /&gt;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure5.jpg" width="623" height="142" /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Figure 5: BULK INSERT into HEAP table with no TABLOCK hint &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;h2 style="MARGIN:10pt 0cm 0pt;"&gt;&lt;font color="#4f81bd" size="4" face="Cambria"&gt;BULK INSERT with TABLOCK Hint, Read Committed Snapshot Isolation&lt;/font&gt;&lt;/h2&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Despite the fact that &lt;span style="mso-bidi-font-family:Calibri;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-latin;"&gt;we were using RCSI while we were loading data into the table, the &lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="COLOR:black;"&gt;sys.dm_exec_requests&lt;/span&gt;&lt;/b&gt;&lt;span style="COLOR:black;"&gt; DMV indicated that the&lt;/span&gt; BULK INSERT operation was&lt;/span&gt; waiting for a LCK_M_IX lock and that it was being blocked by an active SELECT statement. &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Two other SELECT queries, which were issued &lt;i style="mso-bidi-font-style:normal;"&gt;after&lt;/i&gt; the BULK INSERT command started, were observed waiting on the LCK_M_S lock type. &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="mso-fareast-language:ZH-CN;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure6.jpg" width="648" height="122" /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Figure 6: BULK INSERT into HEAP with the TABLOCK hint &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;As soon as the SELECT statement with session_id 59 (in Figure 6) was completed, BULK INSERT started loading data, with the selects in sessions 55 and 60 continuing to wait until the BULK INSERT command completed.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;We did observe another interesting effect. So far we were dealing only with the BULK INSERT command. But SQL Server 2008 introduced bulk optimization the INSERT INTO … SELECT statement. This operation behaved like BULK INSERT in all the tests on the heap table. The only exception was that if we loaded data into the table using INSERT INTO … SELECT with the TABLOCK hint under RCSI mode, none of the readers was blocked.&lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;table style="MARGIN:auto auto auto 4.9pt;WIDTH:473.9pt;BORDER-COLLAPSE:collapse;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="MsoNormalTable" cellspacing="0" cellpadding="0" class="MsoNormalTable"&gt;

&lt;tr style="HEIGHT:45.75pt;mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:windowtext 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:180.5pt;PADDING-RIGHT:5.4pt;HEIGHT:45.75pt;BORDER-TOP:windowtext 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Isolation level&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:108.9pt;PADDING-RIGHT:5.4pt;HEIGHT:45.75pt;BORDER-TOP:windowtext 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;TABLOCK specified?&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81pt;PADDING-RIGHT:5.4pt;HEIGHT:45.75pt;BORDER-TOP:windowtext 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;TIME to load data (min:sec)&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:103.5pt;PADDING-RIGHT:5.4pt;HEIGHT:45.75pt;BORDER-TOP:windowtext 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;WAIT TYPE&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15.75pt;mso-yfti-irow:1;"&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:windowtext 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:180.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Read Committed&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:108.9pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;NO TABLOCK&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;3:34&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:103.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;font face="Calibri"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;LCK_M_IX&lt;/span&gt;&lt;span style="COLOR:#003300;FONT-SIZE:10pt;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15.75pt;mso-yfti-irow:2;"&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:windowtext 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:180.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Read Committed&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:108.9pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;WITH TABLOCK&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:28&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:103.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;p style="LINE-HEIGHT:normal;MARGIN:0cm 0cm 0pt;" class="MsoNormal"&gt;&lt;font face="Calibri"&gt;LCK_M_BU*&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15.75pt;mso-yfti-irow:3;"&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:windowtext 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:180.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Read Committed Snapshot Isolation&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:108.9pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;NO TABLOCK&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;0:04&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:103.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;NONE&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15.75pt;mso-yfti-irow:4;mso-yfti-lastrow:yes;"&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:windowtext 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:180.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Read Committed Snapshot Isolation&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:108.9pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;WITH TABLOCK&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:03&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:103.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;LCK_M_IX&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;*Very short; difficult to measure how long it was taken&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Table 1: Duration of data loading into the heap table&lt;/font&gt;&lt;/p&gt;
&lt;h1 style="MARGIN:24pt 0cm 0pt;"&gt;&lt;font color="#365f91" size="5" face="Cambria"&gt;BULK INSERT into a Table with Clustered Index&lt;/font&gt;&lt;/h1&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Next, we loaded data into the table with a clustered index and with RCSI turned off. This test didn’t show any surprises and behaved as expected: All read operations were blocked while BULK INSERT was loading data into the table. &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;If RCSI was enabled, no blocking was observed with BULK INSERT running with concurrent read operations. As we expected, enabling RCSI eliminated locks for read operations that allowed simultaneous loading of the data into the table. &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="mso-fareast-language:ZH-CN;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure7.jpg" width="648" height="88" /&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Figure 7: BULK INSERT into a table with a clustered index, no TABLOCK hint, and RCSI turned off &lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure8.jpg" width="648" height="117" /&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="mso-fareast-language:ZH-CN;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Figure 8: BULK INSERT into a table with a clustered index, a TABLOCK hint, and RCSI turned off&lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&lt;img border="0" alt="" src="http://sqlcat.com/blogs/technicalnotes/BulkLoadRCSI/Figure9.jpg" width="648" height="121" /&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;span style="mso-fareast-language:ZH-CN;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Figure 9: BULK INSERT into a table with a clustered index and RCSI enabled&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Figure 9 shows SELECT statements reading from the table while a BULK INSERT is running. BULK INSERT behaved similarly both with and without the TABLOCK hint. This helped us conclude that if you are loading data with RSCI enabled, the TABLOCK hint in the BULK INSERT statement doesn’t play a significant role, as far as concurrency is concerned.&lt;/font&gt;&lt;/p&gt;
&lt;table style="MARGIN:auto auto auto 4.9pt;WIDTH:473.9pt;BORDER-COLLAPSE:collapse;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="MsoNormalTable" cellspacing="0" cellpadding="0" class="MsoNormalTable"&gt;

&lt;tr style="HEIGHT:45.75pt;mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:windowtext 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:180.5pt;PADDING-RIGHT:5.4pt;HEIGHT:45.75pt;BORDER-TOP:windowtext 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Isolation level&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:108.9pt;PADDING-RIGHT:5.4pt;HEIGHT:45.75pt;BORDER-TOP:windowtext 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;TABLOCK specified?&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81pt;PADDING-RIGHT:5.4pt;HEIGHT:45.75pt;BORDER-TOP:windowtext 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;TIME to load data (min:sec)&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:103.5pt;PADDING-RIGHT:5.4pt;HEIGHT:45.75pt;BORDER-TOP:windowtext 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;WAIT TYPE&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15.75pt;mso-yfti-irow:1;"&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:windowtext 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:180.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Read Committed&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:108.9pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;WITH TABLOCK&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;6:49&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:103.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:#003300;FONT-SIZE:10pt;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;LCK_M_IX&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15.75pt;mso-yfti-irow:2;"&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:windowtext 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:180.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Read Committed&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:108.9pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;NO TABLOCK&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;10:18&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:103.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;font face="Calibri"&gt;&lt;span style="COLOR:#003300;FONT-SIZE:10pt;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;LCK_M_X&lt;/span&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15.75pt;mso-yfti-irow:3;"&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:windowtext 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:180.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Read Committed Snapshot Isolation&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:108.9pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;WITH TABLOCK&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;01:01 &lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:103.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;font face="Calibri"&gt;&lt;span style="COLOR:#003300;FONT-SIZE:10pt;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;NONE&lt;/span&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15.75pt;mso-yfti-irow:4;mso-yfti-lastrow:yes;"&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:windowtext 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:180.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Read Committed Snapshot Isolation&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:108.9pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;NO TABLOCK&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;0:48 &lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:windowtext 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:103.5pt;PADDING-RIGHT:5.4pt;HEIGHT:15.75pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;mso-border-left-alt:solid windowtext 1.0pt;"&gt;&lt;font face="Calibri"&gt;&lt;span style="COLOR:#003300;FONT-SIZE:10pt;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;NONE&lt;/span&gt;&lt;span style="COLOR:black;mso-bidi-font-family:Calibri;mso-fareast-language:ZH-CN;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Table 2: Duration of data loading into the table with a clustered index&lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;The only time that readers were blocked by bulk operations was when data was loaded into an &lt;i style="mso-bidi-font-style:normal;"&gt;empty&lt;/i&gt; table with the clustered index built on it. In that special case only, we observed that read operations were blocked by bulk load operations and read operations if they had the LCK_M_SCH_S wait type. This lock was released only after the loading batch was completed. &lt;/font&gt;&lt;/p&gt;
&lt;h1 style="MARGIN:24pt 0cm 0pt;"&gt;&lt;font color="#365f91" size="5" face="Cambria"&gt;Conclusion&lt;/font&gt;&lt;/h1&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;RSCI can provide great benefits, if you are bulk loading into the table with concurrent readers working on it . In most cases, it provides you with the ability to read while bulk loads are performed. Bulk loading does not affect the size of the version store in &lt;b style="mso-bidi-font-weight:normal;"&gt;tempdb&lt;/b&gt; under RCSI; however, RCSI cannot be enabled at the table level. It can be enabled on the entire database only. Therefore you should carefully analyze your workload to ensure that other operations on your database will not cause the &lt;b style="mso-bidi-font-weight:normal;"&gt;tempdb&lt;/b&gt; size to explode.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;Note that RCSI will introduce 14 noncompressible bytes into every row in every table in the database (&lt;/font&gt;&lt;a href="http://blogs.msdn.com/sqlserverstorageengine/archive/2008/03/30/overhead-of-row-versioning.aspx"&gt;&lt;font size="3" face="Calibri"&gt;http://blogs.msdn.com/sqlserverstorageengine/archive/2008/03/30/overhead-of-row-versioning.aspx&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Calibri"&gt;). An alternative strategy for concurrent readers is to execute queries using the READ UNCOMMITTED isolation level (also known as a dirty read), but this requires application changes, and it can deliver transitionally inconsistent results. RCSI requires no application change, and it guarantees consistent results.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;For more information about data loading strategies and scenarios, see the Data Loading Performance Guide at &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd425070.aspx"&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;http://msdn.microsoft.com/en-us/library/dd425070.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=753" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=xlZRDSITp1E:qkqSY-EgBpo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=xlZRDSITp1E:qkqSY-EgBpo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/xlZRDSITp1E" height="1" width="1"/&gt;</description><enclosure url="http://sqlcat.com/technicalnotes/attachment/753.ashx" length="5558" type="image/gif" /><category domain="http://sqlcat.com/technicalnotes/archive/tags/BULK/default.aspx">BULK</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Read+Commited+Snapshot+Isolation/default.aspx">Read Commited Snapshot Isolation</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/RCSI/default.aspx">RCSI</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/BULK+INSERT/default.aspx">BULK INSERT</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Data+Loading/default.aspx">Data Loading</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2009/04/06/bulk-loading-data-into-a-table-with-concurrent-queries.aspx</feedburner:origLink></item><item><title>Scheduling Sub-Minute Log Shipping in SQL Server 2008</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/dPsp7Lz377c/scheduling-sub-minute-log-shipping-in-sql-server-2008.aspx</link><pubDate>Tue, 24 Feb 2009 23:27:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:708</guid><dc:creator>SanjayMishra</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=708</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2009/02/24/scheduling-sub-minute-log-shipping-in-sql-server-2008.aspx#comments</comments><description>&lt;h3&gt;&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Author&lt;/strong&gt;: Sanjay Mishra&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Contributors&lt;/strong&gt;: Mark Scurrell, Richard Waymire&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Technical Reviewers&lt;/b&gt;: Denny Lee, Prem Mehra, Richard Tkachuk, Burzin Patel, Kun Cheng, Peter Carlin, Juergen Thomas, Michael Thomassy, Thomas Kejser, Lubor Kollar, Alexei Khalyako, Peter Scharlock, Nicholas Dritsas, Tom Michaels, Mike Ruthruff, Mike Weiner&lt;/p&gt;  &lt;h3&gt;Overview&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ms187103.aspx"&gt;Log shipping&lt;/a&gt; allows you to automatically take transaction log backups on a primary server, send them to one or more secondary servers, and then restore the transaction log backups on each secondary server. Many Microsoft SQL Server customers have asked for the ability to schedule the log shipping jobs with less than 1 minute frequency. In SQL Server 2005, SQL Server Management Studio user interface allowed the frequency of the scheduled jobs to be 1 minute or more, which meant that the minimum latency of log shipping was as long as 3 minutes (1 minute each for the backup, copy, and restore jobs). Many customers have asked for this latency to be less than 1 minute.&lt;/p&gt;  &lt;p&gt;In this paper we introduce the new sub-minute log shipping capability in SQL Server 2008, and we discuss some considerations you need to be aware of in scheduling frequent log shipping jobs. &lt;/p&gt;  &lt;h3&gt;Introducing Sub-Minute Log Shipping in SQL Server 2008&lt;/h3&gt;  &lt;p&gt;SQL Server 2008 enables log shipping jobs to be scheduled with frequency in seconds. In SQL Server 2008, SQL Server Management Studio and the stored procedures &lt;a href="http://msdn.microsoft.com/en-us/library/ms366342(SQL.90).aspx"&gt;sp_add_jobschedule&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/ms187320(SQL.90).aspx"&gt;sp_add_schedule&lt;/a&gt; allow frequency settings in seconds, minutes, and hours. The minimum frequency is 10 seconds.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/SchedulingSubMinuteLogShippinginSQLServe_D96A/SMLS_Fig1_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="495" alt="SMLS_Fig1" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/SchedulingSubMinuteLogShippinginSQLServe_D96A/SMLS_Fig1_thumb.jpg" width="568" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Figure 1: SQL Server 2008 Log Shipping user interface enables scheduling the jobs in hour, minute, or second frequency&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;Considerations&lt;/h3&gt;  &lt;p&gt;There are some considerations you should be aware of when you set up too frequent log shipping jobs:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The next execution of the job will not start until the previous execution has completed. Let&amp;#8217;s assume you have set the frequency interval of the log backup job to 10 seconds, but one execution of the log backup takes 12 seconds to complete. The next backup job will start at the next scheduled time, which is 20 seconds after the start of the previous backup job. One execution of the job is skipped in this case. &lt;/li&gt;    &lt;li&gt;Every time a log backup is completed, a message similar to the following is shown in the SQL Server ERRORLOG: &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;2009-02-09 15:25:56.94 Backup Log was backed up. Database: Test_LS, creation date(time): 2009/02/09(14:27:24), first LSN: 19:145:1, last LSN: 19:145:1, number of dump devices: 1, device information: (FILE=1, TYPE=DISK: {&amp;#39;\\PRIMARY_DL380\LSBackup\Test_LS_20090209232551.trn&amp;#39;}). This is an informational message only. No user action is required.&lt;/p&gt;    &lt;p&gt;If you take a log backup every 10 or 15 seconds, the SQL Server ERRORLOG flooded with such messages.&lt;/p&gt;    &lt;p&gt;If you don&amp;#8217;t want these messages flooding the SQL Server ERRORLOG, you can enable &lt;a href="http://msdn.microsoft.com/en-us/library/ms188396.aspx"&gt;trace flag 3226&lt;/a&gt;. This trace flag doesn&amp;#8217;t alter the behavior of backup jobs; it just suppresses the backup completion messages, preventing them from getting into the SQL Server ERRORLOG. Note that this trace flag suppresses all backup messages &amp;#8211; database backup as well as transaction log backup.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Information about each backup is also recorded in the &lt;b&gt;msdb&lt;/b&gt; database (the msdb.dbo.backupset, msdb.dbo.backupmediaset, msdb.dbo.backupmediafamily, msdb.dbo.backupfile, and msdb.dbo.backupfilegroup system tables). If you back up too frequently, you can expect these tables to grow faster than usual. You should periodically check the size of these tables and delete or archive the old information as necessary. To delete the old backup history, use the stored procedure &lt;a href="http://technet.microsoft.com/en-us/library/ms188328.aspx"&gt;sp_delete_backuphistory&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;The backup compression feature in SQL Server 2008 provides significant space and time savings. Backup compression results in smaller backups, and it helps improve the performance of all the operations performed by log shipping by providing the following:      &lt;ul&gt;       &lt;li&gt;Faster backup of the transaction log on the primary server. &lt;/li&gt;        &lt;li&gt;Faster copying of the transaction log backup file to the secondary over network. &lt;/li&gt;        &lt;li&gt;Faster restore of the log backup on the secondary. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;However, the benefits of backup compression come with the cost of higher CPU utilization. If your log backup jobs use compression and are scheduled too frequently, you may notice frequent spikes in CPU utilization on the primary. Restoring from a compressed backup uses more CPU, and you could see frequent spikes in CPU utilization on the secondary as well. For more information about backup compression, see &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/04/21/tuning-the-performance-of-backup-compression-in-sql-server-2008.aspx"&gt;Tuning the Performance of Backup Compression in SQL Server 2008&lt;/a&gt; and &lt;a href="http://sqlcat.com/technicalnotes/archive/2009/02/16/tuning-backup-compression-part-2.aspx"&gt;Tuning Backup Compression Part 2&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;SQL Server 2008 provides the ability to schedule log shipping jobs as frequently as 10 seconds, which results in reduced latency of log shipping. Reduced log shipping latency can result in reduced data loss in case of loss of primary.&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=708" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=dPsp7Lz377c:-ahieojQT8w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=dPsp7Lz377c:-ahieojQT8w:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/dPsp7Lz377c" height="1" width="1"/&gt;</description><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2009/02/24/scheduling-sub-minute-log-shipping-in-sql-server-2008.aspx</feedburner:origLink></item><item><title>Tuning Backup Compression Part 2</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/cupY1-lY8Mw/tuning-backup-compression-part-2.aspx</link><pubDate>Mon, 16 Feb 2009 18:24:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:682</guid><dc:creator>SanjayMishra</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=682</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2009/02/16/tuning-backup-compression-part-2.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;Authors&lt;/b&gt;: Sanjay Mishra, Mike Ruthruff&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Technical Reviewers&lt;/b&gt;: Steve Schmidt, Mike Purtell, Mark Souza, Juergen Thomas, Peter Scharlock, Burzin Patel, Prem Mehra, James Podgorski, Joseph Sack, Alexey Yeltsov, Tom Davidson, Thomas Kejser, Lindsey Allen, Yuriy Toropov, Glenn Berry (SQL Server MVP)&lt;/p&gt;
&lt;h3&gt;Overview&lt;/h3&gt;
&lt;p&gt;This is the second part of the article &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/04/21/tuning-the-performance-of-backup-compression-in-sql-server-2008.aspx"&gt;Tuning the Performance of Backup Compression in SQL Server 2008&lt;/a&gt;. In the first part we described the benefits of backup compression, a methodology on how to tune backup compression for best performance, and shared some best practices. In this second part, we describe some more considerations in tuning backup compression, and how backup compression interacts with other important features in Microsoft SQL Server 2008. Specifically, we will discuss the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tuning BUFFERCOUNT and MAXTRANSFERSIZE &lt;/li&gt;
&lt;li&gt;Memory used by backup compression &lt;/li&gt;
&lt;li&gt;Backup compression and log shipping &lt;/li&gt;
&lt;li&gt;Backup compression and data compression &lt;/li&gt;
&lt;li&gt;Backup compression and transparent data encryption &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Understanding the tuning techniques and the interoperability of backup compression with other features discussed in this article can help you get the best out of the backup compression feature.&lt;/p&gt;
&lt;h3&gt;Tuning BUFFERCOUNT&lt;/h3&gt;
&lt;p&gt;As described in &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/04/21/tuning-the-performance-of-backup-compression-in-sql-server-2008.aspx"&gt;Part 1&lt;/a&gt; of the article, default BUFFERCOUNT is determined by SQL Server based on the number of database volumes and backup devices. If the database files are spread across several disk volumes and/or there are a large number of backup devices, the default BUFFERCOUNT value may provide optimal backup performance, and you may not need to tune BUFFERCOUNT further. As discussed in Part 1, you can use the trace flags 3605 and 3213 to find out the default BUFFERCOUNT value used in your backup. However, if the database files are spread across too few disk volumes and/or there are a small number of backup devices, the default BUFFERCOUNT value may not provide optimal backup performance. Tuning BUFFERCOUNT explicitly may improve backup performance. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig1_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="269" alt="Part2Fig1" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig1_thumb.jpg" width="619" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 1: Backup time and CPU utilization with varying BUFFERCOUNT&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As illustrated in Figure 1, increasing BUFFERCOUNT results in reduced backup time, at the cost of higher CPU utilization. Your results may vary depending upon your database size, storage layout, and server capacity; however, you will notice that the impact of increasing BUFFERCOUNT on backup performance tends to reduce as BUFFERCOUNT is increased beyond a certain value. In our test, the curve tends to flatten out as we increase BUFFERCOUNT beyond 50. &lt;/p&gt;
&lt;p&gt;BUFFERCOUNT value impacts the amount of memory used for backup (discussed later in the section “Memory Utilization by Backup”). Keep this in mind if you explicitly specify the BUFFERCOUNT value.&lt;/p&gt;
&lt;h3&gt;Tuning MAXTRANSFERSIZE&lt;/h3&gt;
&lt;p&gt;MAXTRANSFERSIZE refers to the size of the I/O operation issued to read data from the database files. The default value of MAXTRANSFERSIZE is 1 MB. Performance of sequential I/O operations generally benefit from larger block sizes, which is the reason the value is set to 1 MB by default. One drawback of larger I/O sizes is the potential impact on performance of the smaller I/Os being issued concurrently by an OLTP workload. Because I/O queue structures are shared, intermixing large I/O sizes with smaller concurrent I/O requests results in increased latency for both. In today’s shared storage network environments, there is potential for these operations to also impact other hosts sharing the same physical devices. Tuning this parameter is likely unnecessary in hardware configurations using dedicated storage, and it may be necessary only if it is determined that the backup operations impact concurrent workloads. As recommended in Part 1 of the article, tuning MAXTRANSFERSIZE should be considered as a secondary tuning option, and it should only to be utilized when it is determined to be beneficial through testing. In the majority of deployments, the default value will be acceptable. &lt;/p&gt;
&lt;p&gt;Figure 2 illustrates observations of backup performance using various transfer sizes. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig2_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="308" alt="Part2Fig2" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig2_thumb.jpg" width="622" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 2: Backup time and throughput with varying MAXTRANSFERSIZE (BUFFERCOUNT = 50, 1 Backup Device)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As illustrated in Figure 2, smaller MAXTRANSFERSIZE (64 KB) results in lower backup throughput and hence longer backup time, and as you increase MAXTRANSFERSIZE, you observe reduced backup time and higher throughput. However, the impact of increasing MAXTRANSFERSIZE on backup performance tends to reduce as MAXTRANSFERSIZE is increased beyond a certain value. In our tests, we observed optimal backup performance when MAXTRANSFERSIZE was between 128 KB and 512 KB. Your results may vary based on your I/O configuration (throughput and latency of your I/O subsystem). &lt;/p&gt;
&lt;p&gt;Similar to the BUFFERCOUNT setting, the value chosen for MAXTRANSFERSIZE will also impact the amount of memory used for backup operation (discussed later).&lt;/p&gt;
&lt;h3&gt;Memory Utilization by Backup&lt;/h3&gt;
&lt;p&gt;As discussed in Part 1 of the article, memory used by backup buffers comes from virtual address space outside the buffer pool. On 32-bit systems, there is a fixed amount of virtual address space set aside outside of the buffer pool (default of 384 MB); increasing BUFFERCOUNT and MAXTRANSFERSIZE options to high values may fail because the memory for backup operations is calculated and set aside at the beginning of the operation. &lt;/p&gt;
&lt;p&gt;On 64-bit systems, the virtual address space for any process can be up to 8 TB which is far beyond the physical memory supported on current 64-bit version of Windows. As a result, memory for allocations outside the buffer pool does not have to be set aside at the time SQL Server is started and is potentially unlimited. Setting an appropriate value for ‘max server memory’ using SP_CONFIGURE is recommended on 64-bit deployments of SQL Server to ensure that enough physical memory will be available to support allocations outside the buffer pool for backup operations. &lt;/p&gt;
&lt;p&gt;Trace flags 3605 and 3213 can be used to report the number of buffers used for backup operations to the SQL Server ERRORLOG. The following example shows the information that is reported in the ERRORLOG when these trace flags are enabled. &lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;LogDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcessInfo Text&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Backup/Restore buffer configuration parameters&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Memory limit: 32761MB&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;BufferCount: 100&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;MaxTransferSize: 2048 KB&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Min MaxTransferSize: 64 KB&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Total buffer space: 200 MB&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tabular data device count: 1&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fulltext data device count: 0&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Filestream device count: 0&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TXF device count: 0&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Filesystem i/o alignment: 512&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Media Buffer count: 100&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Media Buffer size: 2048KB&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:42:13.700 spid53&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Encode Buffer count: 100&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="2"&gt;2009-01-16 12:45:41.820 Backup&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Database backed up. Database: TESTPART, creation date(time): 2008/11/06(12:31:03), pages dumped: 1295126, first LSN: 158:223:37, last LSN: 158:239:1, number of dump devices: 1, device information: (FILE=1, TYPE=DISK: {&amp;#39;R:\Backup\TESTPART_Compressed.bak&amp;#39;}). This is an informational message only. No user action is required.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;For an uncompressed backup, the total memory used by the backup buffers can be computed as BUFFERCOUNT multiplied by MAXTRANSFERSIZE. Compressed backup needs three sets of buffers – one set of buffers are used to read from the database files, the second set of buffers are used to compress the data, and the third set of buffers are used to write to the backup media. Therefore, a compressed backup will utilize three times as much memory as the uncompressed backup.&lt;/p&gt;
&lt;p&gt;You can observe the memory used by the backup task by monitoring the “Process:Private Bytes” counter for the “sqlservr” process in the Reliability and Performance Monitor (also known as Perfmon). Figure 3 displays this Perfmon counter for a compressed backup, with no other workload. As illustrated in Figure 3, you will see an increase in the Private Bytes counter during the backup task. This increase is equal to (BUFFERCOUNT * MAXTRANSFERSIZE) for uncompressed backups, and equal to (3 * BUFFERCOUNT * MAXTRANSFERSIZE) for compressed backups. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig3_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="372" alt="Part2Fig3" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig3_thumb.jpg" width="603" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 3: Memory used by a backup compression operation, as measured by Perfmon&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Another observation from Figure 3 is that this memory is allocated at the beginning of the backup operation, and it is released when the backup is complete.&lt;/p&gt;
&lt;h3&gt;Backup Compression and Log Shipping&lt;/h3&gt;
&lt;p&gt;Performance of log shipping will also benefit from compressed backups. &lt;a href="http://technet.microsoft.com/en-us/library/ms187103.aspx"&gt;Log shipping&lt;/a&gt; sends transaction log backups from a primary server to a secondary server by copying log backup files to a network share to be applied to the secondary server. When backup compression is used, transaction log backups are compressed. The reduction in file size for log backups improves performance of all the operations performed by log shipping:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Backup the transaction log on the primary server. &lt;/li&gt;
&lt;li&gt;Copy the transaction log backup file to the secondary server over the network. &lt;/li&gt;
&lt;li&gt;Restore the log backup on the secondary server. &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;The transaction log backups during log shipping can be compressed in one of the following two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you are using SQL Server Management Studio to setup log shipping, set the backup compression setting by selecting &lt;b&gt;Compress backup&lt;/b&gt; from the &lt;b&gt;Set backup compression &lt;/b&gt;list, as shown in Figure 4. If you have set backup compression as the default server level setting (&lt;a href="http://technet.microsoft.com/en-us/library/bb677250.aspx"&gt;sp_configure option backup compression default&lt;/a&gt;), you can pick the “Use default server setting” option as well. &lt;/li&gt;
&lt;li&gt;If you are using the stored procedures to set up log shipping, set the parameter @backup_compression of stored procedure &lt;a href="http://technet.microsoft.com/en-us/library/ms182718.aspx"&gt;sp_add_log_shipping_primary_database&lt;/a&gt; to 1. If you have set backup compression as the default server level setting, you can set this parameter to 2. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig4_4.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="576" alt="Part2Fig4" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig4_thumb_1.jpg" width="564" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 4: Compressing transaction log backups for log shipping&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Figure 5 provides a data point from a customer deployment. The compressed log backup is significantly smaller and faster.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig5_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="266" alt="Part2Fig5" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig5_thumb.jpg" width="570" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 5: Compression of transaction log backup for log shipping (default values for BUFFERCOUNT and MAXTRANSFERSIZE, 1 backup device)&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Backup Compression and Data Compression&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc280449.aspx"&gt;Data compression&lt;/a&gt; is a feature of SQL Server 2008 that can save disk space by compressing data pages within the database. A commonly asked question is “Are there additional benefits realized by the use of compressed backup operations when data compression is used (both compression ratio and performance of the backup operation)?”&lt;/p&gt;
&lt;p&gt;In this test, all tables and indexes were compressed in the database, and then the performance of backup compression was measured. Separate tests were run with no compression, ROW compression applied to all tables/indexes, and PAGE compression applied to all tables/indexes. Figure 6 compares the size of the compressed backup, backup compression ratio, and backup time for databases that contain NONE, ROW, and PAGE compressed tables and indexes.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig6_4.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="330" alt="Part2Fig6" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig6_thumb_1.jpg" width="578" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 6: Backup compression with data compression (BUFFERCOUNT = 50, MAXTRANSFERSIZE = default, 4 backup devices)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Some observations from the results of Figure 6:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Backup compression can result in additional disk space savings even on databases that contain ROW or PAGE compressed tables or indexes. The size of the compressed backup and the backup compression ratio depend upon the characteristics of the data in the database, and they can vary from the results shown in these examples. &lt;/li&gt;
&lt;li&gt;Backup operations on databases that use ROW or PAGE compression will likely result in shorter backup times, because the smaller database size translates into less I/O. &lt;/li&gt;
&lt;li&gt;CPU consumption during the backup operation for databases that use ROW or PAGE compression may be higher as a result of less I/O, which results in more CPU time for compression operations. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Backup Compression and Transparent Data Encryption&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/bb934049.aspx"&gt;Transparent data encryption&lt;/a&gt; (TDE) is another very useful feature in SQL Server 2008. TDE provides encryption of data in a database at the storage level without requiring any application changes. A common question related to this is “How does backup compression perform against an encrypted database?”&lt;/p&gt;
&lt;p&gt;In the example below, backup compression was performed against a database with TDE enabled. Figure 7 compares the size of the backup, CPU consumption, and backup time for compressed and uncompressed backups on the TDE-enabled database.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig7_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="275" alt="Part2Fig7" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TuningBackupCompressionPart2_921D/Part2Fig7_thumb.jpg" width="579" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 7: Backup compression with TDE (BUFFERCOUNT = default, MAXTRANSFERSIZE = default, 1 backup device)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We made the following observations when we performed compressed backup against TDE-enabled databases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On a TDE-enabled database, backup compression doesn’t help reduce the size of the backup. The backup compression ratio is nearly 1.0, independent of the data in the database. This is due to the fact that encrypted data does not lend itself well to backup compression. &lt;/li&gt;
&lt;li&gt;CPU utilization for the compressed backup is higher than the uncompressed backup, even though the backup size is not much different. This is because CPU resources are wasted in the compressed backup operation, because it attempts to compress the data, even though the data is not very compressible. &lt;/li&gt;
&lt;li&gt;On a TDE-enabled database, it takes longer to perform a compressed backup than it takes to perform an uncompressed backup. This is due to the fact that I/O operations are not reduced, because the data does not compress well. However, there is time spent attempting to compress the incoming data. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;For these reasons, we do not recommend the use of backup compression on a TDE-enabled database.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Backup compression is one of the most popular features in SQL Server 2008 Enterprise. Most SQL Server deployments will benefit from this feature; it can reduce both the time taken to perform the backup operation and the disk space required to store database backups. Understanding the tuning techniques and considerations described in Part 1 of the article as well as the interoperability of backup compression with other features discussed in this article can help you get the best out of the backup compression feature.&lt;/p&gt;
&lt;h3&gt;Appendix A: Test Hardware and Software&lt;/h3&gt;
&lt;p&gt;All tests (except those in Figure 4 and Figure 6) were performed on the following hardware and software environment.&lt;/p&gt;
&lt;h4&gt;Server&lt;/h4&gt;
&lt;p&gt;HP DL380G5 with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2 socket quad core &lt;/li&gt;
&lt;li&gt;Intel Xeon CPU E5345 @2.33 GHz &lt;/li&gt;
&lt;li&gt;16 GB RAM &lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;Storage&lt;/h4&gt;
&lt;p&gt;EMC Symmetrix DMX-4 2500&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data volumes &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;4 data volumes from a disk group with &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;32 disk drives, 300 GB each @15K RPM &lt;/li&gt;
&lt;li&gt;RAID 1+0 &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;li&gt;Backup volume &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;1 backup volume from a disk group (separate from data volumes) with&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;32 disk drives, 300 GB each @15K RPM &lt;/li&gt;
&lt;li&gt;RAID 1+0&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;li&gt;~2 HBAs (4 Gb Fiber Channel) &lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;Software&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;The 64-bit edition of Windows Server 2008 Enterprise &lt;/li&gt;
&lt;li&gt;The 64-bit edition of SQL Server 2008 Enterprise &lt;/li&gt;&lt;/ul&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=682" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=cupY1-lY8Mw:f8PreveC2SQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=cupY1-lY8Mw:f8PreveC2SQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/cupY1-lY8Mw" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Database/default.aspx">Database</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/I_2F00_O/default.aspx">I/O</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Configuration/default.aspx">Configuration</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/backup/default.aspx">backup</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Backup+Compression/default.aspx">Backup Compression</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Log/default.aspx">Log</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Transaction+Log/default.aspx">Transaction Log</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Transparent+Data+Encryption/default.aspx">Transparent Data Encryption</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Encryption/default.aspx">Encryption</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Data+Compression/default.aspx">Data Compression</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/TDE/default.aspx">TDE</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2009/02/16/tuning-backup-compression-part-2.aspx</feedburner:origLink></item><item><title>Reporting Services Performance Optimizations</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/CLkOOP7QuzI/reporting-services-performance-optimizations.aspx</link><pubDate>Wed, 14 Jan 2009 18:47:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:616</guid><dc:creator>denny.lee</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=616</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2009/01/14/reporting-services-performance-optimizations.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;Building and Deploying Large Scale SQL Server Reporting Services Environments Technical Note Series&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Authors: Denny Lee, Lukasz Pawlowski &lt;br /&gt;Contributors: Robert Bruckner, James Wu, John Gallardo, Dean Kalanquin&lt;/p&gt;
&lt;h4&gt;Introduction&lt;/h4&gt;
&lt;p&gt;This technical note is part of the &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/06/05/reporting-services-scale-out-architecture.aspx"&gt;&lt;i&gt;Building and Deploying Large Scale SQL Server Reporting Services Environments technical note series&lt;/i&gt;&lt;/a&gt;, which provides general guidance on how to set up, implement, and optimize an enterprise scale-out architecture for your Reporting Services environment. This note provides guidance for Reporting Services in both Microsoft® SQL Server® 2005 and SQL Server 2008. The focus of this technical note is to optimize your Reporting Services architecture for better performance and higher report execution throughput and user loads. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Architecture&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;Figure 1&lt;/b&gt; represents a typical scale-out Reporting Services environment; as noted by the red box, the focus of this technical note is that of &lt;b&gt;Performance Optimization&lt;/b&gt; of your scale-out deployment.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/image_472EF6DB.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;WIDTH:596px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;HEIGHT:315px;BORDER-LEFT-WIDTH:0px;" title="image" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/image_thumb_5DA19562.png" width="646" height="347" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 1&lt;/strong&gt;: Reporting Services Scale-Out Architecture&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Should You Use 64-Bit?&lt;/h4&gt;
&lt;p&gt;Yes.&lt;/p&gt;
&lt;p&gt;Why, you ask? The answer can be divided into two different sections – how 64-bit helps your report server catalog performance and how it helps your report server performance.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;How 64-bit Helps Your Report Server Catalog Performance&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Remember that your report server catalogs are SQL Server databases, so your standard database techniques for optimizing SQL Server databases come into play here, as noted in the &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/06/26/report-server-catalog-best-practices.aspx"&gt;Report Server Catalog Best Practices&lt;/a&gt; technical note. Since SQL Server 2005, the database has been written natively for 64-bit and it is able to make use of the additional addressable memory.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;How 64-bit Helps Your Report Server Service&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;For your report servers, the answer is slightly more complicated. As a general statement, most of your Reporting Services reports are memory-intensive, and the additional addressable memory made available by 64-bit will provide you with more scale. Note that for some workloads, 32-bit can execute faster, especially in scenarios where you have many small reports. But if you have more memory made available by 64-bit, you can handle more concurrent report users. Because there is less memory contention, report throughput will be higher; that is, you can allow more users to view and export larger reports. In SQL Server 2005 Reporting Services, each report’s data set is placed into memory; the more concurrent reports, the more memory used. If you use 32-bit, you can easily hit the 3 GB ceiling, which can also result in Internet Information Services (IIS) process recycles, leading to report failure. &lt;/p&gt;
&lt;p&gt;But as noted in the &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/10/21/reporting-services-scale-out-deployment-best-practices.aspx"&gt;Reporting Services Scale-Out Deployment Best Practices&lt;/a&gt; technical note, SQL Server 2008 Reporting Services is not memory-bound. It is able to effectively use the file system in order to move data structures in and out of memory and the file system if the report server experiences memory pressure. These memory limits are explicitly configurable in SQL Server 2008 Reporting Services via RSReportServer.config, as noted in the &lt;i&gt;Memory Configurations for SQL Server 2008 Reporting Services &lt;/i&gt;section below. When Reporting Services uses the file system, the reports run more slowly, because it is much more efficient to request data from the memory than from disk. The file system is used only if Reporting Services memory usage gets close to the configured memory limits. If you overload the report server in SQL Server 2008 Reporting Services with a large number of concurrent users and/or very large reports, all of your reports can still complete processing, albeit more slowly, because Reporting Services can hold all of this data without running out of memory space. In enterprise environments, you will eventually run into situations where your servers will need to be able to handle many concurrent users and a large load – the optimization in SQL Server 2008 Reporting Services (in comparison to SQL Server 2005 Reporting Services) is that while the reports may run slower at times, they will complete.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Exceptions&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Keep in mind that certain data providers are not available for 64-bit (for example, the Microsoft JET provider or certain third-party providers). In these cases, customers will need to continue using 32-bit for their Reporting Services environment. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Handling a Large Workload&lt;/h4&gt;
&lt;p&gt;As noted in the previous section, the two main issues concerning enterprise reporting environments are the ability to handle concurrent user load and the ability to handle a large workload (that is, large reports). To help mitigate the concurrency issue, your solution is to scale out to multiple report servers to handle the user query load, as noted in the &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/10/21/reporting-services-scale-out-deployment-best-practices.aspx"&gt;Reporting Services Scale-Out Deployment Best Practices&lt;/a&gt; technical note.&lt;/p&gt;
&lt;p&gt;To get the highest performance when handling large workloads that include user requests for large reports, implement the following recommendations.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Control the Size of Your Reports&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;You will first want to determine the purpose of these reports and whether a large multipage report is even necessary. If a large report is necessary, how frequently will it be used? If you provide users with smaller summary reports, can you reduce the frequency with which users attempt to access this large multipage report? Large reports have a significant processing load on the report server, the report server catalog, and report data, so it is necessary to evaluate each report on a case-by-case basis.&lt;/p&gt;
&lt;p&gt;Some common problems with these large reports are that they contain data fields that are not used in the report or they contain duplicate datasets. Often users retrieve more data than they really need. To significantly reduce the load placed on your Reporting Services environment, create summary reports that use aggregates created at the data source, and include only the necessary columns. If you want to provide data feeds, you can do this asynchronously using more appropriate tools, such as SQL Server Integration Services, to provide the file data feed. &lt;/p&gt;
&lt;p&gt;&lt;u&gt;Use Cache Execution&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;As noted in the &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/10/21/reporting-services-scale-out-deployment-best-practices.aspx"&gt;Reporting Services Scale-Out Deployment Best Practices&lt;/a&gt;, if you have reports that do not need to have live execution, enable the cache execution setting for each of your appropriate reports. This setting causes the report server to cache a temporary copy of those reports in memory. &lt;/p&gt;
&lt;p&gt;&lt;u&gt;Configure and Schedule Your Reports&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;For your large reports, use the &lt;b&gt;Report Execution Timeouts &lt;/b&gt;setting to control how long a report can execute before it times out. Some reports simply need a long time to run, so timeouts will not help you there, but if reports are based on bad or runaway queries, execution timeouts ensure that resources are not being inappropriately utilized.&lt;/p&gt;
&lt;p&gt;If you have large reports that create data processing bottlenecks, you can mitigate resource contention issues by using &lt;b&gt;Scheduled Snapshots&lt;/b&gt;. Instead of the report data itself, a regularly scheduled report execution snapshot is used to render the report. The scheduled snapshot can be executed during off-peak hours, leaving more resources available for live report users during peak hours.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Deliver Rendered Reports for Nonbrowser Formats&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;The rendering performance of nonbrowser formats such as PDF and XLS has improved in SQL Server 2008 Reporting Services, as noted in the &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx"&gt;Scaling Up Reporting Services 2008 vs. Reporting Services 2005: Lessons Learned&lt;/a&gt; technical note. Nevertheless, to reduce the load on your SQL Server Reporting Services environment, you can place nonbrowser format reports onto a file share and/or SharePoint® team services, so users can access the file directly instead of continually regenerating the report.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Prepopulate the Report Cache by Using Data-Driven Subscriptions for Parameterized Reports&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;For your large parameterized reports, you can improve performance by prepopulating the report cache using data-driven subscriptions. Data-driven subscriptions enable easier population of the cache for set combinations of parameter values that are frequently used when the parameterized report is executed. Note that if you choose a set of parameters that are not used, you take on the cost of running the cache with little value in return. Therefore, to identify the more frequent parameter value combinations, analyze the ExecutionLog2 view as explained below. Ultimately, when a user opens a report, the report server can now use a cached copy of the report instead of creating the report on demand. You can schedule and populate the report cache by using data-driven subscriptions. For more information, see &lt;a href="http://msdn.microsoft.com/en-us/library/ms155927.aspx"&gt;Report Caching in Reporting Services&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Back to the Report Catalogs&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;You can also increase the sizes of your report server catalogs, which allows the databases to store more of the snapshot data. For more information, see &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/06/26/report-server-catalog-best-practices.aspx"&gt;Report Server Catalog Best Practices&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Tuning the Web Service&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;IIS and Http.sys tuning helps get the last incremental performance out of the report server computer. The low-level options allow you to change the length of the HTTP request queue, the duration that connections are kept alive, and so on. For large concurrent reporting loads, it may be necessary to change these settings to allow your server computer to accept enough requests to fully utilize the server resources. &lt;/p&gt;
&lt;p&gt;You should consider this only if your servers are at maximum load and you do not see full resource utilization or if you experience connection failures to the Reporting Services process. To do this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For SQL Server 2005 Reporting Services, &lt;a href="http://technet2.microsoft.com/windowsserver/en/library/d92d338e-efdc-4e11-83a7-9af34c8bb5291033.mspx?mfr=true"&gt;tune IIS&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;For SQL Server 2008 Reporting Services, tune Http.sys within the operating system: &lt;a href="http://download.microsoft.com/download/2/8/0/2800a518-7ac6-4aac-bd85-74d2c52e1ec6/tuning.doc"&gt;Windows® 2003&lt;/a&gt; or &lt;a href="http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Perf-tun-srv.docx"&gt;Windows 2008&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Monitoring by Using ExecutionLog2&lt;/h4&gt;
&lt;p&gt;The Reporting Services ExecutionLog2 view is a good starting point from which to analyze your current workloads and understand its dataset size, performance, and complexity characteristics. For more information, see Robert Bruckner’s blog, which provides extensive details on the ExecutionLog2 view (&lt;a href="http://blogs.msdn.com/robertbruckner/archive/2009/01/05/executionlog2-view.aspx"&gt;http://blogs.msdn.com/robertbruckner/archive/2009/01/05/executionlog2-view.aspx&lt;/a&gt;). For more information about query and reporting on report execution log data, see SQL Server Books Online (&lt;a href="http://msdn.microsoft.com/en-us/library/ms155836.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms155836.aspx&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In particular, this view contains a new &lt;b&gt;AdditionalInfo&lt;/b&gt; column. ExecutionLog2.AdditionalInfo contains information related to the size of memory-pressure responding data structures. One way this information can be useful is to check whether you have reports with high values (10s, or 100s of MBs) – these reports might be candidates for further review, focusing on the design of those reports and the dataset query sizes.&lt;/p&gt;
&lt;p&gt;Below are some tips on how to view the ExecutionLog2 view to quickly understand potential performance bottlenecks. &lt;a href="http://sqlcat.com/files/folders/598/download.aspx"&gt;Linked&lt;/a&gt; is the &lt;b&gt;Review Execution Logs&lt;/b&gt; Reporting Services project, which creates summary and detail Reporting Services reports on the last 1,000 entries into the ExecutionLog2 view, with the sorting options noted below.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/image_62A3D311.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;" title="image" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/image_thumb_41B0606A.png" width="529" height="227" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 2:&lt;/strong&gt; Review Execution Logs (ExecutionLog2) Summary Report&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/image_3A14CB30.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;WIDTH:650px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;HEIGHT:194px;BORDER-LEFT-WIDTH:0px;" title="image" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/image_thumb_321D28CE.png" width="700" height="219" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 3:&lt;/strong&gt; Review Execution Logs (ExecutionLog2) Details Report&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Long-Running?&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Sorting by &lt;b&gt;ElapsedSec&lt;/b&gt; or &lt;b&gt;RowCount &lt;/b&gt;helps you identify long-running reports. If the value for &lt;b&gt;TimeDataRetrieval&lt;/b&gt; is high, the data source is your bottleneck, and you may want to optimize. If the there is a high value for &lt;b&gt;RowCount&lt;/b&gt;, a lot of data is being retrieved and aggregated by Reporting Services – perhaps have your data source do this to reduce the load on your report server.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Subscriptions or Interactive?&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Sorting by the &lt;b&gt;RequestType&lt;/b&gt; field allows you to determine whether you have a lot of subscriptions; you can then determine the bottlenecks and stagger-schedule the reports (that is, schedule the subscription execution times of the reports at different times).&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Live Data or Snapshots?&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Sorting by the &lt;b&gt;Source&lt;/b&gt; field allows you to determine whether your reports are typically live data or snapshots. If the reports can be snapshots (for example, yesterday’s report), create snapshots so you can avoid query execution, report processing, and report rending.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Load Balanced?&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Sorting by the &lt;b&gt;Instance&lt;/b&gt; field can help you see whether your network load balancer is handling report requests in a balanced fashion. You can also see if some nodes are down or not processing requests.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Discover Report Patterns&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Sorting by &lt;b&gt;ReportPath&lt;/b&gt; and &lt;b&gt;TimeStart&lt;/b&gt; can help you to find interesting report patterns – for example, an expensive report that takes 5 minutes to run is executed every 10 minutes. &lt;/p&gt;
&lt;p&gt;&lt;u&gt;Report Health&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;You can sort by status to determine if you have a high number of failures that occurred before (for example, incorrect RDL) or after (for example, subscription delivery error) the report is processed. This can also help you identify reports where there is outdated information or settings (for example, expired data source passwords or missing subreports). &lt;/p&gt;
&lt;p&gt;In addition, if ScalabilityTime &amp;gt; 0, Reporting Services is in scale mode, which means that it is under heavy memory pressure and will start pushing long-running reports to the file system to ensure enough memory to complete smaller query requests. If this happens frequently, consider trying one of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reduce the size of the dataset.&lt;/li&gt;
&lt;li&gt;Simplify the grouping, filtering, or sorting logic in the report to use less memory.&lt;/li&gt;
&lt;li&gt;Add more memory.&lt;/li&gt;
&lt;li&gt;Add more servers to better handle the load.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Data-Driven Subscriptions&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Based on all of this information, you can then create your own data-driven subscriptions that can sort, filter, and track your issues. For example, you can create a subscription that alerts you if Errors &amp;gt; 5%. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Memory Configurations for SQL Server 2008 Reporting Services &lt;/h4&gt;
&lt;p&gt;As alluded to above in the 64-bit section, memory in SQL Server 2008 Reporting Services is used more efficiently at the data structure level. Under intensive workload pressures, it uses a file system cache in order to reduce memory utilization. By being more efficient and writing to disk, it can process more report executions (even large reports) successfully. The administrator uses settings to determine when SQL Server 2008 Reporting Services starts to use the file system cache and how aggressively the cache is used. The administrator should consider configuring memory settings for the SQL Server 2008 Reporting Services to optimally use their computer resources. Fine-tuning these settings can provide an increase in performance under intensive workload over the default configuration. &lt;/p&gt;
&lt;p&gt;For more information, see SQL Server 2008 Books Online: &lt;a href="http://msdn.microsoft.com/en-us/library/ms159206.aspx"&gt;Configuring Available Memory for Report Server Applications&lt;/a&gt;&lt;a title="_Hlt209409089" name="_Hlt209409089"&gt;&lt;/a&gt;&lt;a title="_Hlt209409090" name="_Hlt209409090"&gt;&lt;/a&gt;. The key memory configurations are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;WorkingSetMinimum&lt;/b&gt;: This is the minimum amount of memory that Reporting Services makes available in order for it to perform its task; that is, it does not use the file system cache if SQL Server Reporting Services process memory utilization is below this limit. It is configured as a KB value within the RSReportServer.config file. After this threshold is hit, Reporting Services responds to memory pressure by having long-running requests use the file system cache and smaller queries use memory. &lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;For many concurrent users, you can potentially increase this configuration value after it hits peak performance, enabling more process requests to be completed within memory instead of the file system. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;WorkingSetMaximum&lt;/b&gt;: This is the maximum amount of physical memory Reporting Services will use; it is also configured as a KB value within the RSReportServer.config file. After this threshold is hit and exceeded for a period of time, Reporting Services recycles the app domains to reduce memory utilization. This will ensure that there is enough memory left for the operating system to complete its task. You can increase this value if you want to process more reports concurrently.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;MemorySafetyMargin &lt;/b&gt;and&lt;b&gt; MemoryThreshold&lt;/b&gt;: These values define how aggressively the file system cache is used. &lt;b&gt;MemorySafetyMargin&lt;/b&gt; defines the boundary between low-pressure and medium-pressure scenarios, with a default value of 80%. &lt;b&gt;MemoryThreshold &lt;/b&gt;defines the boundary between medium-pressure and high-pressure scenarios, with a default value of 90%. Both are configured within the RSReportServer.config file. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;In general, if you are constantly hitting memory thresholds, it is recommended that you consider scaling up (adding more memory, altering these configuration values) and then scaling out. You should scale up first because resources are better managed in SQL Server 2008 Reporting Services, as noted above and in &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx"&gt;Scaling Up Reporting Services 2008 vs. Reporting Services 2005: Lessons Learned&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Memory Configurations for SQL Server 2005 Reporting Services &lt;/h4&gt;
&lt;p&gt;As noted in the &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/06/05/reporting-services-scale-out-architecture.aspx"&gt;Reporting Services Scale-Out Architecture&lt;/a&gt; technical note, you can scale up by adding more memory as well. But the impact may not be as dramatic; one scenario might see a doubling of memory and CPU (to 16 GB RAM and 8 cores) with only 1/3 increase in capacity. Nevertheless, there are things you can still do to scale up SQL Server 2005 Reporting Services prior to scaling out.&lt;/p&gt;
&lt;p&gt;As with SQL Server 2008 Reporting Services, you can use memory configurations to address memory threshold issues. There are two primary memory configurations in SQL Server 2005 Reporting Services that we recommend you change if you’re constantly hitting memory thresholds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;MemoryLimit&lt;/b&gt;: This configuration is similar to &lt;b&gt;WorkingSetMinimum&lt;/b&gt; in SQL Server 2008. Its default is 60% of physical memory. Increasing the value helps Reporting Services handle more requests. After this threshold is hit, no new requests are accepted.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MaximumMemoryLimit&lt;/b&gt;: This configuration is similar to &lt;b&gt;WorkingSetMaximum&lt;/b&gt; in SQL Server 2008. Its default is 80% of physical memory. But unlike the SQL Server 2008 version, when its threshold is met, it starts aborting processes instead of rejecting new requests.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;While we do recommend memory configuration changes if you’re constantly hitting memory thresholds, note that changing these values might create or exacerbate other resource contentions. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;This concludes our four-part “Building and Deploying Large Scale SQL Server Reporting Services Environments” technical note series. We hope that this set of technical notes will help you design, manage, and maintain your enterprise SQL Server Reporting Services environments.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=616" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=CLkOOP7QuzI:icGiDBoA640:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=CLkOOP7QuzI:icGiDBoA640:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/CLkOOP7QuzI" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Scalability/default.aspx">Scalability</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2009/01/14/reporting-services-performance-optimizations.aspx</feedburner:origLink></item><item><title>Diagnosing Transaction Log Performance Issues and Limits of the Log Manager</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/t0RD95E-T0M/diagnosing-transaction-log-performance-issues-and-limits-of-the-log-manager.aspx</link><pubDate>Tue, 09 Dec 2008 20:28:17 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:561</guid><dc:creator>Lindsey.allen</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=561</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2008/12/09/diagnosing-transaction-log-performance-issues-and-limits-of-the-log-manager.aspx#comments</comments><description>&lt;h6&gt;Author: Mike Ruthruff &lt;/h6&gt;  &lt;h6&gt;Technical Reviewers: Benjamin Wright-Jones, Peter Byrne, Kun Cheng, Burzin Patel, Sanjay Mishra, Mark Souza, Michael Thomassy, Lubor Kollar, Prem Mehra &lt;/h6&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;Overview &lt;/h4&gt;  &lt;p&gt;For transactional workloads I/O performance of the writes to the SQL Server transaction log is critical to both throughput and application response time. This document discusses briefly how to determine if I/O to the transaction log file is a performance bottleneck and how to determine if this is storage related; a limitation is due to log manager itself or a combination of the two. Concepts and topics described in this paper apply mainly to SQL Server 2005 and SQL Server 2008. &lt;/p&gt;  &lt;h4&gt;Monitoring Transaction Log Performance &lt;/h4&gt;  &lt;p&gt;To determine if I/O performance of transaction log writes is a problem there are several tools which can help quickly isolate bottlenecks related to the log writes. These are:&lt;/p&gt;  &lt;p&gt;1. &lt;b&gt;SQL Server Dynamic Management Views (DMV&amp;#8217;s).&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;a. &lt;b&gt;sys.dm_os_wait_stats&lt;/b&gt;: This DMV exposes a number of wait types documented &lt;a href="http://msdn.microsoft.com/en-us/library/ms179984.aspx"&gt;here&lt;/a&gt;. The wait type most relevant the current discussion is WRITELOG. WRITELOG waits represent the time waiting on a log I/O to complete after a COMMIT has been issued by the transaction. When observed these should be an indication I/O performance and characteristics of the log writes should be pursued. &lt;/p&gt;  &lt;p&gt;b. &lt;b&gt;sys.dm_io_pending_io_requests: &lt;/b&gt;This DMV exposes outstanding I/O requests at the individual I/O level. Documentation for this DMV can be found &lt;a href="http://msdn.microsoft.com/en-us/library/ms188762.aspx"&gt;here&lt;/a&gt;. In scenarios where the SQL Server transaction log file is not on a dedicated volume this DMV can be used to track the number of outstanding I/O&amp;#8217;s at the file level. If the transaction log is on a dedicated logical volume this information can be obtained using Performance Monitor counters. More details on both are given below. &lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;2. &lt;b&gt;Window Performance Monitor &amp;#8220;SQL Server:Databases&amp;#8221; Object.&lt;/b&gt; This performance monitor object contains several counters specific to performance of a transaction log for a specific database. In many cases these can provide more detailed information about log performance as the granularity is at the log level regardless of the logical storage configuration. The specific counters are: &lt;/p&gt;  &lt;p&gt;a. Log Bytes Flushed/sec &lt;/p&gt;  &lt;p&gt;b. Log Flushes/sec - (i.e. I/O operation to flush a log record to the transaction log)&lt;/p&gt;  &lt;p&gt;c. Log Flush Wait Time &lt;/p&gt;  &lt;p&gt;3. &lt;b&gt;Windows Performance Monitor &amp;#8220;Logical or Physical Disk&amp;#8221; Objects. &lt;/b&gt;There are five counters that should be considered in any I/O analysis:&lt;/p&gt;  &lt;p&gt;a. Current Disk Queue Length &lt;/p&gt;  &lt;p&gt;b. Avg. Disk/sec Read, Avg. Disk/Write &lt;/p&gt;  &lt;p&gt;c. Avg. Disk Bytes/Read, Avg. Disk Bytes/Write &lt;/p&gt;  &lt;p&gt;d. Disk Reads/sec, Disk Writes/sec&lt;/p&gt;  &lt;p&gt;e. Disk Read Bytes/sec, Disk Write Bytes/sec &lt;/p&gt;  &lt;p&gt;The key counters to monitor with respect to log performance are the Current Disk Queue Length and Avg. Disk/sec Write.&lt;/p&gt;  &lt;p&gt;These are the primary tools which are used to monitor I/O performance of the transaction log and diagnose any bottlenecks related to transaction log throughput. When troubleshooting any performance issue it is critical to look first at the complete overall system performance before focusing on any individual item. For the purpose of this discussion we will focus on diagnosing transaction log performance.&lt;/p&gt;  &lt;h4&gt;How Do I Determine if I Have a Log Bottleneck?&lt;/h4&gt;  &lt;p&gt;The quickest way to determine if you think performance issues are related to transaction log performance is to monitor sys.dm_os_wait_stats for high waits on WRITELOG. It is important to understand that this counter is cumulative since SQL Server was last restarted so monitoring deltas of these values over specific time periods is necessary to provide meaningful details.&lt;/p&gt;  &lt;p&gt;There are two primary questions to answer when investigating a performance issue which is suspected to be log related. &lt;/p&gt;  &lt;p&gt;1. Is the performance of the I/O subsystem adequate to provide healthy response times to I/O issued against the log?&lt;/p&gt;  &lt;p&gt;2. Am I hitting any limits imposed by SQL Server related to transaction log behavior?&lt;/p&gt;  &lt;p&gt;In the majority of experiences observed related to I/O performance issues, improperly sized or poorly configured storage is the primary contributor to I/O issues. This can be made worse by queries which are not tuned and issue more I/O than necessary affecting everyone using the I/O subsystem. In addition, there are other factors that will have some impact on log including things such as transactional replication, log backups, mirroring, storage level replication etc...&lt;/p&gt;  &lt;p&gt;With respect to #1 our recommendation for response time on the log device should be in the range of &amp;lt;1ms to 5ms. It is important to keep I/O response time on log devices as low as possible which is the primary reason we recommend isolating logs from data files on separate physical spindles. Writes to the transaction log are sequential in nature and benefit by being isolated on to separate physical devices. In today&amp;#8217;s modern storage environments there are many considerations which may make this impractical so in the absence of the ability to do this focus on keeping response times in the healthy range. &lt;/p&gt;  &lt;h4&gt;Limits of the Log Manager &lt;/h4&gt;  &lt;p&gt;Within the SQL Server engine there are a couple limits related to the amount of I/O that can be &amp;#8220;in-flight&amp;#8221; at any given time; &amp;#8220;in-flight&amp;#8221; meaning log data for which the Log Manager has issued a write and not yet received an acknowledgement that the write has completed. Once these limits are reached the Log Manager will wait for outstanding I/O&amp;#8217;s to be acknowledged before issuing any more I/O to the log. These are hard limits and cannot be adjusted by a DBA. The limits imposed by the log manager are based on conscious design decisions founded in providing a balance between data integrity and performance.&lt;/p&gt;  &lt;p&gt;There are two specific limits, both of which are per database. &lt;/p&gt;  &lt;p&gt;1. &lt;b&gt;Amount of &amp;#8220;outstanding log I/O&amp;#8221; Limit. &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;a. SQL Server 2008: limit of 3840K at any given time &lt;/p&gt;  &lt;p&gt;b. Prior to SQL Server 2008: limit of 480K at any given time &lt;/p&gt;  &lt;p&gt;c. Prior to SQL Server 2005 SP1: based on the number of outstanding requests (noted below) &lt;/p&gt;  &lt;p&gt;2. &lt;b&gt;Amount of Outstanding I/O limit. &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;a. SQL Server 2005 SP1 or later (including SQL Server 2008 ): &lt;/p&gt;  &lt;p&gt;i. 64-bit: Limit of 32 outstanding I/O&amp;#8217;s &lt;/p&gt;  &lt;p&gt;ii. 32-bit: Limit of 8 outstanding I/O&amp;#8217;s&lt;/p&gt;  &lt;p&gt;b. Prior to SQL Server 2005 SP1: Limit of 8 outstanding I/O&amp;#8217;s (32-bit or 64-bit)&lt;/p&gt;  &lt;p&gt;Either of the above limits being reached will cause the suspension of the Log I/O until acknowledgments are received. Below are two examples which illustrate the above and provide guidance on how to determine how isolate whether or not these limits are being reached. &lt;/p&gt;  &lt;h5&gt;Example 1&lt;/h5&gt;  &lt;p&gt;This example illustrates the limit of 32 outstanding I/O&amp;#8217;s on the 64-bit edition of SQL Server 2008. The Current Disk Queue Length counter is represented by the black line in the graph. The workload was executing approximately 14,000 inserts per second with each insert being a single transaction. The workload was generated using a multi-threaded client. The disk response time in this example is averaging 2ms. High wait times on WRITELOG were observed as this workload throughput level was approached suggesting investigation of disk throughput on the log device. This led us to investigate if the 32 outstanding I/O limit was the cause. &lt;/p&gt;  &lt;p&gt;In Figure 1 below we can see the limit of 32 outstanding I/O&amp;#8217;s clearly being reached.&amp;#160; We can also determine it is the limit of outstanding I/O&amp;#8217;s vs. the limit of 480K &amp;#8220;outstanding log I/O&amp;#8221; based on the following calculations (averages over this period of time as observed via Performance Monitor).&lt;/p&gt;  &lt;p&gt;&amp;#183; (9.6MB Log Bytes Flushed/sec)/(5000 Log Flushes/sec) = ~1.9K per Flush&lt;/p&gt;  &lt;p&gt;&amp;#183; (32 Outstanding I/O&amp;#8217;s)*(1.9K per Flush) = ~60K &amp;#8220;in-flight&amp;#8221; at any given time (far below the limit)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/DiagnosingTransactionLogPerformanceIssue_AF5E/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="477" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/DiagnosingTransactionLogPerformanceIssue_AF5E/image_thumb.png" width="624" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Figure 1: Performance Monitor graph illustrating the limit of 32 outstanding I/O&amp;#8217;s&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;In this particular scenario the Current Disk Queue Length could be utilized to diagnose the bottleneck because the log resided on its own logical volume (in this case H:\) . As discussed above, if the log did not reside on a dedicated logical volume, an alternative approach to diagnosing the limit being encountered would have been to use the sys.dm_io_pending_io_requests DMV discussed previously. &lt;/p&gt;  &lt;p&gt;The following is a sample query that could be used to monitor a particular log file. This query needs to be run in the context of the database being monitored. It is worth noting that the results returned by this query are transient in nature and polling at short intervals would likely be needed for the data to be useful much in the same way performance monitor samples the disk queue.&lt;/p&gt;  &lt;p&gt;select vfs.database_id, df.name, df.physical_name&lt;/p&gt;  &lt;p&gt;,vfs.file_id, ior.io_pending&lt;/p&gt;  &lt;p&gt;,ior.io_handle, vfs.file_handle&lt;/p&gt;  &lt;p&gt;from sys.dm_io_pending_io_requests ior&lt;/p&gt;  &lt;p&gt;inner join sys.dm_io_virtual_file_stats (DB_ID(), NULL) vfs on (vfs.file_handle = ior.io_handle)&lt;/p&gt;  &lt;p&gt;inner join sys.database_files df on (df.file_id = vfs.file_id)&lt;/p&gt;  &lt;p&gt;where df.name = &amp;#39;[&lt;b&gt;&lt;i&gt;Logical Log File Name&lt;/i&gt;&lt;/b&gt;]&amp;#39;&lt;/p&gt;  &lt;h5&gt;&lt;/h5&gt;  &lt;p&gt;For this example, the best strategy to resolve or optimize the transaction log performance would be to isolate the transaction log file on a storage device which was not impacted by the checkpoint operations. In our storage configuration this was not possible and shared components (specifically array controllers) were the primary source of the problem. &lt;/p&gt;  &lt;h5&gt;Example 2&lt;/h5&gt;  &lt;p&gt;This example is a little more complicated but illustrates the limit of 480K &amp;#8220;in-flight&amp;#8221; data running SQL Server 2005 SP2 (64-bit edition). This was observed during a benchmark of a high throughput OLTP application supporting approximately 15,000 concurrent users. Characteristics of this application were a bit different in that the log flush sizes were much larger due to logging of larger transactions (including BLOB data). Again, high waits on the WRITELOG wait type were observed pointing in the direction of investigating I/O performance of the log device. &lt;/p&gt;  &lt;p&gt;One important item to note when considering this data is that the log behavior over this period of time is spiky in nature and it is during the spikes the limits are encountered. If we look at averages over the problem time period we see the following&lt;/p&gt;  &lt;p&gt;&amp;#183; (4,858,000 Log Bytes Flushed/sec)/(124 Log Flushes/sec) = 39,177 bytes per flush &lt;/p&gt;  &lt;p&gt;&amp;#183; 5.4 ms per log flush but there are spikes. This is on the edge of health latency for the log.&lt;/p&gt;  &lt;p&gt;&amp;#183; Current Disk Queue Length shows spikes and when Current Disk Queue Length * Bytes per flush is close to 480KB then we will start to see the Log Manager throttle the writes (observed as higher wait times on WRITELOG). &lt;/p&gt;  &lt;p&gt;Figure 2 illustrates this although it is not as obvious to see as the pervious example. The correlation to watch for is (Average Bytes per Flush) * (Current Disk Queue Length) near the 480K limit.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/DiagnosingTransactionLogPerformanceIssue_AF5E/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="453" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/DiagnosingTransactionLogPerformanceIssue_AF5E/image_thumb_1.png" width="583" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Figure 2: Performance Monitor graph illustrating the limit of 480K outstanding log I/O data&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;A strategy for resolving this problem would be to work on the storage configuration to bring the latency on the log writes to a lower average. In this particular scenario, log latency was impacted by the fact that synchronous storage replication was occurring at the block level from the primary storage array to a second array. Disabling storage level replication reduces the log latency from the 5ms range to the range of &amp;lt;1ms however disaster recovery requirements for zero data loss made this not an option for the production environment. &lt;/p&gt;  &lt;p&gt;It is worth noting that this was observed on SQL Server 2005 SP2 and migrating to SQL Server 2008 resolved the bottleneck since the limit in SQL 2008 is 8 times that of SQL Server 2005.&lt;/p&gt;  &lt;p&gt;In either example reducing log latency is critical to increasing the transactional throughput. In very high throughput scenarios at the extreme end we have observed customers approaching this by alternative methods including 1) utilizing minimal logging capabilities of SQL Server when possible and 2) scaling out the transaction log through partitioning data into multiple databases. &lt;/p&gt;  &lt;h4&gt;Summary&lt;/h4&gt;  &lt;p&gt;The above provides information on limits imposed by the SQL Server Log Manager. These limits are based on conscious design decisions founded in providing a balance between data integrity and performance. When troubleshooting performance issues related to log performance, always consider optimizing the storage configuration to provide the best response time possible to the log device. This is critical to transactional performance in OLTP workloads. &lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=561" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=t0RD95E-T0M:qRI5TrrzGIc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=t0RD95E-T0M:qRI5TrrzGIc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/t0RD95E-T0M" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Log/default.aspx">Log</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Transaction+Log/default.aspx">Transaction Log</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Log+Manager/default.aspx">Log Manager</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2008/12/09/diagnosing-transaction-log-performance-issues-and-limits-of-the-log-manager.aspx</feedburner:origLink></item><item><title>Reintroducing Usage-Based Optimization in SQL Server 2008 Analysis Services</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/-Iv-952FYWE/reintroducing-usage-based-optimization-in-sql-server-2008-analysis-services.aspx</link><pubDate>Tue, 18 Nov 2008 23:09:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:531</guid><dc:creator>denny.lee</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=531</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2008/11/18/reintroducing-usage-based-optimization-in-sql-server-2008-analysis-services.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Author&lt;/strong&gt;: Denny Lee &lt;br /&gt;&lt;strong&gt;Contributors / Reviewers&lt;/strong&gt;: Richard Tkachuk, Akshai Mirchandani, Robert Zare, Thomas Kejser, Gang Xiao, Cristian Petculescu&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Introduction&lt;/h4&gt;
&lt;p&gt;From the early days of Microsoft® SQL Server® Analysis Services, one of the query performance optimization techniques was for developers to use the usage-based optimization feature. Developers would create their OLAP cube and cube partitions and then set the aggregations for the cube at a low percentage. It was common to see developers set the aggregations for their partitions at 0% - 5%. After the OLAP database was deployed to the production servers, there would be a beta test period for users to work with the cube and to store the components of the queries executed against the cube. Afterwards developers could build aggregations based on what users had queried, typically optimizing for the slowest queries. After this was done, these aggregations could significantly improve the performance of these initially slow queries. With the release of SQL Server 2008 Analysis Services, an improved usage-based optimization algorithm has been included that enhances Analysis Services’ ability to create better aggregations.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Customer Databases&lt;/h4&gt;
&lt;p&gt;To write this technical note, we performed some extensive testing on various customer databases to provide the lessons learned below. To do this, the query and database criteria were that the queries resulted in a lot of storage engine-heavy queries (as opposed to formula engine-heavy queries). This could be identified by viewing the Analysis Services profiler trace and noting that there were a lot of Event Class 12\Event SubClass 22 events (Query SubCube Verbose\Non Cache data). Specifically, we wanted queries that were not able to use the cache and needed to hit the file system.&lt;/p&gt;
&lt;p&gt;Upon the application of usage-based optimization, we verified that aggregations were being used by verifying the Event Class 60 (Get Data from Aggregation) events in the Analysis Services profiler trace in SQL Server Profiler. For more information about the Analysis Services events, see &lt;a href="http://msdn.microsoft.com/en-us/library/ms175460.aspx"&gt;Query Events&lt;/a&gt; in SQL Server Books Online. As well, you can find a translation of the events within the &lt;i&gt;[Analysis Services Root Folder]\OLAP\bin\Resources\1033\tracedefinition100.xml&lt;/i&gt; file. For more information about how to use the Profiler to identify query performance bottlenecks, see &lt;a href="http://sqlcat.com/whitepapers/archive/2007/12/16/identifying-and-resolving-mdx-query-performance-bottlenecks-in-sql-server-2005-analysis-services.aspx"&gt;Identifying and Resolving MDX Query Performance Bottlenecks in SQL Server 2005 Analysis Services&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Recommendations&lt;/h4&gt;
&lt;p&gt;If usage-based optimization is used correctly, you can consistently reduce the length of long-running queries by using usage-based optimization to create smart aggregations, as shown in Figure 1.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReintroducingUsageBasedOptimizationinSQL_D1F4/image_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReintroducingUsageBasedOptimizationinSQL_D1F4/image_thumb.png" width="504" height="308" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 1&lt;/strong&gt;: Using usage-based optimization to improve query performance&lt;/p&gt;
&lt;p&gt;We learned the following key lessons for using the usage-based optimization feature of SQL Server 2008 Analysis Services:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usage-based opimtization should only be applied to long-running queries only. Application of usage-based optimization to any and all queries may have the inadvertent effect of reducing query improvement against your long-running queries and increasing processing costs as well. &lt;/li&gt;
&lt;li&gt;Sometimes handmade aggregations will be more optimal in the situation where you want to improve the query performance of a specific query (as opposed to a set of queries). For more information about this technique, see the &lt;a href="http://sqlcat.com/technicalnotes/archive/2007/09/11/analysis-services-2005-aggregation-design-strategy.aspx"&gt;Analysis Services 2005 Aggregation Strategy&lt;/a&gt; technical note. As a general rule, you will still want to start with usage-based optimization to see whether you can get optimal query performance first. Then try applying your handmade aggregations. &lt;/li&gt;
&lt;li&gt;Do not blindly apply and replace existing aggregations with usage-based optimization, because while you may improve one set of queries, you may slow down other queries. &lt;/li&gt;
&lt;li&gt;When using usage-based optimization, you should set the aggregation level to 100% (which is now the default). You should lower it only if processing time is unacceptable or aggregation size increases above the threshold (for example, 1.5 times the size of the facts). &lt;/li&gt;
&lt;li&gt;Test, test, test – make sure you test your queries with your original aggregations, new usage-based optimization aggregations, handmade aggregations, and/or no aggregations. It is important to do this to better understand the query characteristics of your cube. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;For more information about the results and tests performed, please read-ahead – if you’re not interested – that’s it! :-)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Results&lt;/h4&gt;
&lt;p&gt;As noted above, we executed a large number of queries on various customer databases. Table 1 contains twelve queries that are representative of the larger customer query tests where we compared the query times before and after we applied usage-based optimization. (Times are in milliseconds.)&lt;/p&gt;
&lt;table style="BORDER-BOTTOM-STYLE:none;BORDER-RIGHT-STYLE:none;WIDTH:403.25pt;BORDER-COLLAPSE:collapse;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;mso-border-alt:solid #7ba0cd 1.0pt;mso-border-themecolor:accent1;mso-border-themetint:191;mso-yfti-tbllook:1184;mso-padding-alt:0in 5.4pt 0in 5.4pt;" class="MediumShading1-Accent11" cellspacing="0" cellpadding="0" class="MediumShading1-Accent11"&gt;

&lt;tr style="HEIGHT:15pt;mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-WIDTH:1pt;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BACKGROUND:#4f81bd;HEIGHT:15pt;BORDER-RIGHT-COLOR:#7ba0cd;BORDER-TOP:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-border-themecolor:accent1;mso-border-themetint:191;mso-background-themecolor:accent1;"&gt;&lt;b&gt;&lt;span style="COLOR:white;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-themecolor:background1;"&gt;QueryID&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BACKGROUND:#4f81bd;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-TOP:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;"&gt;&lt;b&gt;&lt;span style="COLOR:white;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-themecolor:background1;"&gt;No aggregations&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BACKGROUND:#4f81bd;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-TOP:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;"&gt;&lt;b&gt;&lt;span style="COLOR:white;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-themecolor:background1;"&gt;Before usage-based optimization&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BACKGROUND:#4f81bd;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-TOP:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;"&gt;&lt;b&gt;&lt;span style="COLOR:white;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-themecolor:background1;"&gt;After usage-based optimization&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BACKGROUND:#4f81bd;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-TOP:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;"&gt;&lt;b&gt;&lt;span style="COLOR:white;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-themecolor:background1;"&gt;% difference&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BACKGROUND:#4f81bd;HEIGHT:15pt;BORDER-LEFT-COLOR:#7ba0cd;BORDER-TOP:#7ba0cd 1pt solid;BORDER-LEFT-WIDTH:1pt;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-border-themecolor:accent1;mso-border-themetint:191;mso-background-themecolor:accent1;"&gt;&lt;b&gt;&lt;span style="COLOR:white;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-themecolor:background1;"&gt;Factor (UBO is x times faster)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:0;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;32,391&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;229&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;99%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;141&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:1;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q2&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;37,377&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;256&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;99%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;146&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:2;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q3&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;337&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;36,532&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;-10,740%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;-108&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:3;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q4&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;30%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;1.4&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:4;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q5&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;267,582&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;276,071&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;361,255&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;-31%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;-1.3&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:5;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q6&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;4,679&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;3,870&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;17%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;1.2&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:6;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q7&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;933&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;983&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;-5%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;-1.1&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:7;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q8&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;2,627&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;2,746&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;-5%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;-1.1&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:8;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q9&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;3,759&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;2917&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;22%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;1.3&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:9;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q10&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;84,647&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;30,861&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;64%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;2.7&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:10;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q11&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;350,652&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;9,339&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;97%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-background-themetint:63;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;37.5&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:11;mso-yfti-lastrow:yes;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:48.8pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;b&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Q12&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:69.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;328,924&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:68.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;11,198&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BORDER-RIGHT-STYLE:none;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;97%&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:1in;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;HEIGHT:15pt;BORDER-LEFT-STYLE:none;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7ba0cd 1.0pt;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;29.4&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;All of the tests (including the values in Table 1) had the cache and file system cleared before query execution to ensure that the query results were not obtained from the cache.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Discussion&lt;/h4&gt;
&lt;p&gt;As can be seen in Figure 2, queries Q1 and Q2 show a two-order of magnitude improvement in query performance. But, in the case of query Q3, there is a two-order of magnitude performance degradation in query performance. This occurred because Q3 was already very fast(337 milliseconds) due to an existing set of aggregations. When the usage-based optimization aggregations were applied, they replaced the existing aggregations instead of adding to them, This replacement caused the performance degradation with Q3.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReintroducingUsageBasedOptimizationinSQL_D1F4/image_4.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReintroducingUsageBasedOptimizationinSQL_D1F4/image_thumb_1.png" width="483" height="296" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 2&lt;/strong&gt;: First set of usage-based optimization query tests&lt;/p&gt;
&lt;p&gt;When we reapplied the aggregations such that both the usage-based optimization aggregations and the original aggregations were applied, all three queries had return times in the hundreds of milliseconds, that is, less than one second.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;font color="#000080"&gt;&lt;b&gt;Lesson Learned&lt;/b&gt;: While this is not really specific to usage-based optimization aggretations, remember to be careful and ensure that any new aggregations that you create with usage-based optimization do not override existing aggregations that you may want to keep.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Figure 3 breaks down query Q5, which shows the same query execution times when no aggregations, handmade aggregations (Before UBO), and usage-based optimization aggregations (After UBO). As seen here, the application of usage-based optimization may sometimes result in the creation of aggregations that may slow down query performance.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReintroducingUsageBasedOptimizationinSQL_D1F4/image_6.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReintroducingUsageBasedOptimizationinSQL_D1F4/image_thumb_2.png" width="476" height="292" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 3:&lt;/strong&gt; Application of usage-based optimization may be slower&lt;/p&gt;
&lt;p&gt;There are times when the creation of &lt;u&gt;any&lt;/u&gt; aggregations may slow down query performance. There are any number of reasons that could cause this, ranging from cube design to the way the MDX statements were written. But as you can see in Figure 3, when aggregations were &lt;u&gt;removed&lt;/u&gt; from the cube and the query was re-executed, query performance actually improved. As noted in the Table 2, even though the number of subcube requests to the storage engine were the same, the duration is significantly higher for usage-based optimization.&lt;/p&gt;&lt;strong&gt;&amp;nbsp; 
&lt;table style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;WIDTH:435.7pt;BORDER-COLLAPSE:collapse;BORDER-TOP:medium none;BORDER-RIGHT:medium none;mso-border-alt:solid #7BA0CD 1.0pt;mso-border-themecolor:accent1;mso-border-themetint:191;mso-yfti-tbllook:1184;mso-padding-alt:0in 5.4pt 0in 5.4pt;" class="MediumShading1-Accent11" cellspacing="0" cellpadding="0" class="MediumShading1-Accent11"&gt;

&lt;tr style="HEIGHT:15pt;mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:81.75pt;PADDING-RIGHT:5.4pt;BACKGROUND:#4f81bd;HEIGHT:15pt;BORDER-TOP:#7ba0cd 1pt solid;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-border-themecolor:accent1;mso-border-themetint:191;mso-background-themecolor:accent1;" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;&lt;font color="#ffffff"&gt;Event&lt;span style="COLOR:white;mso-themecolor:background1;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:115.05pt;PADDING-RIGHT:5.4pt;BACKGROUND:#4f81bd;HEIGHT:15pt;BORDER-TOP:#7ba0cd 1pt solid;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;&lt;font color="#ffffff"&gt;SubEvent&lt;span style="COLOR:white;mso-themecolor:background1;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:59.6pt;PADDING-RIGHT:5.4pt;BACKGROUND:#4f81bd;HEIGHT:15pt;BORDER-TOP:#7ba0cd 1pt solid;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;&lt;font color="#ffffff"&gt;Events&lt;span style="COLOR:white;mso-themecolor:background1;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:179.3pt;PADDING-RIGHT:5.4pt;BACKGROUND:#4f81bd;HEIGHT:15pt;BORDER-TOP:#7ba0cd 1pt solid;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-border-themecolor:accent1;mso-border-themetint:191;mso-background-themecolor:accent1;" colspan="3"&gt;&lt;b&gt;&lt;span style="LINE-HEIGHT:115%;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;&lt;font color="#ffffff"&gt;Duration&lt;span style="COLOR:white;mso-themecolor:background1;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:0;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:59.6pt;PADDING-RIGHT:5.4pt;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;mso-background-themetint:63;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;mso-themecolor:text1;"&gt;&lt;font face="Calibri"&gt;Usage-Based Optimization&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:59.85pt;PADDING-RIGHT:5.4pt;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;mso-background-themetint:63;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;mso-themecolor:text1;"&gt;&lt;font face="Calibri"&gt;No Aggregations&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:59.85pt;PADDING-RIGHT:5.4pt;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;mso-background-themetint:63;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;mso-themecolor:text1;"&gt;&lt;font face="Calibri"&gt;Handmade Aggregations&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:1;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:81.75pt;PADDING-RIGHT:5.4pt;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;"&gt;&lt;b&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;Query Subcube&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:115.05pt;PADDING-RIGHT:5.4pt;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;Cache data&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:59.6pt;PADDING-RIGHT:5.4pt;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;1329&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:59.6pt;PADDING-RIGHT:5.4pt;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;2,960&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:59.85pt;PADDING-RIGHT:5.4pt;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;464&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:59.85pt;PADDING-RIGHT:5.4pt;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;512&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:15pt;mso-yfti-irow:2;mso-yfti-lastrow:yes;"&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#7ba0cd 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:81.75pt;PADDING-RIGHT:5.4pt;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-left-themecolor:accent1;mso-border-left-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;mso-background-themetint:63;"&gt;&lt;b&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;Query Subcube&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:115.05pt;PADDING-RIGHT:5.4pt;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;Non-cache data&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:59.6pt;PADDING-RIGHT:5.4pt;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;204&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:59.6pt;PADDING-RIGHT:5.4pt;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;1,514&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:59.85pt;PADDING-RIGHT:5.4pt;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#f0f0f0;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;mso-background-themetint:63;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;1,223&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:#7ba0cd 1pt solid;BORDER-LEFT:#f0f0f0;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:59.85pt;PADDING-RIGHT:5.4pt;BACKGROUND:#d3dfee;HEIGHT:15pt;BORDER-TOP:#f0f0f0;BORDER-RIGHT:#7ba0cd 1pt solid;PADDING-TOP:0in;mso-background-themecolor:accent1;mso-border-top-themecolor:accent1;mso-border-top-themetint:191;mso-border-bottom-themecolor:accent1;mso-border-bottom-themetint:191;mso-border-top-alt:solid #7BA0CD 1.0pt;mso-background-themetint:63;mso-border-right-themecolor:accent1;mso-border-right-themetint:191;"&gt;&lt;span style="LINE-HEIGHT:115%;COLOR:black;FONT-SIZE:9pt;"&gt;&lt;font face="Calibri"&gt;1,480&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/strong&gt;
&lt;p&gt;&lt;strong&gt;Table 2&lt;/strong&gt;: Usage-based optimization has longer duration to query process the same number of events&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font color="#000080"&gt;&lt;em&gt;&lt;b&gt;Lesson Learned&lt;/b&gt;: Make sure to test all of your queries with your original aggregations (if you had any) and without any aggregations at all. There are times when the Analysis Services MOLAP engine can scan through the file system faster than aggregations can be gone through. This can be especially apparent in the case where the size of the aggregations is larger than the data itself.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;As well, the “Before UBO” query in Figure 3 was against a cube where handmade aggregations were made following the guidelines within the &lt;a href="http://sqlcat.com/technicalnotes/archive/2007/09/11/analysis-services-2005-aggregation-design-strategy.aspx"&gt;Analysis Services 2005 Design Strategy&lt;/a&gt; technical note. If we discount the “No Agg” query, it becomes apparent that there are times where handmade aggregations can be faster. This is because when you use the Aggregation Manager to design your own aggregations, you can optimize for that specific query. Note that you can also use usage-based optimization to design aggregations for a single query. But the advantage of usage-based optimization is that it can create and combine aggregations for all of your select queries (for example,replace aggregations 5, 17, and 33 with a new one that covers them all).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;font color="#000080"&gt;&lt;b&gt;Lesson Learned&lt;/b&gt;: To improve the performance of individual queries, sometimes you can get faster query performance by creating handmade aggregations because you can optimize for that specific query.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;As can be seen in Figure 4, all of these queries here had relatively fast query times – that is, all of them were under 5s query time. In some cases, usage-based optimiation had improved performance (Q9, Q6) while in some other cases, there was a negligible performance degradation (Q7, Q8) that may or may not have anything to do with the use of aggregations.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReintroducingUsageBasedOptimizationinSQL_D1F4/image_8.png"&gt;&lt;img style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReintroducingUsageBasedOptimizationinSQL_D1F4/image_thumb_3.png" width="485" height="347" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 4&lt;/strong&gt;: Usage-based optimization query comparison for fast queries&lt;/p&gt;
&lt;p&gt;Nevertheless, the key lesson learned here is that the application of usage-based optimization aggregations may have very little effect when you apply them to fast queries.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;font color="#000080"&gt;&lt;b&gt;Lesson Learned&lt;/b&gt;: Make sure that when you apply usage-based optimization, you apply it to your long-running queries only. Usage-based optimiation is a complex algorithm that creates aggregations based on the queries that you select. If you end up selecting many queries that are already fast, the impact of these aggregations will only be slight and may even reduce the impact of your long-running queries.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;After we take into account the above lessons learned, we can consistently reduce the length of long-running queries by using usage-based optimization to create smart aggregations, as shown in Figure 5.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReintroducingUsageBasedOptimizationinSQL_D1F4/image_10.png"&gt;&lt;img style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReintroducingUsageBasedOptimizationinSQL_D1F4/image_thumb_4.png" width="473" height="289" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 5&lt;/strong&gt;: Using usage-based optimization to improve query performance&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;A summary of the recommendations to optimize your use of usage-based optimization can be found in the Recommendation section earlier in this technical note. Ultimately, these tests and lessons learned provided us with some valuable lessons learned and affirmation of this feature.&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=531" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=-Iv-952FYWE:nozwyX64Ql8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=-Iv-952FYWE:nozwyX64Ql8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/-Iv-952FYWE" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Aggregations/default.aspx">Aggregations</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Performance/default.aspx">Performance</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2008/11/18/reintroducing-usage-based-optimization-in-sql-server-2008-analysis-services.aspx</feedburner:origLink></item><item><title>Reporting Services Scale-Out Deployment Best Practices</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/13-ShZ_kwHQ/reporting-services-scale-out-deployment-best-practices.aspx</link><pubDate>Tue, 21 Oct 2008 06:21:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:456</guid><dc:creator>denny.lee</dc:creator><slash:comments>18</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=456</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2008/10/21/reporting-services-scale-out-deployment-best-practices.aspx#comments</comments><description>&lt;p align="left"&gt;&lt;i&gt;Building and Deploying Large Scale SQL Server Reporting Services Environments Technical Note Series&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;Authors: Denny Lee, Lukasz Pawlowski &lt;br /&gt;Contributors: John Gallardo, Robert Bruckner, Dean Kalanquin &lt;br /&gt;Technical Reviewers: Burzin Patel &lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;font size="4" face="tahoma,arial,helvetica,sans-serif"&gt;Introduction&lt;/font&gt;
&lt;p align="left"&gt;This technical note is part of the &lt;i&gt;&lt;a href="http://sqlcat.com/technicalnotes/archive/2008/06/05/reporting-services-scale-out-architecture.aspx"&gt;Building and Deploying Large Scale SQL Server Reporting Services Environments Technical Note Series&lt;/a&gt;&lt;/i&gt;&amp;nbsp;
which provides general guidance on how to set up, implement, and
optimize an enterprise scale-out architecture for your Microsoft® SQL
Server® Reporting Services environment. This note provides guidance for
both SQL Server 2005 and 2008 Reporting Services. The focus of this
technical note is Scale-Out Deployment Best Practices – the Reporting
Services Windows®/Web Services servers that provide your reports. &lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="4" face="tahoma,arial,helvetica,sans-serif"&gt;Architecture&lt;/font&gt;&lt;/p&gt;
&lt;p align="left"&gt;Figure 1 shows a typical scale-out Reporting Services
environment; as noted by the red box, the focus of this technical note
is scale-out deployment. &lt;/p&gt;&lt;p align="left"&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutDeploymentBestP_13FD3/image_2.png"&gt;&lt;img src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutDeploymentBestP_13FD3/image_thumb.png" style="border:0px none;" alt="image" width="559" border="0" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;b&gt;Figure 1&lt;/b&gt;: Reporting Services scale-out architecture 
&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="4" face="tahoma,arial,helvetica,sans-serif"&gt;Report Catalog Sizing&lt;/font&gt;&lt;/p&gt;
&lt;p align="left"&gt;As noted in the previous technical note of this series, &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/06/26/report-server-catalog-best-practices.aspx"&gt;Report Server Catalog Best Practices&lt;/a&gt;,
the report server catalogs are an integral part of your Reporting
Services solution. When you begin the process of building your
Reporting Services scale-out deployment, you will need to appropriately
scale your report server catalogs to handle the additional workload. In
addition to the concepts discussed in the aforementioned technical
note, a key consideration is Report Catalog sizing; the two report
server catalogs (&lt;b&gt;RSDB&lt;/b&gt; and &lt;b&gt;RSTempDB&lt;/b&gt;) have different sizing requirements. 
&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;u&gt;Report Server (RSDB) Database Size&lt;/u&gt;&lt;/b&gt; 
&lt;/p&gt;&lt;p align="left"&gt;The size of this database typically varies by the
number of reports published and the number of history snapshots
associated with each report. A general rule of thumb is that a
moderate-sized report definition will take about 100-200 KB of disk
space, which is larger than the actual size of the RDL. This is because
Reporting Services will persist both the RDL and the compiled binary
representation to improve report execution performance. In the case of
history snapshot sizes, this is a function of the amount of data that
is in the report (i.e., the larger your report and datasets, the larger
your snapshot). A general rule of thumb is that Reporting Services has
an approximate 5:1 compression ratio; therefore if your report has 10
MB of data, then the snapshot will be about 2 MB in size. Note that
reports that do not perform aggregations will be slightly larger than
reports that do. &lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;u&gt;Report Server TempDB (RSTempDB) Database Size&lt;/u&gt;&lt;/b&gt; 
&lt;/p&gt;&lt;p align="left"&gt;The size of this database varies depending on the
number of users who are concurrently using the report servers. Each
live report execution generates a report snapshot that is persisted in
the &lt;b&gt;RSTempDB&lt;/b&gt; for the duration of the user’s session. Because of
the high degree of variability of the number of users who are accessing
your report servers at any one time, your sizing estimate should be
based on the maximum number of concurrent users that access your
Reporting Services environment. A general rule of thumb here is that
you will typically see a maximum of 10-20% concurrency of your user
base. &lt;/p&gt;&lt;p align="left"&gt;For example, if you have 1,000 users, then you
can have up to 200 concurrent users. If most of these users are
accessing your 10-MB report, then you will need to have at least 400 MB
of storage when taking compression into account. Of course, as users
are no longer querying for reports and/or report sessions are timing
out, the space will be reclaimed and made available for new users. But
at the same time, to size properly, you will want to make your
calculation based on the maximum number of concurrent users. &lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="4" face="tahoma,arial,helvetica,sans-serif"&gt;Enable File System Snapshots for SQL Server 2005 Reporting Services &lt;/font&gt;&lt;/p&gt;
&lt;p align="left"&gt;Please note that this is applicable for SQL Server 2005
Reporting Services, not SQL Server 2008 SQL Server 2008 Reporting
Services. As noted in &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx"&gt;Scaling Up Reporting Services 2008 vs. Reporting Services 2005: Lessons Learned&lt;/a&gt;, this feature did not provide the scale of performance benefit (more on this later) for SQL Server 2008 Reporting Services. 
&lt;/p&gt;&lt;p align="left"&gt;Recall that the report server uses snapshot data stored in &lt;b&gt;RSTempDB&lt;/b&gt; to render reports. Therefore &lt;b&gt;RSTempDB&lt;/b&gt;
gets filled up fast, because there are many transactions performed to
keep report consistency (e.g., if I get the first page of a report, we
need a snapshot of the second page that is taken from the same data as
the first). Because of this concern for consistency, it is then
important for Reporting Services to cache all of this information. To
reduce the number of transactions being placed on your &lt;b&gt;RSTempDB&lt;/b&gt;,
use the File System (FS) snapshots feature instead. With it enabled,
snapshot data persists on the local Reporting Services server.
Therefore, this reduces the network traffic from the Reporting Services
server to the catalog, which also reduces the number and size of
transactions within the catalog. For more information about this
feature, see the &lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/pspsqlrs.mspx"&gt;Planning for Scalability and Performance with Reporting Services&lt;/a&gt; white paper. 
&lt;/p&gt;&lt;p align="left"&gt;For Reporting Services to efficiently access this
snapshot data, it is spread over a number of chunks – logical divisions
of smaller size. During regular operations, the report server may need
to access the chunks multiple times to satisfy user requests. For
example, a particular chunk may have been removed from server memory,
so the report server needs to fetch it again from &lt;b&gt;RSTempDB&lt;/b&gt;. By default, the server must query &lt;b&gt;RSTempDB&lt;/b&gt;
each time it needs to get a snapshot chunk. As user load increases due
to report complexity or concurrency, the number of transactions to &lt;b&gt;RSTempDB&lt;/b&gt; also increases. This can cause performance degradation on &lt;b&gt;RSTempDB&lt;/b&gt;.
To mitigate this, Reporting Services provides configuration options to
create file system chunks (i.e., file system snapshots), which act as a
cache for the snapshot chunks on the node that created the chunk. This
reduction in load on &lt;b&gt;RSTempDB&lt;/b&gt; allows your Report Catalog to scale better. 
&lt;/p&gt;&lt;p align="left"&gt;Now that the report data is stored on the file
system, it is a requirement to use a load balancing solution to
affinitize user sessions to their report server node (more on this
later). The slight drawback to this feature is that if you were to lose
a reporting server, you would also lose the file system data cache that
corresponds to that reporting server. However, the metadata is still
available in &lt;b&gt;RSDB&lt;/b&gt; and the original data is in the reporting
data. Your users would simply connect to a different report server and
make a new request for this report, experiencing slower initial query
performance before the file system snapshots kick in. &lt;/p&gt;&lt;p align="left"&gt;Therefore, for large-scale SQL Server 2005
Reporting Services deployments, we recommend you turn on the file
system storage of snapshot chunks. To do that, you must set &lt;b&gt;WebServiceUseFileShareStorage&lt;/b&gt; and &lt;b&gt;WindowsServiceUseFileShareStorage &lt;/b&gt;to &lt;b&gt;True&lt;/b&gt;. You can control the location of the files using the &lt;b&gt;FileShareStorageLocation &lt;/b&gt;configuration
property. These settings are available in the file
rsreportserver.config located under the report server installation
folder. &lt;/p&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;lt;Add Key=&amp;quot;WebServiceUseFileShareStorage&amp;quot; Value=&amp;quot;true&amp;quot; /&amp;gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;"&gt;&amp;lt;WindowsServiceUseFileShareStorage&amp;gt;True&amp;lt;/WindowsServiceUseFileShareStorage&amp;gt;&lt;/span&gt; 
&lt;p align="left"&gt;Note that if you enable this feature, it will require
more disk space than your standard Internet Information Services (IIS)
configuration, because of the large amount of data that will be written
onto disk. (For more information, see the Report Catalog sizing
information in the previous section.)&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="4"&gt;Why Not File System Snapshots for SQL Server 2008 Reporting Services?&lt;/font&gt;&lt;/p&gt;
&lt;p align="left"&gt;There are a number of changes and optimizations to SQL
Server 2008 Reporting Services, including better utilization of memory
and of the file system. Enabling file system snapshots in SQL Server
2005 Reporting Services was an advantage because unless this feature
was enabled, a majority of the transactions required hitting the &lt;b&gt;RSTempDB&lt;/b&gt;.
But SQL Server 2008 Reporting Services caches a lot of this data into
memory. Meanwhile the data is continually persisted to the Report
Catalogs so that the local file system acts as a write-through cache,
regardless of whether file system snapshots are enabled. This was done
to ensure stability in case of incorrect load balancing affinity or
gaps (e.g., secondary output streams such as CSS style sheets in HTML,
report images retrieved in HTML) in report snapshots. &lt;/p&gt;&lt;p align="left"&gt;The design in SQL Server 2005 Reporting Services
was that it generally would not materialize the original datasets in
the report snapshot, except for particular cases. This was possible
since the entire report was calculated in SQL Server 2005 Reporting
Services when the first page was requested, and the report contents
were persisted in a output-format independent way. On the other hand,
SQL Server 2008 Reporting Services does not precalculate everything on
the initial request – therefore, it has to always serialize all
datasets so that it can calculate report contents as needed later.
There are still certain parts in SQL Server 2008 Reporting Services
that once calculated (e.g., group/sort/filter/aggregates) are persisted
and not recalculated. However, many parts of a report (e.g., text box
values, style values) are calculated on demand instead of precalculated
and stored. &lt;/p&gt;&lt;p align="left"&gt;Another reason file system snapshots do not have
as profound impact for SQL Server 2008 Reporting Services is that when
reports are executed, the Reporting Services on-demand engine will
initially retrieve all of the data for your report and write this data
into the &lt;b&gt;RSTempDB&lt;/b&gt;, to achieve a consistent data snapshot. It
will then do the calculations and groups required for the first page.
But subsequent calls are more efficient and have much less impact than
SQL Server 2005 Reporting Services (e.g., page 2 of the report) because
the on-demand engine will only access a subset of the data instead of
requesting for the entire dataset. Note that the data is materialized
in the initial request (e.g., render first page) when all dataset
requirements are executed. Later session requests (e.g., navigate to
second page, export to Microsoft Excel®) will use the data already
materialized in the session snapshot. &lt;/p&gt;&lt;p align="left"&gt;This observation was also noted in the &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx"&gt;Scaling Up Reporting Services 2008 vs. Reporting Services 2005: Lessons Learned&lt;/a&gt;
technical note. Saying this, you may still want to test the efficacy of
this feature within your environment, because there could be variables
that allow this feature to help improve performance – but it certainly
doesn’t always have benefits as it did for SQL Server 2005 Reporting
Services. &lt;/p&gt;&lt;h4 align="left"&gt;&amp;nbsp;&lt;/h4&gt;&lt;p&gt;&lt;font size="4" face="tahoma,arial,helvetica,sans-serif"&gt;Turn on Cache Execution&lt;/font&gt;&lt;/p&gt;
&lt;p align="left"&gt;As you may have noticed, so far we have a recurring
theme concerning the effective use of memory and desire to have minimal
impact on the file system. After all, a key component for scalability
is the ability to reduce I/O. Of course, CPU and memory are extremely
important for scalability, but often it is the disk I/O that is slowing
down your performance. A powerful feature to reduce I/O is to enable
the cache execution feature of your reports. By default, when you
deploy your Reporting Services reports, it will be a live execution
report – i.e., upon report execution, Reporting Services will query the
snapshot or your data source. At a minimum, this means that for every
report execution some I/O occurs to provide your users with data. By
using cache execution, Reporting Services caches a temporary copy of
this report into memory that expires after a set number of minutes.
Report executions during this time period request data from memory
instead of disk, thus reducing I/O. Even if you set your cache timeout
for your report to every five minutes, you will still see an 80%
reduction in I/O for your report. &lt;/p&gt;&lt;p align="left"&gt;To configure cache execution, after you deploy
your reports to your report server, you will need to configure each
report (i.e., there is no global setting) to cache a temporary copy of
the report. Note that you will want to set your reports to use stored
credentials instead of Windows integrated security, in order for the
cache execution to work effectively. Do not forget to set up your
Reporting Services keys to ensure encryption of the stored credentials.
&lt;/p&gt;&lt;h4 align="left"&gt;&amp;nbsp;&lt;/h4&gt;&lt;p&gt;&lt;font size="4" face="tahoma,arial,helvetica,sans-serif"&gt;Load Balance Your Network&lt;/font&gt;&lt;/p&gt;
&lt;p align="left"&gt;It is very important to load balance your many client
connections to your Reporting Services servers. We recommend the use of
a hardware network load balancer (NLB) that allows your client
connections to balance across your Reporting Services servers, as noted
in Figure 2. &lt;/p&gt;&lt;p align="left"&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutDeploymentBestP_13FD3/image_4.png"&gt;&lt;img src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutDeploymentBestP_13FD3/image_thumb_1.png" style="border:0px none;" alt="image" width="407" border="0" height="382" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;b&gt;Figure 2&lt;/b&gt;: Load balancing your network 
&lt;/p&gt;&lt;p align="left"&gt;We also recommend that you use cookie persistence
(refer to your NLB guide to set this up) to preserve the
client-to-Reporting Services server connection – i.e., to affinitize
the client to the Reporting Services server. You can consider IP
affinity, but this can overload under browser-based or proxy
connections. Note that you typically will round-robin the initial
connections to minimize the load on your NLB. Subsequent queries will
have affinity to allow the clients to make use of the Reporting
Services local file cache. &lt;/p&gt;&lt;p align="left"&gt;Because your Reporting Services servers are
making heavy use of the network, you may want to consider also placing
additional NIC cards for your Reporting Services servers. In enterprise
Reporting Services environments, an important task will be to profile
your network resources so you can determine where your network resource
bottleneck is. If you are running into network bottlenecks, a setup to
consider if you want to scale up your network load is to have two NIC
cards, one for the browser traffic and one for the database traffic. &lt;/p&gt;&lt;h4 align="left"&gt;&amp;nbsp;&lt;/h4&gt;&lt;p&gt;&lt;font size="4" face="tahoma,arial,helvetica,sans-serif"&gt;Isolate Your Workloads&lt;/font&gt;&lt;/p&gt;
&lt;p align="left"&gt;Within your enterprise Reporting Services environment,
you will typically have two types of users – one set that assesses
scheduled reports and another set that reviews the reports in an
interactive manner. A common profile differentiation between these two
types of reports is that users accessing interactive reports will
execute their reports often in order to drill up, drill down, filter,
etc. On the other hand, scheduled reports typically will process
against much larger sources of data (which involves a considerable hit
on the system to produce the reports; hence scheduling will reduce the
load) or have a much larger audience (where the load created by the
concurrency of a large number of users to query the same report can be
reduced by creating the report beforehand). Whether you are dealing
with interactive users or scheduled report users, you have a situation
where your users produce two different types of profiles as noted in
Figure 3. &lt;/p&gt;&lt;p align="left"&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutDeploymentBestP_13FD3/image_6.png"&gt;&lt;img src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutDeploymentBestP_13FD3/image_thumb_2.png" style="border:0px none;" alt="image" width="518" border="0" height="332" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;b&gt;Figure 3&lt;/b&gt;: Isolating your workloads 
&lt;/p&gt;&lt;p align="left"&gt;Therefore, it is suggested that within your
scale-out deployment, you also isolate your workloads so that you have
one set of servers devoted to working with your interactive users (&lt;b&gt;Interaction&lt;/b&gt;) while another set of servers work on scheduled reports (&lt;b&gt;Scheduling&lt;/b&gt;).
As implied in Figure 3, doing so will provide you with a more
predictable workload because of the different resource profile that is
used by these different report users. Workload isolation will also
allow you to isolate any performance issues associated with these two
types of reporting users; that way, interactive users and scheduled
report users are not interfering with each other. &lt;/p&gt;&lt;p align="left"&gt;Note that ad-hoc report users (i.e., users who
use Report Builder) are a different class of interactive users. Because
these users can build whatever reports desired, there is a high degree
of unpredictability in the amount of resources that this class of users
will require. In extreme cases, you may want to consider creating a
completely separate deployment for these ad-hoc users so that they do
not bottleneck your interactive or scheduled report users. &lt;/p&gt;&lt;p align="left"&gt;To isolate your workloads, set your scheduling Reporting Services servers to &lt;b&gt;Schedule Events and Report Delivery Enabled&lt;/b&gt;, and set your interactive Reporting Services servers to &lt;b&gt;Web Service and HTTP Access Enabled&lt;/b&gt;.
By default both options are enabled, so make sure only one is enabled
on each server when you decide workload isolation is the path you will
take. &lt;/p&gt;&lt;p align="left"&gt;&lt;u&gt;Additional Notes on Workload Isolation&lt;/u&gt; 
&lt;/p&gt;&lt;p align="left"&gt;You can also make these workload isolation changes
programmatically through WMI using the Reporting Services WMI Provider
Library. You will change the &lt;b&gt;SetServiceState&lt;/b&gt; method; for more information, see the &lt;a href="http://technet.microsoft.com/en-us/library/ms154667.aspx"&gt;SQL Server Books Online &amp;gt; SetServiceState Method&lt;/a&gt;. 
&lt;/p&gt;&lt;p align="left"&gt;To help isolate your reporting bottlenecks for scheduled reports (the &lt;b&gt;Scheduled Events and Report Delivery&lt;/b&gt;), schedule your reports so they are not being processed in parallel. This way you will be able to isolate performance issues. 
&lt;/p&gt;&lt;h4 align="left"&gt;&amp;nbsp;&lt;/h4&gt;&lt;p&gt;&lt;font size="4" face="tahoma,arial,helvetica,sans-serif"&gt;Report Data Performance Considerations&lt;/font&gt;&lt;/p&gt;
&lt;p align="left"&gt;With all of these configuration and infrastructure
considerations, you will be able to build an optimal scale-out
environment for your Reporting Services solution. But while your
Reporting Services environment is scaled out, do not forget the impact
on your underlying reporting data – i.e., the data source. Here are
some of the things you can do to reduce the impact on your report data:
&lt;/p&gt;&lt;p align="left"&gt;
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Limit the dataset size by using query filters.&lt;/li&gt;&lt;li&gt;If you need to provide large dataset sizes, use
alternate mechanisms such as Integration Services to provide an extract
that is accessible from the file system, instead of providing a
million-page report.&lt;/li&gt;&lt;li&gt;Limit the number of reports that users can
access. This is not just a security concern. Limiting access reduces
your maintenance cost by preventing users from creating multiple
similar subscriptions and reports.&lt;/li&gt;&lt;/ul&gt; 
&lt;p align="left"&gt;But even after making the above changes, you may still
find yourself placing far too much load on your reporting data. To help
resolve these issues, you may want to consider also scaling out your
underlying data sources. Figure 4 is an example of a scale-out solution
where a set of two Reporting Services servers are assigned to a single
Analysis Services server. The underlying reporting data (in this case
Analysis Services cubes) is replicated to multiple Analysis Services
query servers so that every two Reporting Services servers query only a
single Analysis Services instance. Note that to do this you will need
to manually create local data source aliases on the reporting servers
that will perform this type of server assignment. &lt;/p&gt;&lt;p align="left"&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutDeploymentBestP_13FD3/image_8.png"&gt;&lt;img src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutDeploymentBestP_13FD3/image_thumb_3.png" style="border:0px none;" alt="image" width="574" border="0" height="373" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;b&gt;Figure 4&lt;/b&gt;: Scaling out Analysis Services 
&lt;/p&gt;&lt;p align="left"&gt;These options are outside the scope of a Reporting
Services specific technical note, but here are some resources that you
may find helpful: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms345584.aspx"&gt;Deploying a Scalable Shared Database&lt;/a&gt;:
This feature allows you to deploy multiple read-only versions of your
SQL Server database for the purposes of reporting. Scalable shared
databases offer a scale-out solution in which multiple servers hold
read-only copies of your SQL Server database that users can query thus
distributing the query load across multiple databases or servers. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sqlcat.com/whitepapers/archive/2008/09/02/sql-server-replication-providing-high-availability-using-database-mirroring.aspx"&gt;SQL Server Replication: Providing High Availability using Database Mirroring&lt;/a&gt;: This white paper covers the use or database mirroring to increase availability of the replication stream. 
&lt;/li&gt;&lt;li&gt;&lt;a href="http://sqlcat.com/whitepapers/archive/2008/01/21/database-mirroring-and-log-shipping-working-together.aspx"&gt;Database Mirroring and Log Shipping&lt;/a&gt;: You can use database mirroring and log shipping together to provide both high availability and disaster recovery. 
&lt;/li&gt;&lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ms152531.aspx"&gt;SQL Server Replication Features&lt;/a&gt;: Choose among transactional, merge, or snapshot replication to provide yourself with query replica databases. 
&lt;/li&gt;&lt;li&gt;&lt;a href="http://sqlcat.com/whitepapers/archive/2007/12/16/scale-out-querying-with-analysis-services.aspx"&gt;Scale-Out Querying with Analysis Services&lt;/a&gt;: This white paper describes how to replicate a read-only Analysis Services database to multiple servers. 
&lt;/li&gt;&lt;li&gt;&lt;a href="http://sqlcat.com/whitepapers/archive/2007/11/19/scale-out-querying-with-analysis-services-using-san-snapshots.aspx"&gt;Scale-Out Querying with Analysis Services Using SAN Snapshots&lt;/a&gt;:
If you have a SAN, you can make use of SAN snapshots to perform the
task of metadata replication instead of physically copying the
underlying Analysis Services database. &lt;/li&gt;&lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc280669.aspx"&gt;Scaling out an Analysis Services Solution&lt;/a&gt;:
In addition to attaching or detaching an Analysis Services database,
you can also attach a read-only copy of your Analysis Services database
that places the Analysis Services database metadata locally and refers
to a remote copy of the database. That is, one copy of a database has
metadata distributed to multiple servers so that the formula
calculation load can be scaled out to many servers. &lt;/li&gt;&lt;/ul&gt;&lt;h4 align="left"&gt;&amp;nbsp;&lt;/h4&gt;&lt;p&gt;&lt;font size="4" face="tahoma,arial,helvetica,sans-serif"&gt;Next Steps…&lt;/font&gt;&lt;/p&gt;
&lt;p align="left"&gt;Now, that you’ve scaled out your Reporting Services
deployment – there are additional features and configurations that may
optimize your Reporting Services environment; for more information, see
&lt;b&gt;&lt;i&gt;SSRS Performance Optimization Configurations [link provided when published]&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=456" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=13-ShZ_kwHQ:iqSYhL-xwyU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=13-ShZ_kwHQ:iqSYhL-xwyU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/13-ShZ_kwHQ" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Scalability/default.aspx">Scalability</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2008/10/21/reporting-services-scale-out-deployment-best-practices.aspx</feedburner:origLink></item><item><title>The Many Benefits of Money…Data Type!</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/qR4Fj6-9bF0/the-many-benefits-of-money-data-type.aspx</link><pubDate>Thu, 25 Sep 2008 18:20:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:384</guid><dc:creator>admin</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=384</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2008/09/25/the-many-benefits-of-money-data-type.aspx#comments</comments><description>&lt;p align="left"&gt;Authors: Denny Lee, Thomas Kejser, Matt Neerincx &lt;br /&gt;Contributors / Reviewers: Peter Carlin, Brandon Berg, Eric Jacobsen, Burzin Patel&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Background&lt;/h4&gt;
&lt;p align="left"&gt;Our initial reason for looking at the &lt;b&gt;money&lt;/b&gt; data type can be found within the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=bae8beec-9892-4ecd-a9db-292254895f9c"&gt;Precision Considerations for Analysis Services Users&lt;/a&gt; white paper. In this white paper, we provide extensive examples of the types of precision issues when your SQL relational data source and your Microsoft® SQL Server® Analysis Services cube have different non-matching data types (e.g., if you query one way you get the value 304253.3251, but run the query in another way and you get the value 304253.325100001).&lt;/p&gt;
&lt;p align="left"&gt;To avoid these types of problems, you need to ensure that your SQL relational data source and Analysis Services measure groups have matching data types. By default, when you create an Analysis Services measure on a &lt;b&gt;money&lt;/b&gt; data type, Microsoft Visual Studio® Business Intelligence Development Studio will set the data type reference to &lt;b&gt;double&lt;/b&gt;. To avoid precision loss and have faster performance, you should change the data type to &lt;b&gt;currency&lt;/b&gt; within the Source Properties as noted in the screen shot below.&lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TheManyBenefitsofMoneyDataType_9F7C/image_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TheManyBenefitsofMoneyDataType_9F7C/image_thumb.png" width="462" height="496" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Show Me The Money! ...Data Type for Faster Processing Performance&lt;/b&gt;&lt;/h4&gt;
&lt;p align="left"&gt;Working on customer implementations, we found some interesting performance numbers concerning the &lt;b&gt;money&lt;/b&gt; data type. For example, when Analysis Services was set to the &lt;b&gt;currency&lt;/b&gt; data type (from &lt;b&gt;double&lt;/b&gt;) to &lt;u&gt;match&lt;/u&gt; the SQL Server &lt;b&gt;money&lt;/b&gt; data type, there was a 13% improvement in processing speed (rows/sec). To get faster performance within SQL Server Integration Services (SSIS) to load 1.18 TB in under thirty minutes, as noted in &lt;a href="http://blogs.msdn.com/sqlcat/archive/2008/02/29/ssis-2008-world-record-etl-performance.aspx"&gt;SSIS 2008 - world record ETL performance&lt;/a&gt;, it was observed that changing the four &lt;b&gt;decimal(9,2)&lt;/b&gt; columns with a size of 5 bytes in the TPC-H LINEITEM table to &lt;b&gt;money&lt;/b&gt; (8 bytes) improved bulk inserting speed by 20%. Note that within SSIS, the equivalent of the &lt;b&gt;money&lt;/b&gt; data type is DT_CY, which currently does not support fast parse. Hence, getting &lt;b&gt;money&lt;/b&gt; out of text files may incur additional cost.&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;Note that these tests were performed on 64-bit systems. Relative performance may be different in the 32-bit editions of SQL Server because of differences in the way it performs 64-bit &lt;b&gt;integer&lt;/b&gt; (or &lt;b&gt;money&lt;/b&gt;) operations.&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Money vs. Decimal vs. Float Decision Flowchart&lt;/b&gt;&lt;/h4&gt;
&lt;p align="left"&gt;Below is a high-level decision flowchart to help you decide which data type you should use. Note that this is a generalization that may not be applicable to all situations. For a more in-depth understanding, you can always refer to Donald Knuth’s &lt;a href="http://sunburn.stanford.edu/~knuth/taocp.html"&gt;The Art of Computer Programming&lt;/a&gt; – Volume 1.&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TheManyBenefitsofMoneyDataType_9F7C/image_10.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/TheManyBenefitsofMoneyDataType_9F7C/image_thumb_4.png" width="467" height="480" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="left"&gt;As well, remember that different data types have different client API mappings. Some more in-depth references to this include &lt;a href="http://msdn.microsoft.com/en-us/library/ms172136.aspx"&gt;SQL Server Data Types and ADO.NET&lt;/a&gt; and &lt;a href="http://www.codeproject.com/KB/recipes/MoneyTypeForCLR.aspx"&gt;A Money type for the CLR&lt;/a&gt;.&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Money (Data Type) Internals&lt;/b&gt;&lt;/h4&gt;
&lt;p align="left"&gt;The reason for the performance improvement is because of SQL Server’s Tabular Data Stream (TDS) protocol, which has the key design principle to transfer data in compact binary form and as close as possible to the internal storage format of SQL Server. Empirically, this was observed during the &lt;a href="http://blogs.msdn.com/sqlcat/archive/2008/02/29/ssis-2008-world-record-etl-performance.aspx"&gt;SSIS 2008 - world record ETL performance&lt;/a&gt; test using &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d6e95259-8d9d-4c22-89c4-fad382eddcd1&amp;amp;DisplayLang=en"&gt;Kernrate&lt;/a&gt;; the protocol dropped significantly when the data type was switched to money from decimal. This makes the transfer of data as efficient as possible. A complex data type needs additional parsing and CPU cycles to handle than a fixed-width type.&lt;/p&gt;
&lt;p align="left"&gt;Let’s compare the different data types that are typically used with money (data types).&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style="BORDER-BOTTOM-STYLE:none;BORDER-RIGHT-STYLE:none;BORDER-COLLAPSE:collapse;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;" class="MsoTableGrid" cellspacing="0" cellpadding="0"&gt;

&lt;tr&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:153.9pt;PADDING-RIGHT:5.4pt;BACKGROUND:black;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span style="COLOR:white;"&gt;Breakdown &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="COLOR:white;"&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:99pt;PADDING-RIGHT:5.4pt;BACKGROUND:black;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span style="COLOR:white;"&gt;money &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="COLOR:white;"&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:112.5pt;PADDING-RIGHT:5.4pt;BACKGROUND:black;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span style="COLOR:white;"&gt;decimal &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="COLOR:white;"&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:113.4pt;PADDING-RIGHT:5.4pt;BACKGROUND:black;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;b&gt;&lt;span style="COLOR:white;"&gt;float &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="COLOR:white;"&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:153.9pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;&lt;b&gt;Simple/complex data type: &lt;/b&gt;&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;Simple data types align more directly to native processor types. Complex data types require CPU to review type metadata and to perform branching. &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:99pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;Simple &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:112.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;Complex &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:113.4pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;Simple &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:153.9pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;&lt;b&gt;Fixed/variable length writers:&lt;/b&gt; Because a variable-length data type may incur a memcpy when moving, causing additional CPU overhead, use a fixed 8-byte or 4-byte integer assignment if possible. &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:99pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;Fixed &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:112.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;Variable &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:113.4pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;Fixed &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:153.9pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;&lt;b&gt;Storage format&lt;/b&gt;: Incurs less overhead if the data type is composed of native literals (e.g., &lt;b&gt;int&lt;/b&gt;, &lt;b&gt;uint&lt;/b&gt;, &lt;b&gt;long&lt;/b&gt;, &lt;b&gt;ulong&lt;/b&gt;) instead of approximate data types (e.g., &lt;b&gt;float&lt;/b&gt;). &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:99pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;8-byte integer &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:112.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;Scaled integer (one sign byte plus one to four &lt;b&gt;&lt;span&gt;ulong&lt;/span&gt;&lt;/b&gt; depending on precision) &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:113.4pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;8-byte integer &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:153.9pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;&lt;b&gt;Comments&lt;/b&gt;: This row lists other issues of concern. &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:99pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;None &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:112.5pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;TDS wire format is always packed, so extra overhead is required to pack and unpack this data type. &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0in;PADDING-LEFT:5.4pt;WIDTH:113.4pt;PADDING-RIGHT:5.4pt;BORDER-TOP-STYLE:none;BORDER-LEFT-STYLE:none;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0in;"&gt;
&lt;p class="MsoNoSpacing" align="left"&gt;Approximate data are types more expensive to compare/convert than native literals; there may be precision issues on conversion. &lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="left"&gt;The key here is that the &lt;b&gt;money&lt;/b&gt; data type is a simple fixed-length integer-based value type with a fixed decimal point. Composed of an 8-byte signed integer (note that &lt;b&gt;small&lt;/b&gt; &lt;b&gt;money&lt;/b&gt; is a single 4-byte integer) with the 4-byte CPU alignment, it is more efficient to process than its &lt;b&gt;decimal&lt;/b&gt; and &lt;b&gt;floating point&lt;/b&gt; counterparts. The other side of the coin is that floating points (but not &lt;b&gt;decimal&lt;/b&gt;) can be more quickly calculated in the floating point unit of your CPU than &lt;b&gt;money&lt;/b&gt;. However, bear in mind the precision issues of &lt;b&gt;float&lt;/b&gt; as noted above.&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;Saving (&lt;i&gt;Space for&lt;/i&gt;) Your Money!&lt;/b&gt;&lt;/h4&gt;
&lt;p align="left"&gt;In the context of SQL Server data compression, the &lt;b&gt;money&lt;/b&gt; and &lt;b&gt;small&lt;/b&gt; &lt;b&gt;money&lt;/b&gt; data types tend to compress well when the absolute value is low (e.g., values between -0.0128 and 0.0127 compress to 1 byte, while values between -3.2768 and 3.2767 compress to 2 bytes). It is the absolute value that matters for compression, not the number of significant digits; both 1,000,000 and 1,234,567.8901 will take 5 bytes compressed. On the other hand, &lt;b&gt;decimal&lt;/b&gt; will compress better when there are fewer significant digits. For example, both 1,000,000 and .0001 will compress to 2 bytes, but 1,234,567.8901 will take several more bytes because it has more significant digits.&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;b&gt;$ummary&lt;/b&gt;&lt;/h4&gt;
&lt;p align="left"&gt;There will be many scenarios where you preferred option will still be to use data types such as &lt;b&gt;decimal&lt;/b&gt; and &lt;b&gt;float&lt;/b&gt;. But before skipping over this detail, take a look at your data and see if you can change your schema to the &lt;b&gt;money&lt;/b&gt; data type. After all, a 13% improvement in Analysis Services processing speed and 20% improvement in SSIS processing isn’t chump change.&lt;/p&gt;
&lt;p align="left"&gt;…and that’s our $0.02.&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=384" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=qR4Fj6-9bF0:Hr-2djRk1QQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=qR4Fj6-9bF0:Hr-2djRk1QQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/qR4Fj6-9bF0" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Database/default.aspx">Database</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/SQL+Server/default.aspx">SQL Server</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2008/09/25/the-many-benefits-of-money-data-type.aspx</feedburner:origLink></item><item><title>SQL Server Service Broker: Maintaining Identity Uniqueness Across Database Copies</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/EhYddqdtwoI/sql-server-service-broker-maintaining-identity-uniqueness-across-database-copies.aspx</link><pubDate>Wed, 13 Aug 2008 02:53:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:362</guid><dc:creator>MichaelThomassy</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=362</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2008/08/12/sql-server-service-broker-maintaining-identity-uniqueness-across-database-copies.aspx#comments</comments><description>&lt;p&gt;Author: Michael Thomassy&lt;/p&gt;
&lt;p&gt;Technical Reviewers: Sanjay Mishra, Burzin Patel, Stuart Ozer&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;A Deployment Method: Copying Databases&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;When dealing with many large customers, they often develop new and interesting ways of using technology and deploying it. One such case concerning service broker is with large, scale-out deployments consisting of hundreds of servers where the same database will be copied and deployed many times over. This database will contain all of this particular customer&amp;#39;s service broker standards and custom built pieces for how broker will operate in their environment. As a package this database can be easily copied and deployed across many instances and servers through 1) &amp;quot;copy &amp;amp; attach,&amp;quot; or 2) backup &amp;amp; restore. The caveat for this approach is that each of these databases will contain the same service broker identity. Therefore, we need to reset it. For more details on &lt;b&gt;Managing Service Broker Identities&lt;/b&gt; see Books Online (BOL): &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms166057(SQL.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms166057(SQL.100).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We will get to the relevance of having an actual globally unique service broker identity shortly. However, it&amp;#39;s important to recognize the database properties that are modified when a database is attached or restored. For our discussion relevant to service broker, I&amp;#39;ll point out that the following values are set to 0 when the database is attached or restored:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;is_broker_enabled &lt;/li&gt;
&lt;li&gt;is_honor_broker_priority_on &lt;/li&gt;
&lt;li&gt;is_trustworthy_on &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;You can view database properties by querying &lt;b&gt;sys.databases&lt;/b&gt;, see BOL:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms178534(SQL.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms178534(SQL.100).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;SELECT&lt;/font&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,is_broker_enabled &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,is_honor_broker_priority_on &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,is_trustworthy_on &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,service_broker_guid &lt;br /&gt;&lt;font color="#0000ff"&gt;FROM&lt;/font&gt; &lt;font color="#008000"&gt;sys.databases&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/SQLServerServiceBrokerMaintainingIdentit_141E9/image_2.png" target="_blank"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="145" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/SQLServerServiceBrokerMaintainingIdentit_141E9/image_thumb.png" width="631" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Just after detaching, making a couple copies and attaching the 3 databases, you’ll notice that all of my databases have the same service_broker_guid. There is no way to know the purpose, function or environment in which the database is attached or restored. This is why service broker is disabled by default. Now that the database has been duplicated, we need to reset the service broker identity as follows:&lt;/p&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt;ALTER DATABASE&lt;/font&gt; [MySSBDBCopy1] &lt;font color="#0000ff"&gt;SET NEW_BROKER&lt;/font&gt; &lt;br /&gt;&lt;font color="#0000ff"&gt;ALTER DATABASE&lt;/font&gt; [MySSBDBCopy2] &lt;font color="#0000ff"&gt;SET NEW_BROKER&lt;/font&gt; &lt;br /&gt;&lt;font color="#0000ff"&gt;GO &lt;br /&gt;SELECT&lt;/font&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,is_broker_enabled &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,is_honor_broker_priority_on &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,is_trustworthy_on &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,service_broker_guid &lt;br /&gt;&lt;font color="#0000ff"&gt;FROM&lt;/font&gt; &lt;font color="#008000"&gt;sys.databases&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/SQLServerServiceBrokerMaintainingIdentit_141E9/image_4.png" target="_blank"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="146" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/SQLServerServiceBrokerMaintainingIdentit_141E9/image_thumb_1.png" width="632" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Giving the database a new service broker identity will enable service broker (is_broker_enabled=1) and will remove all service broker messages and conversations in the database with sending end dialog messages. Again, in our scenario since we are deploying a &amp;quot;standards&amp;quot; database we will assume there are no messages or conversations in the database.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Service Broker Diagnostic Utility&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Having 1 or more databases with the same service broker guid may not seem problematic. However, service broker does assume that this guid is globally unique across &amp;quot;time and space&amp;quot; independent of the location, instance and server. When messages are sent and received i.e. the initiator and target are the same database, having multiple identical guids may not pose a problem. Unless you&amp;#39;d like to use the new service broker diagnostic tool called the &lt;b&gt;ssbdiagnose Utility&lt;/b&gt;. See BOL for more detail: &lt;a href="http://msdn.microsoft.com/en-us/library/bb934450.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb934450(SQL.100).asp&lt;/a&gt;. SSBDiagnose is new in SQL Server 2008 however it can be used in SQL Server 2005 only environments or mixed. The utility will error when used against an instance where there are 2 or more databases having the same service broker guid. Yes, it is a problem even if the database being diagnosed has a guid that&amp;#39;s not duplicated. The Service Broker Diagnostic Utility will generate output similar to:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Microsoft SQL Server 10.0.1442.23 &lt;br /&gt;Service Broker Diagnostic Utility &lt;br /&gt;&lt;/strong&gt;&lt;font size="2"&gt;D 29997 MYSERVER\INST2 SSBReceiver1 Service Broker GUID is identical to that of database SSBReceiver on server MYSERVER\INST2 &lt;br /&gt;D 29997 MYSERVER\INST2 SSBReceiver2 Service Broker GUID is identical to that of database SSBReceiver on server MYSERVER\INST2 &lt;br /&gt;D 29905 MYSERVER\INST2 SSBReceiver Service Broker is not enabled in the database&lt;/font&gt; &lt;br /&gt;3 Errors, 0 Warnings&lt;/p&gt;
&lt;p&gt;To summarize, when making a copy of a database establish a new service broker identity. This will avoid any potential future conflicts and will guarantee that your service broker identity will truly be a G.U.I.D.!&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=362" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=EhYddqdtwoI:-SyMPz_Sizk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=EhYddqdtwoI:-SyMPz_Sizk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/EhYddqdtwoI" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Database/default.aspx">Database</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Configuration/default.aspx">Configuration</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2008/08/12/sql-server-service-broker-maintaining-identity-uniqueness-across-database-copies.aspx</feedburner:origLink></item><item><title>Moving Large Amounts of Data Between Oracle and SQL Server: Findings and Observations</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/KZ1LqEddJ-k/moving-large-amounts-of-data-between-oracle-and-sql-server-findings-and-observations.aspx</link><pubDate>Fri, 08 Aug 2008 22:04:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:358</guid><dc:creator>Nicholas Dritsas</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=358</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2008/08/09/moving-large-amounts-of-data-between-oracle-and-sql-server-findings-and-observations.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;"&gt;Author: Nicholas Dritsas &lt;br /&gt;Contributers: Hae Jin Park &lt;br /&gt;Technical Reviewers: Denny Lee, Burzin Patel&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;"&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;"&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="FONT-SIZE:14pt;LINE-HEIGHT:115%;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="FONT-SIZE:14pt;LINE-HEIGHT:115%;"&gt;&lt;font face="Calibri"&gt;Case&lt;/font&gt;&lt;/span&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;A large online gaming company tested a number of methods to quickly and efficiently move data between an Oracle 9i/UNIX system and SQL Server 2005. Their goal was to move 200‑GB of daily user activity data within two hours. The data was to move without the use of transformations from Oracle’s OLTP system to the SQL Server Operational Data Store (ODS) database. An ODS database is used in data warehouse architecture to hold an exact and intact copy of the source data, representing the only true data and history. The ODS data would be used later by SSIS packages to transform and load data into a staging database, a DW database, and an OLAP cube for reporting purposes. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Note&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;This Technical Note does not describe a suggested method to fully migrate data from Oracle to SQL Server in all cases. Depending on the application, third-party tools and wizards may be a better fit for your migration.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="FONT-SIZE:14pt;LINE-HEIGHT:115%;"&gt;&lt;font face="Calibri"&gt;Process&lt;/font&gt;&lt;/span&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;The company started by using a 64-bit server with 32 and 64&amp;nbsp;cores, testing both x64 and ia64. They installed SQL Server, Analysis Services and SSIS on that server. Since it was a 64-bit platform, the Microsoft OLE DB Provider for Oracle was ruled out because it does not yet support 64-bit environments. The project team decided to use Oracle’s 10.2.0.2.2 version provider. Here are the initial tests and findings:&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Solution 1:&lt;/b&gt; &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;The first solution they tried was using the SQL Server Integration Services (SSIS) OLE DB Source task to move the Oracle 200-GB data into SQL Server. However, the speed was very slow and they could not meet their goal of two hours so they stopped the test. In this scenario, they used the 64-bit server and the 64-bit provider from Oracle and the projected time of completion was about 18 hours.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Solution 2:&lt;/b&gt; The next solution was to use a separate 32-bit server (8&amp;nbsp;cores, 20-GB RAM) for SSIS only and 32-bit Oracle’s OLEDB Provider for Oracle. They downloaded the Oracle data into a binary file (using the network drive on the 64-bit server) by using the SSIS Raw File destination task. From there they uploaded the data into SQL Server staging tables, and then converted it into SQL ODS tables by using the SSIS Raw File source task. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="MARGIN:0in 0in 0pt 0.5in;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Result&lt;/b&gt;: 2 hours 47 min elapsed. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;i style="mso-bidi-font-style:normal;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/i&gt; 
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Issue &lt;/b&gt;: Large staging file and staging DB (not ODS) size&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.5in;"&gt;&lt;font face="Calibri" size="3"&gt;Even though the size of the Oracle data&amp;nbsp; was 200&amp;nbsp;GB, the binary file size was over 600&amp;nbsp;GB. Then, the 600&amp;nbsp;GB of data had to be uploaded into SQL Server tables without data conversion. After that, it was necessary to convert it into SQL Server target ODS table format. The process required at least 1.4 terabytes of additional disk space for the binary file and staging tables. &lt;/font&gt;&lt;/p&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Note&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Less overall time would have been required if they had used Oracle SQL*Plus commands to spool the data into a file. That way, they would not have had to use the slow provider to extract into a raw file. They did not have time to test this scenario but it is worth mentioning. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Here is a helpful link: &lt;/font&gt;&lt;/font&gt;&lt;a href="http://www.orafaq.com/faq/is_there_a_sql_unloader_to_download_data_to_a_flat_file"&gt;&lt;font face="Calibri" color="#0000ff" size="3"&gt;http://www.orafaq.com/faq/is_there_a_sql_unloader_to_download_data_to_a_flat_file&lt;/font&gt;&lt;/a&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Solution 3:&lt;/b&gt; Next they tried using DataDirect Technologies’ Oracle provider with wire protocol on the x64 server (it seems DataDirect does not have an ia64 provider). The achieved speed results were very impressive. In a comparison test, they loaded 10,000 records from Oracle to SQL Server. In that test, the DataDirect provider took 2 seconds versus 22 seconds when using the Oracle provider. However, the overall test failed because of conversion errors.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 10pt 0.5in;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Issue: &lt;/b&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;They tried to retrieve the Oracle data by using the SSIS OLE component with DataDirect’s provider (x64) but there was a code page conversion error for the SQL Server code page CP949 (Korean character set). &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;They tried to use Unicode conversion by using an output column (in SSIS), but this did not work either. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;They plan to open a support case with DataDirect. It seems there are some special Korean characters that do not get mapped properly in CP949 and the driver fails.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Solution 4:&lt;/b&gt; The company finally decided to use&amp;nbsp; the SSIS OLE DB source and target components to move data from Oracle to SQL Server directly through an 8‑core 32‑bit server using Oracle’s32‑bit OLEDB provider (ver. 10.2.0.2.2) and Korean_90_Bin collation (with the SQL Server ODS database). When Korean_90_bin is used, they do not have to convert Korean data explicitly in Oracle, thus reducing response time.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt 0.5in;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;Result: &lt;/b&gt;The response time was 2 hr 33m 32 sec (without the need of an additional 1.4&amp;nbsp;terabytes of disk space).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="FONT-SIZE:14pt;LINE-HEIGHT:115%;"&gt;&lt;font face="Calibri"&gt;Findings&lt;/font&gt;&lt;/span&gt;&lt;/b&gt; 
&lt;p class="MsoListParagraphCxSpFirst" style="MARGIN:0in 0in 0pt 0.25in;TEXT-INDENT:-0.25in;mso-add-space:auto;mso-list:l1 level1 lfo1;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Oracle OLEDB Provider performance appears to be better optimized on 32‑bit compared to x64 or IA64. (Oracle driver speed: x86 &amp;gt; x64 &amp;gt; IA64). So, the company had to use 32‑bit middle server to meet the target time.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="MARGIN:0in 0in 0pt 0.25in;TEXT-INDENT:-0.25in;mso-add-space:auto;mso-list:l1 level1 lfo1;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;It seems that the 32-bit middle server&amp;#39;s spec is important to the data move time. Based on this test result, if they used a 32-bit server with more than 8 cores, it is possible they could reduce the time even more. But, based on the tests, when they went from 8 cores to 16 cores, the difference was small. The total time went from 2h33min to 2h11min.&lt;/font&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:#1f497d;LINE-HEIGHT:115%;FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-fareast-language:KO;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;To achieve even better performance, they used the Fast Load option under the Data Access mode of the OLE DB Destination task. They decided not to use the SQL Server destination, even though it is supposed to be faster, because it requires that SSIS and SQL Server be on the same server. By using the OLE DB Destination, they have the option to deploy the packages on a separate SSIS server.&lt;span style="FONT-SIZE:10pt;COLOR:#1f497d;LINE-HEIGHT:115%;mso-fareast-language:KO;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;mso-fareast-language:KO;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-fareast-language:KO;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Regarding the Oracle to SQL ODS step (using a direct load via OLEDB and an x86 server), they found that performance on a 16 dual-core x64 is better than on a 32 dual-core x64. (The gap is 10min.)&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The x64 server hosts SQL Server and the ODS database.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="FONT-SIZE:14pt;LINE-HEIGHT:115%;"&gt;&lt;font face="Calibri"&gt;Detailed Test Results&lt;/font&gt;&lt;/span&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Following are the test results on an HP superdome IA64 with 16- and 32-way plus a Unisys ES7000 16‑way and 32-way x64 based on EMC and Hitachi storage. The SQL Database DW size is 47&amp;nbsp;GB and the Analysis Services database with 20&amp;nbsp;cubes is 19&amp;nbsp;GB. It appears that a Unisys x64 32-way EMC may be the right option for their requirements. &lt;/font&gt;&lt;/p&gt;
&lt;table class="MsoNormalTable" style="MARGIN:auto auto auto 4.6pt;WIDTH:505.55pt;BORDER-COLLAPSE:collapse;mso-yfti-tbllook:1184;mso-padding-alt:0in 5.4pt 0in 5.4pt;" cellspacing="0" cellpadding="0" class="MsoNormalTable"&gt;

&lt;tr style="HEIGHT:15.75pt;mso-yfti-irow:0;mso-yfti-firstrow:yes;"&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:147.4pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:15.75pt;BACKGROUND-COLOR:transparent;" colspan="4"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:12pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Unisys x64&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:97pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:15.75pt;BACKGROUND-COLOR:transparent;" colspan="2"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:85.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:15.75pt;BACKGROUND-COLOR:transparent;" colspan="2"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:163.85pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:15.75pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:11.8pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:15.75pt;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:13.5pt;mso-yfti-irow:1;"&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:34.2pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:113.2pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:97pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;" colspan="2"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:85.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;" colspan="2"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:163.85pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:11.8pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:5.75pt;mso-yfti-irow:2;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#7f7f7f 1pt solid;WIDTH:41.3pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:5.75pt;mso-border-top-alt:1.0pt;mso-border-left-alt:1.0pt;mso-border-bottom-alt:.5pt;mso-border-right-alt:.5pt;mso-border-color-alt:#7F7F7F;mso-border-style-alt:solid;" colspan="2" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:&amp;#39;Gulim&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:Gulim;"&gt;Case&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:99pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:5.75pt;mso-border-top-alt:solid #7F7F7F 1.0pt;mso-border-left-alt:solid #7F7F7F .5pt;mso-border-alt:solid #7F7F7F .5pt;" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:&amp;#39;Gulim&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:Gulim;"&gt;Step&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:5.75pt;mso-border-top-alt:solid #7F7F7F 1.0pt;mso-border-left-alt:solid #7F7F7F .5pt;mso-border-alt:solid #7F7F7F .5pt;" colspan="2" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:&amp;#39;Gulim&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:Gulim;"&gt;Server&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:5.75pt;mso-border-top-alt:solid #7F7F7F 1.0pt;mso-border-left-alt:solid #7F7F7F .5pt;mso-border-alt:solid #7F7F7F .5pt;" colspan="2" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Elapsed Time&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:148.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:5.75pt;mso-border-top-alt:solid #7F7F7F 1.0pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:12.75pt;mso-yfti-irow:3;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.75pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;DW&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.75pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Middle&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:4;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#7f7f7f 1pt solid;WIDTH:41.3pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F 1.0pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2" rowspan="4"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;case1&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:99pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F .5pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" rowspan="4"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Oracle ODS -&amp;gt; Staging ODS (With SSISOLE)&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;2:53:34&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 7%&lt;br /&gt;MAX 11% &lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 81%&lt;br /&gt;MAX 99%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:5;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;2:52:02&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 13%&lt;br /&gt;MAX 27% &lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 82%&lt;br /&gt;MAX 99%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:6;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;2:43:35&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 7%&lt;br /&gt;MAX 11% &lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 86%&lt;br /&gt;MAX 100%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:7;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;2:33:32&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 15%&lt;br /&gt;MAX 27%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 92%&lt;br /&gt;MAX 100%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:8;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#7f7f7f 1pt solid;WIDTH:41.3pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F 1.0pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2" rowspan="4"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;case2&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:99pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F .5pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" rowspan="4"&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;ETL &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;(Fact, Mart&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:35:30&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 23%&lt;br /&gt;MAX 44%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:9;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:42:57&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 36%&lt;br /&gt;MAX 76%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:10;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:34:13&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 28%&lt;br /&gt;MAX 50%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:11;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:40:34&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 37%&lt;br /&gt;MAX 74%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:12;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#7f7f7f 1pt solid;WIDTH:41.3pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F 1.0pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2" rowspan="4"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;case3&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:99pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F .5pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" rowspan="4"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Cube &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:&amp;#39;Gulim&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:Gulim;"&gt;build&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;0:53:40&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 13%&lt;br /&gt;MAX 42%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:13;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;0:56:03&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 27%&lt;br /&gt;MAX 72%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:14;mso-row-margin-right:72.75pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;0:52:29&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 16%&lt;br /&gt;MAX 44%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:25.5pt;mso-yfti-irow:15;mso-row-margin-right:72.75pt;mso-yfti-lastrow:yes;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;0:55:13&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="2"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG 27%&lt;br /&gt;MAX 72%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:1in;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:25.5pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="2"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;table class="MsoNormalTable" style="MARGIN:auto auto auto 4.6pt;WIDTH:521.5pt;BORDER-COLLAPSE:collapse;mso-yfti-tbllook:1184;mso-padding-alt:0in 5.4pt 0in 5.4pt;" cellspacing="0" cellpadding="0" class="MsoNormalTable"&gt;

&lt;tr style="HEIGHT:15.75pt;mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-row-margin-right:7.1pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:147.4pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:15.75pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:12pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;HP IA64&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:97pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:15.75pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:15.75pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:107.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:15.75pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81.95pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:15.75pt;BACKGROUND-COLOR:transparent;" colspan="2"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:13.5pt;mso-yfti-irow:1;"&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:41.3pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:113.2pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:97pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:107.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;" colspan="3"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81.95pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:13.5pt;BACKGROUND-COLOR:transparent;" colspan="2"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:12.75pt;mso-yfti-irow:2;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#7f7f7f 1pt solid;WIDTH:41.3pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.75pt;mso-border-right-alt:solid #7F7F7F .5pt;mso-border-alt:solid #7F7F7F 1.0pt;" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:&amp;#39;Gulim&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:Gulim;"&gt;Case&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:97.1pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.75pt;mso-border-top-alt:1.0pt;mso-border-left-alt:.5pt;mso-border-bottom-alt:1.0pt;mso-border-right-alt:.5pt;mso-border-color-alt:#7F7F7F;mso-border-style-alt:solid;" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:&amp;#39;Gulim&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:Gulim;"&gt;Step&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.75pt;mso-border-top-alt:1.0pt;mso-border-left-alt:.5pt;mso-border-bottom-alt:1.0pt;mso-border-right-alt:.5pt;mso-border-color-alt:#7F7F7F;mso-border-style-alt:solid;" colspan="3" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:&amp;#39;Gulim&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:Gulim;"&gt;Server&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.75pt;mso-border-top-alt:1.0pt;mso-border-left-alt:.5pt;mso-border-bottom-alt:1.0pt;mso-border-right-alt:.5pt;mso-border-color-alt:#7F7F7F;mso-border-style-alt:solid;" colspan="3" rowspan="2"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Elapsed Time&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:150.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.75pt;mso-border-top-alt:solid #7F7F7F 1.0pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="4"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;CPU&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:13.5pt;mso-yfti-irow:3;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:13.5pt;mso-border-bottom-alt:solid #7F7F7F 1.0pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;DW&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#ffc000;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:13.5pt;mso-border-bottom-alt:solid #7F7F7F 1.0pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;b&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Middle&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:26.9pt;mso-yfti-irow:4;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#7f7f7f 1pt solid;WIDTH:41.3pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:26.9pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F 1.0pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" rowspan="4"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;case1&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:97.1pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:26.9pt;BACKGROUND-COLOR:transparent;mso-border-top-alt:solid #7F7F7F .5pt;mso-border-left-alt:solid #7F7F7F .5pt;mso-border-alt:solid #7F7F7F .5pt;" rowspan="4"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Oracle ODS -&amp;gt; Staging ODS (with Raw files)&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:26.9pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:26.9pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;2:53:00&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:26.9pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 13%&lt;br /&gt;MAX : 44%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:26.9pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 71%&lt;br /&gt;MAX : 99%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:22pt;mso-yfti-irow:5;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:22pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:22pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;2:47:07&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:22pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 25%&lt;br /&gt;MAX : 87%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:22pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 75%&lt;br /&gt;MAX : 99%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:11.2pt;mso-yfti-irow:6;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:11.2pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:11.2pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;2:51:58&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:11.2pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 16%&lt;br /&gt;MAX : 42%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:11.2pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 77%&lt;br /&gt;MAX : 100%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:12.55pt;mso-yfti-irow:7;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.55pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.55pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;2:52:38&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.55pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 27%&lt;br /&gt;MAX : 85%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:12.55pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 73%&lt;br /&gt;MAX : 99%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:10.75pt;mso-yfti-irow:8;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#7f7f7f 1pt solid;WIDTH:41.3pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:10.75pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F 1.0pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" rowspan="4"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;case2&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:97.1pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:10.75pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F .5pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" rowspan="4"&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;ETL &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:Calibri;"&gt;(Fact, Mart&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:10.75pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:10.75pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:52:14&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:10.75pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 18%&lt;br /&gt;MAX : 45%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:10.75pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:3.65pt;mso-yfti-irow:9;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;2:05:24&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 30%&lt;br /&gt;MAX : 82%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:3.65pt;mso-yfti-irow:10;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:55:19&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 20%&lt;br /&gt;MAX : 50%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:3.65pt;mso-yfti-irow:11;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:57:37&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 34%&lt;br /&gt;MAX : 81%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:3.65pt;mso-yfti-irow:12;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#7f7f7f 1pt solid;WIDTH:41.3pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F 1.0pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" rowspan="4"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;case3&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:97.1pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-left-alt:solid #7F7F7F .5pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" rowspan="4"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;Cube &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:&amp;#39;Gulim&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:Gulim;"&gt;build&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:03:07&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 13%&lt;br /&gt;MAX : 41%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:3.65pt;mso-yfti-irow:13;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - HDS&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:00:29&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 25%&lt;br /&gt;MAX : 84%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#7f7f7f 1pt solid;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-top-alt:solid #7F7F7F .5pt;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:3.65pt;mso-yfti-irow:14;mso-row-margin-right:89.05pt;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;32way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;1:01:01&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 13%&lt;br /&gt;MAX : 38%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="HEIGHT:3.65pt;mso-yfti-irow:15;mso-row-margin-right:89.05pt;mso-yfti-lastrow:yes;"&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:76.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;16way - EMC&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:67.5pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:red;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;59:01&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:81pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;" colspan="3"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;AVG : 25%&lt;br /&gt;MAX : 96%&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#7f7f7f 1pt solid;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;WIDTH:69.05pt;PADDING-TOP:0in;BORDER-BOTTOM:#7f7f7f 1pt solid;HEIGHT:3.65pt;BACKGROUND-COLOR:transparent;mso-border-bottom-alt:solid #7F7F7F .5pt;mso-border-right-alt:solid #7F7F7F .5pt;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;mso-ascii-font-family:Calibri;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-hansi-font-family:Calibri;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:0in;BORDER-TOP:#f0f0f0;PADDING-LEFT:0in;PADDING-BOTTOM:0in;BORDER-LEFT:#f0f0f0;PADDING-TOP:0in;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;mso-cell-special:placeholder;" colspan="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class="" style="BORDER-RIGHT:#f0f0f0;BORDER-TOP:#f0f0f0;BORDER-LEFT:#f0f0f0;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;u&gt;&lt;span style="TEXT-DECORATION:none;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/u&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="FONT-SIZE:14pt;LINE-HEIGHT:115%;"&gt;&lt;font face="Calibri"&gt;Conclusion&lt;/font&gt;&lt;/span&gt;&lt;/b&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Based on these results for the specific requirements of this company it appears the best solution is Solution&amp;nbsp;4. The company plans to get the following servers to maximize price/performance ratio:&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="MARGIN:0in 0in 0pt 0.25in;TEXT-INDENT:-0.25in;mso-add-space:auto;mso-list:l0 level1 lfo2;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;A 4 dual-core 32‑bit server with 20‑GB of RAM using Oracle’s latest 32‑bit OLE DB Provider as a dedicated SSIS server&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="MARGIN:0in 0in 10pt 0.25in;TEXT-INDENT:-0.25in;mso-add-space:auto;mso-list:l0 level1 lfo2;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;An 8 dual-core x64 server with 32‑GB of RAM and EMC SAN to host SQL Server RBMS and Analysis Services&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;For more information about SSIS connectivity options, see &lt;/font&gt;&lt;a href="http://technet.microsoft.com/en-us/library/bb332055.aspx"&gt;&lt;font face="Calibri" color="#0000ff" size="3"&gt;Connectivity and SQL Server 2005 Integration Services&lt;/font&gt;&lt;/a&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;font face="Calibri" size="3"&gt;. &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=358" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=KZ1LqEddJ-k:Ogh4i4Qyk10:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=KZ1LqEddJ-k:Ogh4i4Qyk10:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/KZ1LqEddJ-k" height="1" width="1"/&gt;</description><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2008/08/09/moving-large-amounts-of-data-between-oracle-and-sql-server-findings-and-observations.aspx</feedburner:origLink></item><item><title>Running Microsoft SQL Server 2008 Analysis Services on Windows Server 2008 vs. Windows Server 2003 and Memory Preallocation: Lessons Learned</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/oKMTo_NXw-I/running-microsoft-sql-server-2008-analysis-services-on-windows-server-2008-vs-windows-server-2003-and-memory-preallocation-lessons-learned.aspx</link><pubDate>Wed, 16 Jul 2008 16:56:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:340</guid><dc:creator>CarlRabeler</dc:creator><slash:comments>8</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=340</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2008/07/16/running-microsoft-sql-server-2008-analysis-services-on-windows-server-2008-vs-windows-server-2003-and-memory-preallocation-lessons-learned.aspx#comments</comments><description>&lt;p&gt;Author: Carl Rabeler &lt;br /&gt;Contributers: Eric Jacobsen, Thomas Kejser &lt;br /&gt;Technical Reviewers: Brad Daniels, Lindsey Allen, John Desch, Wayne Robertson, Kevin Cox&lt;/p&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;SQL Server 2005 Service Pack 2 introduced a new advanced configuration setting for Analysis Services that enables an administrator to specify that a certain percentage of memory be allocated to Analysis Services when the service starts (memory preallocation). This configuration setting was introduced because the Microsoft Windows Server 2003 operating system did not scale well with many small virtual memory allocations due to memory fragmentation and inefficiencies in retrieving information already located in memory. With the use of this configuration setting with 64-bit versions of Windows Server 2003 on multiprocessor computers (specifically computers with 16, 32, and 64 cores), the SQL Customer Advisor Team (SQL CAT) observed significant performance gains during Analysis Services processing and querying when memory use substantially exceeds 3 GB. Indeed, when Unisys and Microsoft achieved a record-setting benchmark for Analysis Services cube processing, the memory preallocation configuration setting for Analysis Services was set to 20 rather than to the default setting of 0 (resulting in 20% of physical memory being allocated to Analysis Services). For more information about this benchmark, see &lt;a href="http://www.unisys.com/eprise/main/admin/corporate/doc/02_21_08_DW_whitepaper_for_Wn_Sv_launch_final_for_web.pdf"&gt;Data Warehouse Performance: Unisys and Microsoft Achieve Record-setting Benchmark&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;The memory manager in Windows Server 2008 includes many performance and scalability enhancements, one of which is a change in the algorithm for scanning pages in memory. Additional memory manager improvements include the following:&lt;/p&gt;
&lt;p&gt;· Kernel virtual address space is dynamically allocated to improve scalability when a greater number of processors and larger memory configurations are used. The sizes of paged and non-paged memory pools are no longer fixed, so manually reconfiguring systems to prevent resource imbalances is not required. Previously, the sizes of some resources, such as memory pools, were set by registry keys or by SKU.&lt;/p&gt;
&lt;p&gt;· Kernel virtual address space is made more available in x86 architectures by more efficiently using space in kernel-mode stacks in recursive calls into the kernel.&lt;/p&gt;
&lt;p&gt;· When a kernel-mode component allocates more than a page of memory, the memory manager now uses the pool memory between the end of that allocation and the next page boundary to satisfy other memory requests.&lt;/p&gt;
&lt;p&gt;· SuperFetch, an adaptive page prefetch technique that analyzes data usage patterns and preloads data into memory according to those patterns, was added.&lt;/p&gt;
&lt;p&gt;· Numerous enhancements that make writing to the page file faster and more efficient have been added. The memory manager now writes more data in each operation, aligns pages with their neighbors, and does not write pages that are completely zero.&lt;/p&gt;
&lt;p&gt;· There is now greater coordination between the memory manager and the cache manager for write operations.&lt;/p&gt;
&lt;p&gt;· Prefetch-style clustering of pages to satisfy page faults and populate the system cache was added. &lt;/p&gt;
&lt;p&gt;· The capabilities of NUMA architectures are more fully utilized.&lt;/p&gt;
&lt;p&gt;For more information about the improvements in the Windows Server 2008 memory manager, see:&lt;/p&gt;
&lt;p&gt;· &lt;a href="http://www.microsoft.com/whdc/system/sysinternals/memmgt.mspx"&gt;Advances in Memory Management for Windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;· &lt;a href="http://blogs.technet.com/askperf/archive/2008/02/07/ws2008-memory-management-dynamic-kernel-addressing-memory-priorities-and-i-o-handling.aspx"&gt;Memory Management, Dynamic Kernel Addressing, Memory Priorities and I/O Handling&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;· &lt;a href="http://blogs.technet.com/winserverperformance/archive/2008/06/26/designing-applications-for-high-performance-part-iii.aspx"&gt;Designing Applications for High Performance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;· &lt;a href="http://technet.microsoft.com/en-us/magazine/cc194386.aspx"&gt;Inside Windows Server 2008 Kernel Changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We decided to test and compare Analysis Services partition and dimension processing using SQL Server 2008 Analysis Services RC0 running on Windows Server 2008 and Windows Server 2003 to assess the impact of these memory manager improvements on the type of hardware and with the type of data sets with which we have previously seen significant performance benefits with the memory preallocation configuration setting. &lt;/p&gt;
&lt;h2&gt;Executive Summary&lt;/h2&gt;
&lt;p&gt;Due to the improvements in the Windows Server 2008 memory manager related to the change in the algorithm for scanning pages in memory, SQL Server 2008 Analysis Services performed equally well during both partition and dimension processing with or without memory preallocation when running on Windows Server 2008. However, SQL Server 2008 Analysis Services performed substantially better during both partition and dimension processing with the use of the memory preallocation configuration setting when running on Windows Server 2003. Specifically, the processing performance of Analysis Services 2008 without memory preallocation on Windows Server 2008 was virtually identical to the processing performance of Analysis Services 2008 on Windows Server 2003 with memory preallocation. With the hardware that we used in our tests and with the Analysis Services objects that we processed, we observed a performance benefit of approximately 100% during partition processing and a performance benefit of between 30-40% during dimension processing.&lt;/p&gt;
&lt;p&gt;If you use memory preallocation with SQL Server 2008 (or SQL Server 2005), use a value that is low enough to ensure that sufficient memory remains for other processes on the computer (avoiding paging) and high enough for Analysis Services (use the peak value for the Process: Private Bytes counter for the msmdsrv instance to establish this value).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: While we did not specifically test SQL Server 2005 Analysis Services for this technical note, the results discussed here apply to Analysis Services 2005 as well as to Analysis Services 2008 because the underlying code base for the portion of Analysis Services 2008 that we tested has not changed. &lt;/p&gt;
&lt;h2&gt;Test Environment&lt;/h2&gt;
&lt;p&gt;For our testing, we used the following:&lt;/p&gt;
&lt;p&gt;· A Unisys ES7000/one Enterprise Server with 32 dual-core x64 processors and 128 GB of RAM that was connected to two HP EVA 8000 arrays&lt;/p&gt;
&lt;p&gt;· Windows Server 2003 Datacenter Edition and Windows Server 2008 Datacenter Edition&lt;/p&gt;
&lt;p&gt;· SQL Server 2008 RC0&lt;/p&gt;
&lt;p&gt;· An internal Microsoft sales database, containing approximately 1 terabyte of relational data&lt;/p&gt;
&lt;p&gt;· An Analysis Services cube based on this relational database, which resulted in a cube that was approximately 180 GB in size. The dimensions were approximately 60 GB in size and the partitions were approximately 120 GB in size (and contained no aggregations).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: We used the Microsoft Enterprise Engineering Center, with its extensive hardware inventory and team expertise to build the test system for this test.&lt;/p&gt;
&lt;h3&gt;Database Engine Configuration&lt;/h3&gt;
&lt;p&gt;For our processing tests, we set the minimum and maximum memory for the relational engine to 20 GB. We left all other settings at their defaults. We located the data and log files for the relational database on different LUNs from the Analysis Services dimension and partition files.&lt;/p&gt;
&lt;h3&gt;Analysis Services Configuration&lt;/h3&gt;
&lt;p&gt;In Analysis Services, we set memory preallocation to 40 (&amp;lt;PreAllocate&amp;gt;40&amp;lt;/PreAllocate&amp;gt;) in the msmdsrv.ini file (which preallocates 40% of the 128 GB of memory on our test computer to Analysis Services at startup). We experimented with enabling large page support, but found no measurable performance benefit. Large pages require that the Analysis Services service account have the lock pages in memory user directly on the local computer. Large page support enables server applications to establish contiguous large-page memory regions. For more information about large page support and restrictions when using large pages, see &lt;a href="http://msdn.microsoft.com/en-us/library/aa366720(VS.85).aspx"&gt;Large Page Support&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Caution&lt;/b&gt;: When we enabled large page support for Analysis Services on Windows Server 2003 after the computer had been in operation for some time, and then restarted Analysis Services, this service took longer to restart than without large page support (from several minutes to occasionally much longer, sometimes requiring a system restart due to the inability of this service to acquire the specified amount of contiguous large pages because of memory fragmentation). However, we rarely saw this symptom with Windows Server 2008. When we enabled large page support for Analysis Services with Windows Server 2008, this service would restart quickly.&lt;/p&gt;
&lt;h3&gt;Test Methodology&lt;/h3&gt;
&lt;p&gt;For our processing tests, we processed the following Analysis Services objects:&lt;/p&gt;
&lt;p&gt;· A single measure group containing 158 partitions. The size of these partitions on disk was approximately 9 GB. We fully processed this measure group after unprocessing all of the partitions in the measure group.&lt;/p&gt;
&lt;p&gt;· A dimension containing 89 attributes, with the key attribute containing approximately 26 million distinct members. The size of this dimension on disk was approximately 38 GB. We fully processed this dimension after unprocessing the dimension.&lt;/p&gt;
&lt;p&gt;· A dimension containing 47 attributes, with the key attribute containing approximately 75,000,000 distinct members. The size of this dimension on disk was approximately 18 GB. We incrementally processed this previously processed dimension (process update).&lt;/p&gt;
&lt;p&gt;With each processing test, we always worked with warm file system cache (we did not reboot the computer between tests). That is, for each test, we tested once with the cold file system cache and then tested three times with the warm file cache to confirm that our test results were reproducible.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: We chose large dimensions and measure groups to attempt to maximize the potential impact of memory preallocation. The performance benefit of memory preallocation with smaller dimensions and partitions was not tested.&lt;/p&gt;
&lt;h2&gt;Test Results&lt;/h2&gt;
&lt;p&gt;In our tests, we observed the following:&lt;/p&gt;
&lt;p&gt;· Using default settings, the processing performance of Analysis Services 2008 on Windows Server 2008 was always superior to the processing performance of Analysis Services 2008 on Windows Server 2003 (see Figure 1).&lt;/p&gt;
&lt;p&gt;· Using memory preallocation with Analysis Services 2008 on Windows Server 2003 enabled us to match the processing performance of Analysis Services 2008 on Windows Server 2008 with default settings (See Figure 2).&lt;/p&gt;
&lt;p&gt;· Using memory preallocation with Analysis Services 2008 on Windows Server 2008 provided no measurable performance benefit (See Figure 3).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The results that we saw may not apply across all hardware platforms or with all data sets. We verified our test results on an HP Superdome with 32 IA64 single-core processors and 64 GB of RAM to compare the x64 and IA64 platforms with respect to this configuration setting. We did not verify our test results with SQL Server 2005, but do expect that we would see very similar results with this version of SQL Server. We also did not verify our results on any other hardware platforms.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Caution&lt;/b&gt;: If you choose to preallocate memory with Analysis Services 2008 (or Analysis Services 2005) when running on Windows Server 2003, test thoroughly to determine if there is a performance benefit in your environment. If you do preallocate memory, you must ensure that sufficient memory remains for the operating system and other services on your computer.&lt;/p&gt;
&lt;h3&gt;Partition Processing&lt;/h3&gt;
&lt;p&gt;During our partition processing tests, we observed performance improvements with memory preallocation of approximately 100% (see Figure 1).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Run.WindowsServer2003andMemoryPreallocat_8B27/image_6.png"&gt;&lt;img height="293" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Run.WindowsServer2003andMemoryPreallocat_8B27/image_thumb_2.png" width="485" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 1: Analysis Services 2008 Partition Processing&lt;/b&gt;&lt;/p&gt;
&lt;h3&gt;Dimension Processing&lt;/h3&gt;
&lt;p&gt;During our dimension processing tests, we observed performance improvements with memory preallocation of between 30-40% (see Figures 2 and 3).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Run.WindowsServer2003andMemoryPreallocat_8B27/image_4.png"&gt;&lt;img height="293" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Run.WindowsServer2003andMemoryPreallocat_8B27/image_thumb_1.png" width="485" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 2: Analysis Services 2008 Dimension Processing—Full&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Run.WindowsServer2003andMemoryPreallocat_8B27/image_2.png"&gt;&lt;img height="293" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Run.WindowsServer2003andMemoryPreallocat_8B27/image_thumb.png" width="485" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 3: Analysis Services 2008 Dimension Processing—Incremental&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: While we did not include MDX querying in this memory preallocation test, we observed the benefit of memory preallocation with SQL Server 2005 Analysis Services on Windows Server 2003 when we tested the performance of MDX queries involving many-to-many dimensions. For more information, see &lt;a class="" title="OLE_LINK4" name="OLE_LINK4"&gt;&lt;/a&gt;&lt;a class="" title="OLE_LINK3" name="OLE_LINK3"&gt;&lt;/a&gt;&lt;a class="" title="OLE_LINK2" name="OLE_LINK2"&gt;&lt;/a&gt;&lt;a class="" title="OLE_LINK1" name="OLE_LINK1"&gt;&lt;/a&gt;&lt;a href="http://sqlcat.com/whitepapers/archive/2008/05/03/analysis-services-many-to-many-dimensions-query-performance-optimization-techniques.aspx"&gt;Analysis Services Many-to-Many Dimensions: Query Performance Optimization Techniques&lt;/a&gt;. We expect the results that we saw in this test when running Analysis Services 2008 on Windows Server 2008 to apply equally to MDX queries, but more testing is required in this area.&lt;/p&gt;
&lt;h2&gt;Determining the Appropriate Value for Memory Preallocation&lt;/h2&gt;
&lt;p&gt;If you use memory preallocation with SQL Server 2008 (or SQL Server 2005), use a value that is low enough to ensure that sufficient memory remains for other processes on the computer (avoiding paging) and high enough for Analysis Services (use the peak value for the Process: Private Bytes counter for the msmdsrv instance to establish this value). &lt;/p&gt;
&lt;p&gt;· If you set the memory preallocation value too high, you will starve other processes on the server and the result will be memory paging. If you are running the SQL Server relational engine on the same server as Analysis Services, you should also limit the maximum amount of memory used by the SQL Server relational engine. While there is no hard limit for how much memory you should leave for the operating system, 6-8 GB is generally sufficient if no other services are running on the same server.&lt;/p&gt;
&lt;p&gt;· Set the memory preallocation to a value that is high enough to ensure that Analysis Service preallocates sufficient memory for Analysis Services query and processing activity on the server such that it does not need to request any additional address space. To determine this value, monitor the peak value for the Process: Private Bytes counter for the msmdsrv instance. The peak value establishes the maximum value for memory preallocation that you need to set. When you cannot set the preallocation value this high, set it as high as possible without starving other processes and the operating system.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;For optimum performance with SQL Server 2008 Analysis Services default settings, use Windows Server 2008. To match the performance of SQL Server 2008 Analysis Services running on Windows Server 2008 when running SQL Server 2008 Analysis Services on Windows Server 2003, consider using memory preallocation. These conclusions apply to SQL Server 2005 as well as to SQL Server 2008.&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=340" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=oKMTo_NXw-I:5ALhQTz6xSI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=oKMTo_NXw-I:5ALhQTz6xSI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/oKMTo_NXw-I" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Performance/default.aspx">Performance</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2008/07/16/running-microsoft-sql-server-2008-analysis-services-on-windows-server-2008-vs-windows-server-2003-and-memory-preallocation-lessons-learned.aspx</feedburner:origLink></item><item><title>Scaling Up Reporting Services 2008 vs. Reporting Services 2005: Lessons Learned</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/kn7ZiR5oapc/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx</link><pubDate>Wed, 09 Jul 2008 20:24:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:327</guid><dc:creator>CarlRabeler</dc:creator><slash:comments>18</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=327</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx#comments</comments><description>&lt;p align="left"&gt;Author: Carl Rabeler&lt;br /&gt;Test Contributers: Jim Carroll, David Raskino, Bill Emmert, Dan Manrique, Jim Dugan&lt;br /&gt;Technical Reviewers: Robert Bruckner, David Raskino, Lukasz Pawlowski, Burzin Patel, Kun Cheng, Thierry D&amp;#39;Hers, Prem Mehra, Kevin Cox&lt;/p&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Microsoft SQL Server 2008 Reporting Services contains many improvements designed to improve performance and capacity. The rearchitecture of the Reporting Services 2008 server as a single server with embedded HTTP capabilities enables Reporting Services 2008 to exercise more control over resource management (thread, memory, and state management) to improve performance and scalability, as well as configurability. The new report engine architecture includes a new on-demand processing model designed to ensure that sufficient memory is always available to execute very large reports and heavy workloads from a large number of concurrent users (by paging and releasing memory in response to memory pressure). Using an early RC0 build (which was not an optimized build), we tested the performance of SQL Server 2008 Reporting Services versus SQL Server 2005 Reporting Services, SP2 (which was optimized) on several scale-up hardware platforms. This technical note discusses our tests and our learnings. &lt;/p&gt;
&lt;h2&gt;Executive Summary&lt;/h2&gt;
&lt;p&gt;Reporting Services 2008 was able to respond to 3–4 times the total number of users and their requests on the same hardware without HTTP 503 Service Is Unavailable errors compared with Reporting Services 2005, regardless of the type of renderer. In stark contrast, Reporting Services 2005 generated excessive HTTP 503 Service Is Unavailable errors as the number of users and their requests increased, regardless of the report renderer. &lt;/p&gt;
&lt;p&gt;Our tests clearly show that the new memory management architecture of the report server enables Reporting Services 2008 to scale very well, particularly on the new four-processor, quad-core processors. With our test workload, Reporting Services 2008 consistently outperformed SQL Server 2005 with the PDF and XLS renderers on the four-processor, quad-core hardware platform (16 cores) both in terms of response time and in terms of total throughput. Furthermore, with these renderers on this hardware platform, Reporting Services dramatically outperformed other hardware platforms regardless of Reporting Services version, responding to 3–5 times the number of requests than when running on either of the other hardware platforms. As a result, we recommend that you scale up to four-processor, quad-core servers for performance and scale out to a two-node deployment for high availability. Thereafter, as demand for more capacity occurs, add more four-processor, quad-core servers.&lt;/p&gt;
&lt;p&gt;Finally, with all renderers and with all hardware platforms using our test workload, the performance bottlenecks were the processor on the front-end server and the disk subsystem on the data source with Reporting Services 2008, whereas the Reporting Services front-end Web service was the performance bottleneck with Reporting Services 2005. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: This technical note assumes that you are familiar with the following articles:&lt;/p&gt;
&lt;p&gt;· &lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/pspsqlrs.mspx"&gt;Planning for Scalability and Performance with Reporting Services&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;· &lt;a href="http://sqlcat.com/technicalnotes/archive/2008/06/05/reporting-services-scale-out-architecture.aspx"&gt;Reporting Services Scale-Out Architecture&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Test Environment&lt;/h2&gt;
&lt;p&gt;We used a standard remote catalog environment for all testing. Figure 1 illustrates the test environment for our scale-up performance tests. For our Reporting Services 2008 tests, SQL Server 2008 components were installed on all servers and for our Reporting Services 2005 tests, SQL Server 2005 components were installed on all servers. Windows Server 2003 was used for all our tests.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_8.png"&gt;&lt;img height="333" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_3.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 1: Reporting Services Scale-Up Architecture with Remote Catalog and Remote Data Source&lt;/b&gt;&lt;/p&gt;
&lt;h3&gt;Reporting Services “Front-End” Servers&lt;/h3&gt;
&lt;p&gt;For the Reporting Services front-end server, we tested Reporting Services 2008 and Reporting Services 2005 on the following three hardware platforms: &lt;/p&gt;
&lt;p&gt;· Hardware Configuration #1 (2x2): One HP Proliant BL 460c G1 computer with two x64 dual core processors and 16 GB RAM&lt;/p&gt;
&lt;p&gt;· Hardware Configuration #2 (4x2): One Dell 2970 computer with four x64 dual core processors and 16 GB RAM&lt;/p&gt;
&lt;p&gt;· Hardware Configuration #3 (4x4): One HP Proliant BL 460c G5 computer with four x64 quad core processors and 16 GB RAM &lt;/p&gt;
&lt;h3&gt;Reporting Server Catalog Servers&lt;/h3&gt;
&lt;p&gt;For the Report Server catalog server, we used one HP Proliant BL 460c G1 computer with two x64 dual core processors and 8 GB RAM for all tests. The Report Server catalog server was connected to an EMC Clarion CX3 Model 40 SAN.&lt;/p&gt;
&lt;h3&gt;Reporting Data Source Server&lt;/h3&gt;
&lt;p&gt;For the Report Server data source server, we used one HP Proliant BL 460c G5 computer with four x64 quad core processors and 16 GB RAM for all tests. The Report Server data source server was connected to an EMC Clarion CX3 Model 40 SAN.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Important&lt;/b&gt;: We used the same configuration for the Report Server catalog server and the Report Server data source server for all tests. Our testing with Reporting Services 2008 revealed that disk queuing was a performance bottleneck and that even closer attention must be paid to disk configuration for optimum performance with Reporting Services 2008 than with Reporting Services 2005. This close attention includes the disk configuration for the source database(s) as well as the &lt;b&gt;ReportServer&lt;/b&gt; and &lt;b&gt;ReportServerTempDB&lt;/b&gt; databases. For more information about optimizing storage for best performance, see &lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/storage-top-10.mspx"&gt;Storage Top 10 Best Practices&lt;/a&gt; and &lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/pdpliobp.mspx"&gt;Predeployment I/O Best Practices&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Test Harness&lt;/h2&gt;
&lt;p&gt;For our performance tests, we used Visual Studio Team System 2008 Test Edition (VSTS) to test a report load based on the Adventure Works sample relational database. For our tests, we created 50 separate reports of varying complexity and size and designed for different user personas, such as Executive, Territory Manager, Product Manager, and Sales Manager. The report load consisted of:&lt;/p&gt;
&lt;p&gt;· A mix of execution modes with 95% live and 5% snapshot&lt;/p&gt;
&lt;p&gt;· A mix of data region types with 80% table and 20% chart&lt;/p&gt;
&lt;p&gt;· A mix of query data sizes with 60% small, 20% medium, and 20% large&lt;/p&gt;
&lt;p&gt;All tests were executed using the same mix of these reports. These reports were executed with a think time of 20 seconds between the execution of each report and we ramped up to a specified number of users. While we conducted our tests with different numbers of users, this technical note focuses primarily on our 5,000-user test as the most representative of the differences and similarities between Reporting Server 2008 and Reporting Services 2005 (Ramp Up Test). At the end of this technical note, we discuss the results of a push test to determine how far we can push Reporting Services 2008 compared to SQL Server 2005, and to observe where the bottleneck occurs with each version of Reporting Services (push test). We executed test runs for the following report renderers:&lt;/p&gt;
&lt;p&gt;· HTML&lt;/p&gt;
&lt;p&gt;· PDF&lt;/p&gt;
&lt;p&gt;· XLS&lt;/p&gt;
&lt;p&gt;· Mix (approximately 33% of each renderer)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: We modified the &lt;b&gt;MaxActiveReqForOneUser&lt;/b&gt; configuration setting for this test to enable us to test with this number of users.&lt;/p&gt;
&lt;h2&gt;Test Results&lt;/h2&gt;
&lt;p&gt;The following sections discuss the results that we observed with each report renderer on each hardware platform.&lt;/p&gt;
&lt;h3&gt;Ramp Up Test with a Mix of Report Renderers&lt;/h3&gt;
&lt;p&gt;With a mix of report renderers, Reporting Services 2008 outperformed Reporting Services 2005 on the 4x4 and 4x2 hardware platforms, with the 4x4 hardware platform substantially outperforming the 4x2 and 2x2 hardware platforms regardless of the Reporting Services version. Figures 2, 3 and 4 graphically display the errors/sec, average response time, and total requests counters for these hardware platforms for each version of Reporting Services.&lt;/p&gt;
&lt;h4&gt;Errors/Sec&lt;/h4&gt;
&lt;p&gt;When we analyzed the errors/sec counter values from our ramp up test with a mix of report renderers, we discovered that excessive HTTP 503 Service Is Unavailable errors occurred during the Reporting Services 2005 tests on all hardware platforms at approximately 4,500 users (see Figure 2). During the Reporting Services 2008 tests on the three hardware platforms with the mix of report renderers, we observed that no such hard limit was hit. We observed that this same limit was hit with all report renderers during our Reporting Services 2005 tests and was not hit with any of our Reporting Services 2008 tests. Reporting Services 2008 manages memory under heavy load much better than Reporting Services 2005, and it avoids overloading the Reporting Services front-end server. The excessive HTTP 503 errors with Reporting Services 2005 indicate that the heavy load coming from the clients overloaded the Reporting Services front-end server to the point where the server is simply starved for resources, and reveal that memory management under load is clearly a problem with Reporting Services 2005. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The Errors/sec counter value includes HTTP errors (HTTP 500 and HTTP 503 errors). HTTP 503 errors with Reporting Services tell you that the Web service itself is unable to respond (frequently due to insufficient memory). HTTP 500 errors with Reporting Services tell you that the Web service was unable to complete the request for some unknown reason (generally due hardware bottlenecks on the front-end server, the network or the back-end server). During the push test discussion (later in this technical note), we analyze in more detail the bottlenecks we saw with Reporting Services 2008 that resulted in HTTP 500 errors. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_10.png"&gt;&lt;img height="290" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_4.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 2: Mix of Renderers—Errors/Sec&lt;/b&gt;&lt;/p&gt;
&lt;h4&gt;Average Response Time&lt;/h4&gt;
&lt;p&gt;When we analyzed the average response time counter values from our ramp up test with a mix of report renderers, we discovered that the average response time with Reporting Services 2008 was better than with Reporting Services 2005 on the 4x4 and 4x2 hardware platforms (see Figure 3). We discovered no significant difference in the average response time on the 2x2 hardware platform. Furthermore, we discovered that the 4x4 hardware platform substantially outperformed either of the other two hardware platforms with either Reporting Services 2008 or Reporting Services 2005. Finally, we also noticed that the improvement of the average response time of Reporting Services 2008 on the 4x2 hardware platform over Reporting Services 2005 became more significant as the number of users submitting requests increased.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_12.png"&gt;&lt;img height="275" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_5.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 3: Mix of Renderers—Average Response&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The chart lines for the Reporting Services 2005 tests in Figure 3 only include the response times for the user load before the number of errors/sec climbed to the point where they completely skewed the overall response time numbers.&lt;/p&gt;
&lt;h4&gt;Total Requests&lt;/h4&gt;
&lt;p&gt;When we analyzed the total requests counter values from our ramp up test with a mix of report renderers, we discovered that not only did Reporting Services 2008 handle a greater number of users submitting reports without generating excessive timeout or service unavailable errors and render those reports with a better average response time, Reporting Services 2008 also sustained a higher throughput than Reporting Services 2005 on the 4x4 and 4x2 hardware platforms (see Figure 4). This increased throughput was most substantial on the 4x4 hardware platform, on which the throughput for the duration of the test was approximately 40% better with Reporting Services 2008 than with Reporting Services 2005. The new memory management capabilities of Reporting Services 2008 enabled the superior processing capability of the 4x4 hardware platform to perform substantially better than Reporting Services 2005 on the same platform.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_14.png"&gt;&lt;img height="279" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_6.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 4: Mix of Renderers—Total Requests&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The chart lines for the Reporting Services 2005 tests in Figure 5 only include the total requests for the user load before the number of errors/sec climbed to the point where they completely skewed the overall total request numbers. On all hardware platforms, Reporting Services 2008 kept on responding to users after Reporting Services 2005 was unable to continue due to HTTP 503 Service Is Unavailable errors.&lt;/p&gt;
&lt;h3&gt;Ramp Up PDF Report Renderer Test&lt;/h3&gt;
&lt;p&gt;With the PDF report renderer, Reporting Services 2008 outperformed Reporting Services 2005 on the 4x4 and 4x2 hardware platforms, with the 4x4 hardware platform substantially outperforming the 4x2 and 2x2 hardware platforms regardless of the Reporting Services. Figures 5 and 6 graphically display the average response time and total requests counters for each hardware platform for each version of Reporting Services. With the PDF report renderer, until the HTTP 503 error threshold discussed previously was hit with Reporting Services 2005, the processor was the performance bottleneck.&lt;/p&gt;
&lt;h4&gt;Average Response Time&lt;/h4&gt;
&lt;p&gt;When we analyzed the average response time counter values from our ramp up test with the PDF report renderer, we discovered that the average response time with Reporting Services 2008 was better than with Reporting Services 2005 on the 4x4 and 4x2 hardware platforms (see Figure 5). Furthermore, we discovered that the 4x4 hardware platform substantially outperformed either of the other two hardware platforms with either Reporting Services 2008 or Reporting Services 2005. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_34.png"&gt;&lt;img height="274" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_16.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 5: PDF Renderer—Average Response&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The chart lines for the Reporting Services 2005 tests in Figure 5 only include the response times for the user load before the number of errors/sec climbed to the point where they completely skewed the overall response time numbers. On all hardware platforms, Reporting Services 2008 kept on responding to users after Reporting Services 2005 was unable to continue due to HTTP 503 Service Is Unavailable errors.&lt;/p&gt;
&lt;h4&gt;Total Requests&lt;/h4&gt;
&lt;p&gt;When we analyzed the total requests counter values from our ramp up test with the PDF report renderer, we discovered that Reporting Services 2008 responded to a significantly greater number of requests compared to Reporting Services 2005 over the same amount of time only on the 4x4 hardware platform (see Figure 6). &lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_32.png"&gt;&lt;img height="279" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_15.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 6: PDF Renderer—Total Requests&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The chart lines for the Reporting Services 2005 tests in Figure 6 only include the total requests for the user load before the number of errors/sec climbed to the point where they completely skewed the overall total request numbers. On all hardware platforms, Reporting Services 2008 kept on responding to users after Reporting Services 2005 was unable to continue due to HTTP 503 Service Is Unavailable errors.&lt;/p&gt;
&lt;h3&gt;Ramp Up XLS Report Renderer Test&lt;/h3&gt;
&lt;p&gt;With the XLS report renderer, Reporting Services 2008 outperformed Reporting Services 2005 primarily on the 4x4 hardware platform, with the 4x4 hardware platform substantially outperforming the 4x2 and 2x2 hardware platforms regardless of the Reporting Services version. Figures 7 and 8 graphically display the average response time and total requests counters for each hardware platform for each version of Reporting Services. With the XLS report renderer, until the HTTP 503 error threshold discussed previously was hit with Reporting Services 2005, the processor was the performance bottleneck.&lt;/p&gt;
&lt;h4&gt;Average Response Time&lt;/h4&gt;
&lt;p&gt;When we analyzed the average response time counter values from our ramp up test with the XLS renderer, we discovered that the average response time with Reporting Services 2008 was better than with Reporting Services 2005 on the 4x4 and 2x2 hardware platforms (see Figure 7). Furthermore, we discovered that the 4x4 hardware platform substantially outperformed either of the other two hardware platforms with either Reporting Services 2008 or Reporting Services 2005. Finally, we also noticed that (contrary to our tests with the mix of renderers and with the PDF report renderer) the average response time of Reporting Services 2008 and Reporting Services 2005 on the 2x2 hardware platform was somewhat better than on the 4x2 hardware platform, with Reporting Services 2005 outperforming Reporting Services 2008 on this platform. This performance difference was not expected and we did not have time to investigate precisely why this performance difference was observed. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_30.png"&gt;&lt;img height="277" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_14.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 7: XLS Renderer—Average Response&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The chart lines for the Reporting Services 2005 tests in Figure 7 only include the response times for the user load before the number of errors/sec climbed to the point where they completely skewed the overall response time numbers. On the 4x4 hardware platform, Reporting Services 2008 kept on responding to users after Reporting Services 2005 was unable to continue due to HTTP 503 Service Is Unavailable errors. Notice that the HTTP 503 error threshold with Reporting Services 2005 was only hit on the 4x4 hardware platform; on the other hardware platforms using the XLS report renderer with Reporting Services 2005, the processor was the performance bottleneck.&lt;/p&gt;
&lt;h4&gt;Total Requests&lt;/h4&gt;
&lt;p&gt;When we analyzed the total requests counter values from our ramp up test with the XLS renderer, we discovered that Reporting Services 2008 responded to a significantly greater number of requests compared to Reporting Services 2005 over the same amount of time only on the 4x4 hardware platform (see Figure 8). Finally, we noticed that the total requests of Reporting Services 2008 and Reporting Services 2005 on the 2x2 hardware platform were slightly higher than on the 4x2 hardware platform.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_28.png"&gt;&lt;img height="282" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_13.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 8: XLS Renderer—Total Requests&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The chart lines for the Reporting Services 2005 tests in Figure 8 only include the total requests for the user load before the number of errors/sec climbed to the point where they completely skewed the overall total request numbers. On the 4x4 hardware platform, Reporting Services 2008 kept on responding to users after Reporting Services 2005 was unable to continue due to HTTP 503 Service Is Unavailable errors. Notice that the HTTP 503 error threshold with Reporting Services 2005 was hit only on the 4x4 hardware platform; on the other hardware platforms using the XLS report renderer with Reporting Services 2005, the processor was the performance bottleneck.&lt;/p&gt;
&lt;h3&gt;Ramp Up HTML Renderer Test&lt;/h3&gt;
&lt;p&gt;With the HTML report renderer, Reporting Services 2008 did not significantly outperform Reporting Services 2005 on any of the hardware platforms. Furthermore, the 4x4 hardware platform did not substantially outperform either the 4x2 or the 2x2 hardware platforms regardless of the Reporting Services version. Figures 9 and 10 graphically display the average response time and total requests counters for each hardware platform for each version of Reporting Services.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: It should be noted again here that our analysis of the performance counters on the Report Server catalog server as well as on the reporting data source server indicated that these tiers were a performance bottleneck with Reporting Services 2008 and were not a performance bottleneck with Reporting Services 2005. Based on our workload and our hardware/software configuration for these tests, Reporting Services 2008 could have performed even better than it did with more tuning and/or with more hardware capability on these tiers than Reporting Services 2005. We do not know, with more capacity on the back-end servers, whether the HTML renderer on Reporting Services 2008 would have outperformed the HTML rendered on Reporting Services 2005. Further testing in this area is needed.&lt;/p&gt;
&lt;h4&gt;Average Response Time&lt;/h4&gt;
&lt;p&gt;When we analyzed the average response time counter values from our ramp up test with the HTML renderer, we discovered that Reporting Services 2008 on the 4x2 and the 2x2 hardware platforms had a better average response time than Reporting Services 2005 on the same hardware platform. However, Reporting Services 2008 on the 4x4 hardware platform suffered from degradation in response times as the number of users and the workload increased (see Figure 9). We are not sure why this degradation occurred and the root cause requires more analysis and testing.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_26.png"&gt;&lt;img height="264" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_12.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 9: HTML Renderer—Average Response&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The chart lines for the Reporting Services 2005 tests in Figure 9 only include the response times for the user load before the number of errors/sec climbed to the point where they completely skewed the overall response time numbers. On all hardware platforms, Reporting Services 2008 kept on responding to users after Reporting Services 2005 was unable to continue due to HTTP 503 Service Is Unavailable errors.&lt;/p&gt;
&lt;h4&gt;Total Requests&lt;/h4&gt;
&lt;p&gt;When we analyzed the total requests counter values from our ramp up test with the HTML renderer, we discovered that Reporting Services 2008 did not render a significantly higher number of reports in the same amount of time compared to Reporting Services 2005 (see Figure 10) until after the HTTP 503 error threshold was reached.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_24.png"&gt;&lt;img height="274" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_11.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 10: HTML Renderer—Total Requests&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The chart lines for the Reporting Services 2005 tests in Figure 10 only include the total requests for the user load before the number of errors/sec climbed to the point where they completely skewed the overall total request numbers. On all hardware platforms, Reporting Services 2008 kept on responding to users after Reporting Services 2005 was unable to continue due to HTTP 503 Service Is Unavailable errors.&lt;/p&gt;
&lt;h3&gt;Push Test&lt;/h3&gt;
&lt;p&gt;We also performed some limited testing to test how far we could push the 4x4 hardware platform without significant errors. To accomplish this, we modified our VSTS test to eliminate the 20-second think time. We tested with the mix of report renders and then pushed the 4x4 hardware platform for 25 minutes, ramping up to 10,000 users over the first 10 minutes and then continuing at that number of users for the duration of the push test.&lt;/p&gt;
&lt;h4&gt;Errors/Sec&lt;/h4&gt;
&lt;p&gt;When we analyzed the errors/sec counter values from our push test with a mix of report renderers, we discovered that excessive HTTP 503 Service Is Unavailable errors occurred during the Reporting Services 2005 tests on all hardware platforms at 9 minutes into our test at approximately 9,000 users (see Figure 11). During the Reporting Services 2008 push test on the 4x4 hardware platform, we observed that no such hard limit was hit. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_22.png"&gt;&lt;img height="254" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_10.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 11: Push Test with Mix of Report Renderers—Errors/Sec&lt;/b&gt;&lt;/p&gt;
&lt;h4&gt;Http Errors vs. Request Time-Out Errors&lt;/h4&gt;
&lt;p&gt;To better understand the hardware limits we hit with Reporting Services 2008 compared to Reporting Services 2005, we compared the HTTP 503 errors we saw with Reporting Services 2005 with the Reporting Services time-out errors that we saw with Reporting Services 2008. We discovered that while the failure rate for reports with Reporting Services 2005 was directly correlated with HTTP 503 errors, the failure rate for reports with Reporting Services 2008 was directly correlated with time-out errors. These time-out errors, combined with our analysis of the disk queuing on the data source, indicate that the data source was unable to keep up with the request for data from the front-end servers. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_20.png"&gt;&lt;img height="253" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_9.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 12: Push Test – Detailed Error Analysis&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: The chart lines for the Reporting Services 2005 tests in Figure 12 only include the errors for the user load before the number of errors/sec climbed to the point where they completely skewed the overall numbers. &lt;/p&gt;
&lt;h4&gt;Average Response Time&lt;/h4&gt;
&lt;p&gt;When we analyzed the average response time and total requests counter values from our push test with a mix of report renderers (see Figure 13 and Figure 14), we discovered that while the average response time with Reporting Services 2005 was better than with Reporting Services 2008 until Reporting Services 2005 was completely overwhelmed and unable to keep responding (at about 9,000 users), Reporting Services 2008 just kept on rendering reports for a much greater throughput. Based on the disk queuing counters that we observed on the Reporting Services data source, we believe that significantly greater response times could have been achieved with Reporting Services 2008 with more hardware capacity.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_18.png"&gt;&lt;img height="288" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_8.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 13: Push Test with Mix of Report Renderers—Average Response Time&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_16.png"&gt;&lt;img height="294" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/Scal.ReportingServices2005LessonsLearned_ACF5/image_thumb_7.png" width="600" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 14: Push Test with Mix of Report Renderers—Total Requests&lt;/b&gt;&lt;/p&gt;
&lt;h2&gt;Miscellaneous&lt;/h2&gt;
&lt;p&gt;During our testing, we also observed the following:&lt;/p&gt;
&lt;p&gt;1. The Reporting Services 2005 best practice of using the file system for extreme loads was observed to have a negative impact on results and should be avoided in Reporting Services 2008. For more information on this setting in Reporting Services 2005, see &lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/pspsqlrs.mspx"&gt;Planning for Scalability and Performance with Reporting Services&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;2. During our initial optimization of the default Reporting Services 2008 and Reporting Services 2005 configurations, the only change that we made was to preallocate space to the &lt;b&gt;ReportServerTempDB&lt;/b&gt; database. This change had a significant beneficial impact on performance. We did not attempt to optimize the performance of this database by placing this database on a very fast drive or by spreading this database across multiple drives. From our analysis of our tests, we believe that the disk configuration of the &lt;b&gt;ReportServer&lt;/b&gt; and &lt;b&gt;ReportServerTempDB&lt;/b&gt; databases is even more important in Reporting Services 2008 than in Reporting Services 2005. Based on our tests, we believe that every Reporting Services 2008 installation or upgrade should pay close attention to the disk configuration of these databases. For additional information about optimizing disk configuration for Reporting Services 2005, see &lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/pspsqlrs.mspx"&gt;Planning for Scalability and Performance with Reporting Services&lt;/a&gt;. While the advice in this white paper is targeted to Reporting Services 2005, most or all of the advice is applicable to Reporting Services 2008. More testing is probably advised in this area.&lt;/p&gt;
&lt;p&gt;3. At the end of our tests, we made some preliminary tests to determine if Windows Server 2008 would provide some benefit over Windows Server 2003. Among the improvements in Windows Server 2008 are improvements in memory management and in the TCP/IP stack. While there was some improvement of Reporting Services 2008 on Windows 2008 versus Reporting Services 2008 on Windows 2003, the data that we collected was inconclusive. We expect that the rendering of many larger reports may well benefit from the memory performance improvements in Windows Server 2008. In addition, subsequent to the build that we used for our tests, there is an improvement in Reporting Services 2008 related to the rendering of images (PDF, EMF/Print, TIFF) when Reporting Services 2008 is running on Windows Server 2008. Based on other testing, this has been shown to result in about a 5.7% performance benefit for image rendering. More testing is required to determine the benefit of Windows Server 2008 in conjunction with Reporting Services 2008.&lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=327" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=kn7ZiR5oapc:9wo7S_jx6GU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=kn7ZiR5oapc:9wo7S_jx6GU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/kn7ZiR5oapc" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Database/default.aspx">Database</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Scalability/default.aspx">Scalability</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2008/07/09/scaling-up-reporting-services-2008-vs-reporting-services-2005-lessons-learned.aspx</feedburner:origLink></item><item><title>Report Server Catalog Best Practices</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/ugVGKv3RWxc/report-server-catalog-best-practices.aspx</link><pubDate>Thu, 26 Jun 2008 21:15:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:307</guid><dc:creator>denny.lee</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=307</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2008/06/26/report-server-catalog-best-practices.aspx#comments</comments><description>&lt;p align="left"&gt;&lt;em&gt;Building and Deploying Large Scale SQL Server Reporting Services Environments—Technical Note Series&lt;/em&gt; 
&lt;p align="left"&gt;Authors: Denny Lee, Lukasz Pawlowski&lt;br /&gt;Contributors: David Reinhold, John Gallardo, Dean Kalanquin, Robert Bruckner&lt;br /&gt;Technical Reviewers: Tim Shea, Mike Ruthruff, Burzin Patel&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 align="left"&gt;Introduction &lt;/h4&gt;
&lt;p align="left"&gt;This technical note is part of the &lt;i&gt;&lt;a href="http://sqlcat.com/technicalnotes/archive/2008/06/05/reporting-services-scale-out-architecture.aspx"&gt;Building and Deploying Large Scale SQL Server Reporting Services Environments Technical Note Series&lt;/a&gt;&lt;/i&gt; which provides general guidance on how to set up, implement, and optimize an enterprise scale-out architecture for your Microsoft SQL Server Reporting Services (SSRS) environment. This note provides guidance for both SQL Server 2005 and 2008 Reporting Services. The focus of this technical note is the report server catalog—the underlying databases that provide the metadata (parameters, snapshots, history, and so on) that are used by Reporting Services to provide your reports. 
&lt;h4 align="left"&gt;Architecture &lt;/h4&gt;
&lt;p align="left"&gt;Figure 1 represents a typical scale-out Reporting Services environment; as indicated by the red box, the focus of this technical note is that of the report server catalog. 
&lt;p align="left"&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportServerCatalogBestPractices_C864/image_2.png"&gt;&lt;img style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="301" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportServerCatalogBestPractices_C864/image_thumb.png" width="556" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;strong&gt;Figure 1&lt;/strong&gt;: Reporting Services Scale Out Architecture 
&lt;p align="left"&gt;As you can see, all Reporting Services servers have connections to the report server catalog. As implied by this diagram, this single instance could be a possible bottleneck in the SSRS environment. Because of this, let’s focus on what these report server databases do and how to optimize them for your environment. 
&lt;h4&gt;Report Server Databases &lt;/h4&gt;
&lt;p align="left"&gt;The report server catalog is comprised of two report server databases: 
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;&lt;b&gt;ReportServer&lt;/b&gt; (&lt;b&gt;RSDB)&lt;/b&gt; stores all report metadata including report definitions, report history and snapshots, and scheduling information. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;&lt;b&gt;ReportServerTempDB&lt;/b&gt; (&lt;b&gt;RSTempDB)&lt;/b&gt; stores all of the temporary snapshots while reports are running. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportServerCatalogBestPractices_C864/image_4.png"&gt;&lt;img style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="187" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportServerCatalogBestPractices_C864/image_thumb_1.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;strong&gt;Figure 2&lt;/strong&gt;: Breakdown of Report Server Catalog 
&lt;p align="left"&gt;These databases are responsible for containing the metadata that is needed by the Reporting Services engine so that it knows how to request data from the data source (such as a SQL Server database or an Analysis Services database). When a report is executed by a report server, SSRS loads report metadata from &lt;b&gt;RSDB&lt;/b&gt;. This includes the data source information for the report, the default parameter values, and the report itself. Note that for ad-hoc reports, this data is not loaded from the &lt;b&gt;RSDB&lt;/b&gt; catalog database because the report comes from the RDL that is executed, published, and bound to the user’s session. As well, all user session information and live or cached execution snapshots are stored in the &lt;b&gt;RSTempDB&lt;/b&gt; database. History and execution snapshots are stored in the &lt;b&gt;RSDB&lt;/b&gt; database. Subsequent report requests can use the stored state to view the report rather than re-executing the report. 
&lt;p align="left"&gt;Report execution state is represented in a snapshot. The snapshot contains the data that is retrieved from the report’s queries to the data source. SSRS keeps these snapshots so that subsequent requests for the same report can be satisfied by using the snapshot instead of re-executing the report and obtaining the data again from the original data source (thus reducing the load on your data source). By default, these snapshots are stored in the &lt;b&gt;RSTempDB&lt;/b&gt; database. Therefore, commonly requested reports hit the &lt;b&gt;RSTempDB&lt;/b&gt; database instead of querying the original data source (provided the snapshot is current). While this reduces the load against your original data source, it does increase the load on your SSRS catalog. The size of your snapshot is directly correlated to the size of the data returned by the queries of your reports. Because of this, it is important to reduce the size of your snapshots by including only the columns (and rows) you need. 
&lt;p align="left"&gt;In addition, this also implies that you must optimize the SSRS report server catalog to prevent it from being a bottleneck since every single report request hits &lt;b&gt;RSDB&lt;/b&gt;. For frequently requested reports, many database queries will hit &lt;b&gt;RSTempDB&lt;/b&gt;. Because these databases are hit for every single report request, the report server catalog has a lot of I/O and transactions in order to share state information across multiple SSRS servers. The &lt;b&gt;RSTempDB&lt;/b&gt; tables and log will grow quickly because many transactions are performed to maintain report consistency. (For example, if you get the first page of a report, you need a snapshot of the second page that is consistent.) If you have an environment with many concurrent requests (typical of most enterprise Reporting Services environments), there can be a lot of write activity to the &lt;b&gt;RSTempDB&lt;/b&gt; log. 
&lt;p align="left"&gt;For SQL Server 2005 Reporting Services, many of the insertions are performed to the &lt;b&gt;ChunkData&lt;/b&gt;, &lt;b&gt;SnapshotData&lt;/b&gt;, and &lt;b&gt;SessionData&lt;/b&gt; tables. But SQL Server 2008 in general does not write to these tables. They exist in the catalog to support the upgrade of pre-2008 catalog. SQL Server 2008 Reporting Services uses a new snapshot storage mechanism that shreds chunks across multiple rows in a table named &lt;b&gt;Segment&lt;/b&gt;. For SQL Server 2008 Reporting Services, this table generally takes on the majority of transactions of the &lt;b&gt;RSTempDB&lt;/b&gt; database. 
&lt;p align="left"&gt;As implied by the above, there are differences in &lt;b&gt;RSDB&lt;/b&gt; and &lt;b&gt;RSTempDB&lt;/b&gt; access patterns between versions of SSRS. SQL Server 2008 Reporting Services makes use of &lt;b&gt;RSTempDB&lt;/b&gt; significantly more than SQL Server 2005 Reporting Services does. This is because we process data incrementally during report execution rather than immediately when the report is executed. To make the report execution reliable, we store the data for the report in &lt;b&gt;RSTempDB&lt;/b&gt; until it is needed to generate a particular page of the report. Clearly, this increases the number and size of queries executed against the &lt;b&gt;RSTempDB &lt;/b&gt;database and can lead to bottlenecks. 
&lt;p align="left"&gt;Therefore, to optimize your report server catalog, we suggest the following best practices. 
&lt;h5&gt;&lt;u&gt;Use a Dedicated Server&lt;/u&gt; &lt;/h5&gt;
&lt;p align="left"&gt;As noted earlier, a heavy transaction load is placed on the SSRS report server catalog. Because of this, the SSRS report server catalog load can interfere with other processes and vice versa. For example, common environment setups include the following: 
&lt;p align="left"&gt;&lt;i&gt;&lt;/i&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;u&gt;Same server as SSRS Windows/Web Services&lt;/u&gt;&lt;/i&gt; 
&lt;p align="left"&gt;The default one-box setup usually has the SSRS Windows/Web Services and the report server catalog on the same server. While this works great for small environments, in enterprise environments it causes far too much resource (CPU, memory, and disk) contention between the SSRS Windows/Web Services and the report server catalog. As well, when you scale out and add more SSRS servers, you want to have all of SSRS servers point to one dedicated report server catalog to reduce contention. 
&lt;p align="left"&gt;&lt;i&gt;&lt;u&gt;Same server as your data source relational database (SQL)&lt;/u&gt;&lt;/i&gt; 
&lt;p align="left"&gt;Another common approach is to place your SSRS report server catalog on the same server as your SQL Server data source. The issue here is that you will have SQL resource contention (&lt;b&gt;tempdb&lt;/b&gt;, plan cache, memory, buffer pool, etc.) between your SQL Server data source and your SSRS report server catalog. As you have more concurrent users, you will have a lot of hits to the SSRS report catalog (&lt;b&gt;RSDB&lt;/b&gt; for report metadata, &lt;b&gt;RSTempDB&lt;/b&gt; for report snapshots) and transactions against the relational data source. As the load increases, it will become necessary to monitor things like CPU utilization, I/O response times, network resources, and buffer pool counters to ensure that adequate resources are still available. A common method to alleviate these issues is to separate the SSRS report server catalog from your SQL server data source. 
&lt;p align="left"&gt;As you can see, these two common scenarios create database resource contentions that slow down performance. Because of this, it makes sense to have a dedicated server for your SSRS report server catalog so that you can tune your report server databases separately from your relational data source and not run into SSRS Windows/Web Services and report catalog resource contention. 
&lt;p align="left"&gt;&lt;u&gt;High-Performance Disk&lt;/u&gt; 
&lt;p align="left"&gt;Because your SSRS report server catalog has a lot of transactions, ultimately there will be a lot of disk I/O so that storage may be your resource contention. Because of this, you want to have a high‑performance disk such as a SAN or high‑RPM direct‑attach storage for your report server catalog. Some more specifics: 
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;To optimize your disk I/O, see the SQL Server Best Practices white paper &lt;a href="http://sqlcat.com/whitepapers/archive/2007/11/21/predeployment-i-o-best-practices.aspx"&gt;Predeployment I/O Best Practices&lt;/a&gt;, which provides great information on how storage works and how to use various tools to understand what performance you may be able to obtain for SQL Server from the storage you have. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;Have more smaller sized disks with faster rotation speeds (e.g. &amp;gt;= 15,000 RPMs) rather than fewer larger sized disks with slower rotation speeds. That is, you should size your I/O based on IOS requirements instead of sizing based on capacity. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;Maximize and balance your I/O across all of the available spindles. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;Use separate disks for &lt;b&gt;RSDB&lt;/b&gt; and &lt;b&gt;RSTempDB&lt;/b&gt;. The profile for your &lt;b&gt;RSDB&lt;/b&gt; is a lot of small transactions because it asks for report metadata. Your &lt;b&gt;RSTempDB&lt;/b&gt; will have a lot of transactions as well, but they will be larger transactions because this database contains the report data. Having separate disks will enable you to tune your disk for the &lt;b&gt;RSDB&lt;/b&gt; and &lt;b&gt;RSTempDB&lt;/b&gt; databases separately. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;Pre-grow your SSRS report server catalog databases instead of having SQL Server perform autogrow on these databases. &lt;b&gt;RSTempDB&lt;/b&gt; can grow very quickly under load and the default autogrow options lead to a lot of file system fragmentation and blocking during the autogrow task.&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;For your SSRS server catalog databases, stripe your database files to the number of server cores at a ratio of 0.25 to 1.0 depending on how heavy your workload is. This enables you to minimize database allocation contention and makes it easier to rebalance your database when new LUNs become available. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;If you are using RAID, like many other SQL implementations that are write-intensive, use RAID 10 to get the best performance. Do not use RAID 5 because of the write penalty that may be involved. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;Monitor disk response times to ensure that disk latency is generally lower than 20ms, ideally 10ms, and log latency is no more than 1-5ms. To do this, look for high wait times on PAGEIOLATCH_xx or use &lt;b&gt;sys.dm_os_virtual_file_stats&lt;/b&gt; to monitor response times specifically on SSRS‑related databases. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="left"&gt;&lt;u&gt;Move to 64-bit&lt;/u&gt; 
&lt;p align="left"&gt;For starters, if you need to stay with 32-bit and have &amp;gt;3 GB of memory because of the available hardware and OS, remember to use the /3GB and/or the /PAE (for systems with &amp;gt;4 GB of memory) switches (for the OS) and enable AWE in SQL Server so that it can use more than 3 GB of memory. Note that AWE can only be used for data cache. Do not forget that this involves both SQL Server changes (configure advanced options) and changes to the Windows OS boot.ini file. 
&lt;p align="left"&gt;We suggest moving to 64-bit because much of the hardware available right now is 64-bit and, as of SQL Server 2005, SQL Server itself natively supports 64-bit. With 64-bit, you have a much larger addressable memory space to use—especially if you increase the amount of memory. This means that you can handle larger queries (more data) and handle more connections to the server running SQL Server. Note that this does not result in higher throughput as that is typically bound to CPU. Nevertheless, the ability to handle more connections and larger reports minimize the chance that your report server catalog will be a bottleneck for your system. As well, the ability for 64-bit to scale is much higher than 32-bit and this is the platform of choice for SQL databases going forward. 
&lt;p align="left"&gt;&lt;u&gt;Backup/Restore&lt;/u&gt; 
&lt;p align="left"&gt;The data in &lt;b&gt;RSTempDB&lt;/b&gt; is highly volatile—typically one can expect its lifespan to be approximately equal to the &lt;b&gt;SessionTimeout&lt;/b&gt; value configured for the SSRS server for most reports and viewing and usage time. The default &lt;b&gt;SessionTimeout&lt;/b&gt; is 10 minutes, which is the report lifetime policy that defines when data can be cleaned up. The &lt;b&gt;CleanupCycleMinutes&lt;/b&gt; value is the parameter that guides the background cleanup thread. Once the session timeout value is reached, we clean up the temporary snapshot from &lt;b&gt;tempdb&lt;/b&gt;. We do that every cleanup cycle minutes, or continuously if the previous cleanup didn’t complete yet. The actual lifespan varies based on usage patterns but a lifespan longer than one day would be rare. As such, it is not necessary to protect &lt;b&gt;RSTempDB&lt;/b&gt; data for data recovery purposes. 
&lt;p align="left"&gt;The data in &lt;b&gt;RSDB &lt;/b&gt;is long lived—this data should be backed up following the standard guidance provided for SQL Server: 
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ms187048.aspx"&gt;Backing Up and Restoring Databases in SQL Server&lt;/a&gt; &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ms190954.aspx"&gt;Optimizing Backup and Restore Performance in SQL Server&lt;/a&gt; &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p align="left"&gt;As well, do not forget to back up (and restore) the encryption key associated with these databases; you can find more information at &lt;a href="http://technet.microsoft.com/en-us/library/ms157275.aspx"&gt;Backing Up and Restoring Encryption Keys&lt;/a&gt; 
&lt;p align="left"&gt;&lt;u&gt;&lt;/u&gt;
&lt;p align="left"&gt;&lt;u&gt;Maintain Your SSRS Report Server Catalog Databases&lt;/u&gt; 
&lt;p align="left"&gt;Recall that the SSRS report server catalog databases are SQL Server databases specifically for Reporting Services usage. Therefore, the standard techniques to maintain SQL databases apply to the SSRS report server catalog databases. For example, periodically re-indexing the catalog tables and/or updating the database statistics may improve query performance. 
&lt;p align="left"&gt;As noted above, you may want to consider configuring the &lt;b&gt;CleanupCycleMinutes&lt;/b&gt; setting in the RSReportServer.config file. This setting determines how frequently expired session content or unused snapshot data is removed from &lt;b&gt;RSTempDB&lt;/b&gt;. The default setting is 10 minutes, which is similar to the default session timeout. &lt;b&gt;RSTempDB&lt;/b&gt; generally stays more compact when using frequent cleanups, but at the cost of increasing the general load on the system. If the size of &lt;b&gt;RSTempDB&lt;/b&gt; not a major concern and the system has high throughput user loads, you may want to considering slightly increasing the &lt;b&gt;CleanupCycleMinutes&lt;/b&gt; configuration (such as setting it to 20 minutes). 
&lt;h4&gt;Discussion &lt;/h4&gt;
&lt;p align="left"&gt;Since the SSRS Windows/Web Services interact with your report server catalog for almost all SSRS queries, it is important that you optimize your SSRS catalog databases so that they are not a point of contention. Standard SQL optimization techniques come into play here since SSRS report server catalogs are instances of SQL Server databases. Following the above suggested methods will make your SSRS environment easier to scale to enterprise data loads. 
&lt;p align="left"&gt;Recall that because of the concern for report consistency, it is important for Reporting Services to cache all report data. Therefore, to reduce the number of requests that are placed on your report server catalog, you may want to consider using the File System (FS) Snapshots feature, which is discussed in the next technical note of this technical series—SS&lt;i&gt;RS Scale-Out Deployment Best Practices&lt;/i&gt; [work in progress]. &lt;/p&gt;&lt;img src="http://sqlcat.com/aggbug.aspx?PostID=307" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=ugVGKv3RWxc:fYO5CjZWf2k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TechnicalNotes?a=ugVGKv3RWxc:fYO5CjZWf2k:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TechnicalNotes?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TechnicalNotes/~4/ugVGKv3RWxc" height="1" width="1"/&gt;</description><category domain="http://sqlcat.com/technicalnotes/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Scalability/default.aspx">Scalability</category><category domain="http://sqlcat.com/technicalnotes/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><feedburner:origLink>http://sqlcat.com/technicalnotes/archive/2008/06/26/report-server-catalog-best-practices.aspx</feedburner:origLink></item><item><title>Reporting Services Scale-Out Architecture</title><link>http://feedproxy.google.com/~r/TechnicalNotes/~3/ZdXHjX_2U5Y/reporting-services-scale-out-architecture.aspx</link><pubDate>Thu, 05 Jun 2008 18:59:00 GMT</pubDate><guid isPermaLink="false">e9619797-5f48-4d02-a1a8-7f300d09be66:290</guid><dc:creator>denny.lee</dc:creator><slash:comments>9</slash:comments><wfw:commentRss>http://sqlcat.com/technicalnotes/rsscomments.aspx?PostID=290</wfw:commentRss><comments>http://sqlcat.com/technicalnotes/archive/2008/06/05/reporting-services-scale-out-architecture.aspx#comments</comments><description>&lt;p align="left"&gt;&lt;i&gt;Building and Deploying Large Scale SQL Server Reporting Services Environments Technical Note Series&lt;/i&gt; &lt;/p&gt;
&lt;p align="left"&gt;Authors: Denny Lee, Lukasz Pawlowski &lt;br /&gt;Contributors: David Reinhold, Robert Bruckner &lt;br /&gt;Technical Reviewers: Burzin Patel &lt;br /&gt;&lt;/p&gt;
&lt;h4 align="left"&gt;Introduction &lt;/h4&gt;
&lt;p align="left"&gt;This technical note is the introduction to the &lt;i&gt;Building and Deploying Large Scale SQL Server Reporting Services Environments Technical Note Series,&lt;/i&gt; which provides general guidance on how to set up, implement, and optimize an enterprise scale-out architecture for your SQL Server Reporting Services (SSRS) environment. This note provides guidance for both SQL Server 2005 and 2008 Reporting Services. The focus of this technical note is the Reporting Services scale-out architecture, which is referenced throughout this technical note series. &lt;/p&gt;
&lt;h4 align="left"&gt;Architecture &lt;/h4&gt;
&lt;p align="left"&gt;&lt;b&gt;Figure 1&lt;/b&gt; represents a typical scale-out Reporting Services environment. &lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutArchitecture_A890/image_2.png"&gt;&lt;img style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutArchitecture_A890/image_thumb.png" width="576" height="319" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;b&gt;Figure 1&lt;/b&gt;: Reporting Services Scale-Out Architecture &lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;From this architecture, you will notice the following: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;When your &lt;b&gt;clients&lt;/b&gt; execute a query to Reporting Services, the query goes through a Network Load Balancer (NLB) to connect to the appropriate Reporting Services server. In order to balance the query load, your NLB can round-robin between the different SSRS servers so that the requests are evenly distributed amongst all the SSRS servers and a single server instance is not overburdened by too many requests. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;The Reporting Services Windows/Web Services (denoted as &lt;b&gt;RS Server&lt;/b&gt;) handle the client query request and perform the task of submitting the query to the report server catalog and/or the assigned relational data source, as well as resolving the data results back to the client. In enterprise environments, you will often want to scale out to multiple servers to handle many concurrent queries against your Reporting Services servers. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;The RS Server makes a request to the &lt;b&gt;report catalog&lt;/b&gt; databases initially to obtain the report metadata, which includes report definitions, report history and snapshots, and scheduling information from the &lt;b&gt;ReportServer&lt;/b&gt; database (&lt;b&gt;RSDB&lt;/b&gt;). If the report data desired is already available in a SSRS snapshot, the RS Server makes a request for this from the &lt;b&gt;RSTempDB&lt;/b&gt; database, which stores all of the temporary snapshots while reports are being run. As noted in the above architecture design, in an enterprise environment you have multiple SSRS servers reading metadata information from the same report catalog instance. This is done to keep state information between SSRS servers; when a user requests a report from one SSRS server, if the subsequent query goes to another SSRS server, the state of that report (which report was used, what parameters were used, etc.) is kept so that the transition from one SSRS server to another is transparent to the user requesting the report. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;If the report information is not available in the form of a SSRS snapshot, the SSRS server makes a request to the data source (denoted as &lt;b&gt;Reporting Data)&lt;/b&gt;. Whether your data source is a flat file or an SQL database, how this data is requested is defined by the parameters in the report catalog to enable the SSRS server to perform the task of requesting this data. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Keys to Success &lt;/h4&gt;
&lt;p align="left"&gt;To ensure a successful enterprise implementation of your Reporting Services environment, please note first that a lot of documentation is available online. Many mistakes in enterprise customer implementations can be avoided by reviewing the following white papers. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ms143747.aspx"&gt;Upgrading Reporting Services (SQL Books Online)&lt;/a&gt;: This a good reference to understand the issues related to upgrading from SQL Server 2000 Reporting Services to SQL Server 2005 Reporting Services. You can find the documentation for upgrading from SQL Server 2005 Reporting Services to SQL Server 2008 Reporting Services at &lt;a href="http://technet.microsoft.com/en-us/library/bb522792%28SQL.100%29.aspx"&gt;Upgrade (Reporting Services)&lt;/a&gt;, though this is pre-release documentation at this time. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ms156453.aspx"&gt;Configuring a Report Server Scale-Out Deployment&lt;/a&gt;: Before starting a scale-out deployment for Reporting Services, please be sure to review this document, which includes deployment steps, creating and configuring SSRS instances, and other important configuration steps. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/pspsqlrs.mspx"&gt;Planning for Scalability and Performance with Reporting Services&lt;/a&gt;: To plan for scalability and optimal performance with Reporting Services, this is a very important white paper for you to review. Before you design your scale-out solution, we definitely advise you to review this paper. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Customer Scenario &lt;/h4&gt;
&lt;p align="left"&gt;Below is an example customer scenario that has been shrunk down to its core components. &lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutArchitecture_A890/image_4.png"&gt;&lt;img style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;BORDER-TOP:0px;BORDER-RIGHT:0px;" border="0" alt="image" src="http://sqlcat.com/blogs/technicalnotes/WindowsLiveWriter/ReportingServicesScaleOutArchitecture_A890/image_thumb_1.png" width="404" height="372" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;b&gt;Figure 2:&lt;/b&gt; Customer Scenario &lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;This customer currently has: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;Four SSRS servers that keep state information by connecting to a separate server that contains both report server catalog databases (&lt;b&gt;RSDB&lt;/b&gt; and &lt;b&gt;RSTempDB&lt;/b&gt;). &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;The four SSRS servers connect to two SQL Server Analysis Services (SSAS) servers to provide pivot capability in the form of multidimensional reports. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;Their two SSAS servers are connected to a single relational data source; they have two SSAS servers in order to handle the query loads placed on SSAS servers.&amp;nbsp; For more information on scaling out SSAS servers, see: &lt;/div&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;&lt;a href="http://sqlcat.com/technicalnotes/archive/2008/03/16/analysis-services-synchronization-best-practices.aspx"&gt;Analysis Services Synchronization Best Practices&lt;/a&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div align="left"&gt;&lt;a href="http://sqlcat.com/whitepapers/archive/2007/12/16/scale-out-querying-with-analysis-service