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

<channel>
	<title>Applied dimensionality &#187; Microsoft</title>
	<atom:link href="http://ykud.com/blog/category/bicpm/microsoft/feed" rel="self" type="application/rss+xml" />
	<link>http://ykud.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 30 Apr 2012 06:10:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Microsoft SQL Server reporting database configuration</title>
		<link>http://ykud.com/blog/bicpm/microsoft/microsoft-sql-server-reporting-database-configuration-practices</link>
		<comments>http://ykud.com/blog/bicpm/microsoft/microsoft-sql-server-reporting-database-configuration-practices#comments</comments>
		<pubDate>Thu, 23 Sep 2010 12:18:07 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[bi]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=429</guid>
		<description><![CDATA[A check-list for using Microsoft SQL Server as a reporting database. This is a &#8216;be aware&#8217; list for myself in first place, since I forget some details as time passes. Table of contents Overall database settings Table configuration ETL Query tuning Books to read Overall database settings Use simple recovery mode Set up simple recovery [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: 13.1944px;">A check-list for using Microsoft SQL Server as a reporting database. This is a &#8216;be aware&#8217; list for myself in first place, since I forget some details as time passes.</span></p>
<p><span style="font-size: 13.1944px;"><em><div id='toc' class='post-429'><div id='toc_title'>Table of contents</div>
<ul><li><a href="#Overall-database-settings">Overall database settings</a></li>
<li><a href="#Table-configuration">Table configuration</a></li>
<li><a href="#ETL">ETL</a></li>
<li><a href="#Query-tuning">Query tuning</a></li>
<li><a href="#Books-to-read">Books to read</a></li>
</ul>
</div></em></span></p>
<h3 id='Overall-database-settings'>Overall database settings</h3>
<h4>Use simple recovery mode</h4>
<div>Set up simple recovery mode for database to minimize performance issues with transaction log records. Usually you can use daily backups with DWH, since data is loaded daily. In more complex situations you can use ETL-based &#8216;checkpoints&#8217;, but in general, daily backups are more than enough.</div>
<h4>Separate log and data io channels</h4>
<div>Use decent I\O systems and separate data and log I\O channels. This is obvious, just reiterating.</div>
<div>RAID 1+0 seems to be preferable choice of disk configuration for DWH loads. See <a href="http://dsstos.blogspot.com/2007/09/raid-5-versus-raid-10-in.html">this entry</a>, <a href="http://storage.ittoolbox.com/documents/raid-configurations-for-sql-server-data-warehouse-18274">this one</a> or test it yourself )</div>
<h4>2008 r2</h4>
<div>Use SQL Server 2008r2 Enterprise if you have a choice. 2008 adds table\index compression (which is great) and get&#8217;s partitioning to work way better in queries. And I&#8217;ve  20% performance speed-up against 2005 on the same query set (with same execution plans and that surprised me).</div>
<h4>Auto shrink Off</h4>
<div>Set Auto shrink off, <a href="http://blogs.msdn.com/b/sqlserverstorageengine/archive/2007/03/28/turn-auto-shrink-off.aspx">it kicks unpredictable I\O strain</a>. Shrink database daily, just after backup in the same maintenance task.</div>
<h3 id='Table-configuration'>Table configuration</h3>
<h4>identity columns as primary keys</h4>
<div>Use <a href="http://www.google.ru/url?sa=t&amp;source=web&amp;cd=1&amp;sqi=2&amp;ved=0CBgQFjAA&amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FIdentity_column&amp;ei=0hibTNu0EMz14AaR38SYAQ&amp;usg=AFQjCNFgKU8vwoyU49BlplCCZTDoCzWNXg">identity columns</a> as table primary keys. And using this column as clustered index will help I\O in most cases.</div>
<h4>Set up foreign keys</h4>
<div>Again, obvious, but I&#8217;ve seen this violated more than once. Use foreign keys for fact-dimension table reference. This will help optimizer a lot.</div>
<div>You can disable these keys to speed up inserts, but in 90% cases it&#8217;s not needed.</div>
<h4>Table partitioning</h4>
<div>Always use partitioned tables (even fake, with 1 partition) to:</div>
<div>- achieve <a href="http://blogs.msdn.com/b/craigfr/archive/2008/08/22/dynamic-partition-elimination-performance.aspx">partition elimination</a> during query execution. <a href="http://msdn.microsoft.com/en-us/library/ms345599.aspx">Especially in Ms SQL 2008</a></div>
<div>- use <a href="http://msdn.microsoft.com/en-us/library/ms191160.aspx">partition switching</a> for data load (check <a href="http://msdn.microsoft.com/en-us/library/cc966380.aspx">this article</a> as well)</div>
<h4>Table compression in 2008</h4>
<div>SQL Server 2008 introduces <a href="http://msdn.microsoft.com/en-us/library/dd894051(SQL.100).aspx">table compression</a> which helps to reduce I\O (but increases CPU load), which is very good for reporting tasks. Use it for fact tables.</div>
<h3 id='ETL'>ETL</h3>
<h4>partition switching as default load strategy</h4>
<div>More benefits of partition switching for loading:</div>
<div>- while you&#8217;re loading data in &#8216;new_data&#8217; partition, base table is accessible and consistent</div>
<div>- after you&#8217;ve prepared &#8216;new_data&#8217; partition you can check it&#8217;s data for quality (planning to write about later)</div>
<div>You can implement switching by creating another temporary partition, which I like to call &#8216;last load&#8217;. So you switch:</div>
<div>- current -&gt; last_load</div>
<div>- new_data -&gt; current</div>
<div>in one transaction</div>
<div>After that you have &#8216;last_load&#8217; to:</div>
<div>- switch back in emergency</div>
<div>- check data from current\previous load for some more quality checks</div>
<h4>Filtered indexes for calculations</h4>
<div>Another 2008-only feature is called <a href="http://technet.microsoft.com/en-us/library/cc280372.aspx">filtered indexes</a>. These indexes can be essentially smaller than common ones if you know for sure what region of data you&#8217;ll be accessing. And this turns out to be very efficient for SQL code you&#8217;re using for different calculations. Since I mostly work with <a href="http://www.oracle.com/technetwork/middleware/data-integrator/index.html">Oracle Data Integrator</a> as an ETL tool and it&#8217;s an SQL-generating machine: I get up to10 times calculation speed up by building small, calculation-specific filtered indexes.</div>
<h4>Tablock hint</h4>
<div>All inserts should be done with <a href="http://www.google.ru/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CBUQFjAA&amp;url=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fms187373.aspx&amp;ei=QCqbTKzHCdHf4Aa0v5l9&amp;usg=AFQjCNECU0Ifs4WMf3l3qrQJ1ToMjdhMXQ">TABLOCK</a> hint, which speeds up insert by acquiring a full table lock during the whole transaction. Since in DWH main inserts are performed by ETL there should be no conflicts. TABLOCK also speeds up logging during bcp.</div>
<h3 id='Query-tuning'>Query tuning</h3>
<h4>Indexes</h4>
<div>Really a vast topic, but to sum it up ) :</div>
<div>- use <a href="http://www.sql-server-performance.com/tips/covering_indexes_p1.aspx">covering indexes</a>.   It seems better to have a <a href="http://www.amazon.com/Server-Execution-Plans-Grant-Fritchey/dp/1906434026">&#8216;wide index&#8217; than a number of indexes on all dimensions and to apply index intersection</a>.</div>
<div>- columns in indexes should <a href="http://sqlinthewild.co.za/index.php/2009/01/19/index-columns-selectivity-and-equality-predicates">be ordered by selectivity</a></div>
<div>Be very-very careful, &#8216;your mileage may vary&#8217;:</div>
<div>- creating a huge number of large indexes may actually slow system down due to I\O overload</div>
<div>- you should try to create indexes that can help a number of reports\query instead of tuning a single request</div>
<div>See Books session below, skip through at least one of them before starting it out wild.</div>
<h4>Filtered indexes</h4>
<div>
<p>As with ETL calculations &#8212; filtered indexes may be used for tuning specific queries.</p>
<h4>Index compression</h4>
<div>Indexes can be compressed in the same way as tables (which is obvious given that a table is a clustered index) and this speeds queries by reducing IO</div>
<h3 id='Books-to-read'>Books to read</h3>
<div>I&#8217;d recommend following</div>
<div><a href="http://www.amazon.com/Professional-Server-Performance-Tuning-Programmer/dp/0470176393">Professional SQL Server 2005 Performance Tuning</a></div>
<div><span style="font-family: Arial, sans-serif;"><a href="http://www.amazon.com/Server-Execution-Plans-Grant-Fritchey/dp/1906434026">SQL Server Execution Plans</a></span></div>
<div><span style="font-family: Arial, sans-serif;"><a href="http://www.amazon.com/Server-Performance-Tuning-Distilled-Experts/dp/1430219025/ref=pd_bxgy_b_text_c">SQL Server 2008 Query Performance Tuning Distilled (Expert&#8217;s Voice in SQL Server)</a></span></div>
<div>And if you have time and will</div>
<div><a href="http://www.amazon.com/Relational-Database-Index-Design-Optimizers/dp/0471719994/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1285236564&amp;sr=1-1">Relational Database Index Design and the Optimizers</a></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/microsoft/microsoft-sql-server-reporting-database-configuration-practices/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mcirosoft PerformancePoint is out</title>
		<link>http://ykud.com/blog/bicpm/mcirosoft-performancepoint-is-out</link>
		<comments>http://ykud.com/blog/bicpm/mcirosoft-performancepoint-is-out#comments</comments>
		<pubDate>Fri, 21 Sep 2007 06:35:52 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[BI&CPM]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[performance point]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/?p=180</guid>
		<description><![CDATA[Official release Launch site. Lets fasten our belts, BI market will never be the same )]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.microsoft.com/presspass/press/2007/Sep07/09-19OfficePerformancePointPR.mspx">Official release </a></p>
<p><a href="http://www.microsoft.com/bi/performancepointlaunch/">Launch site.</a></p>
<p>Lets fasten our belts, BI market will never be the same )</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/mcirosoft-performancepoint-is-out/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Signed &amp;downloaded PerformancePoint CTP</title>
		<link>http://ykud.com/blog/bicpm/signed-downloaded-performancepoint-ctp</link>
		<comments>http://ykud.com/blog/bicpm/signed-downloaded-performancepoint-ctp#comments</comments>
		<pubDate>Sun, 26 Nov 2006 16:18:44 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[BI&CPM]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[performancepoint]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/2006/11/26/signed-downloaded-performancepoint-ctp/</guid>
		<description><![CDATA[Going to install/toy with it in free time. And just before I&#8217;ll be more informed, the current view is:I think the strong points of Ms BI(CPM\EPM, call it whether you like) are:1 None (or little) integration problems. All niche-BI vendors spend a lot of effort integrating acquired&#160; products (for ex, Cognos with Adaytum&#38;Frango, BO with [...]]]></description>
			<content:encoded><![CDATA[<p>Going to install/toy with it in free time. <br />And just before I&#8217;ll be more informed, the current view is:<br />I think the strong points of Ms BI(CPM\EPM, call it whether you like) are:<br />1 None (or little) integration problems. All niche-BI vendors spend a lot of effort integrating acquired&nbsp; products (for ex, Cognos with Adaytum&amp;Frango, BO with SRC). And it&#8217;s still a long way to go. And see Ms AX and Nav as an example of hard integration road. <br />2 Enterprise scale db &amp; olap engine. <br />3 Special workflow engine<br />4 User-friendly interface (excel)<br />5 Strong brand\cheap prices<br />6 The possibility to develop add-ons and increase functionality by programming.<br />And the weak points:<br />1 The &#8220;integration&#8221; of SQL server, AS, BizTalk, Proclarity. It&#8217;s easier, due to all .Net stuff, but on initial phase it just won&#8217;t work (remember EPB).<br />2 No experience in CPM area, nor in development, nor in selling such solutions.&nbsp;  <br />3 The lack of concentration. Ms is so huge and wide-aimed, it just lost it&#8217;s focus. See Joel&#8217;s <a href="http://www.joelonsoftware.com/items/2006/11/21.html">excellent post</a> on this theme. And the <a href="http://www.joelonsoftware.com/items/2006/11/24.html">update</a>.<br />4 The possibility to develop add-ons and increase functionality by programming.</p>
<p>It&#8217;s interesting to see how these statements will change after some product experience. </p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/signed-downloaded-performancepoint-ctp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox</title>
		<link>http://ykud.com/blog/bicpm/firefox</link>
		<comments>http://ykud.com/blog/bicpm/firefox#comments</comments>
		<pubDate>Mon, 02 Oct 2006 19:07:07 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[BI&CPM]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/2006/10/02/firefox/</guid>
		<description><![CDATA[I like FireFox a lot, and was allways disappointed when changing to IE to view Contributor applications. Recent versions of IETab addon allow to open tabs, using IE as renderer, and, moreover, start contrib apps in FireFox tabs. So I don&#8217;t have to switch browser anymore. Hoooray?]]></description>
			<content:encoded><![CDATA[<p>I like FireFox a lot, and was allways disappointed when changing to IE to view Contributor applications.</p>
<p>Recent versions of <a href="https://addons.mozilla.org/firefox/1419/">IETab</a> addon allow to open tabs, using IE as renderer, and, moreover, start contrib apps in FireFox tabs.</p>
<p>So I don&#8217;t have to switch browser anymore. Hoooray?</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/firefox/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Utils</title>
		<link>http://ykud.com/blog/bicpm/windows-utils</link>
		<comments>http://ykud.com/blog/bicpm/windows-utils#comments</comments>
		<pubDate>Sun, 10 Sep 2006 08:41:58 +0000</pubDate>
		<dc:creator>ykud</dc:creator>
				<category><![CDATA[BI&CPM]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://ykud.com/blog/2006/09/10/windows-utils/</guid>
		<description><![CDATA[While ASP permission-fighting, discovered a couple of usefull utils from SysInternals. Filemon &#8211;shows File System activity RegMon &#8212; shows registry activity This is win vs lin to me. In linux it&#8217;s all built-in, already there, you can ask kernel, monitor everything, w/o installing anything.]]></description>
			<content:encoded><![CDATA[<p>While ASP permission-fighting, discovered a couple of usefull utils from SysInternals.</p>
<p><a href="http://www.sysinternals.com/Utilities/Filemon.html">Filemon</a> &#8211;shows File System activity</p>
<p><a href="http://www.sysinternals.com/Utilities/Regmon.html">RegMon</a> &#8212; shows registry activity</p>
<p>This is win vs lin to me. In linux it&#8217;s all built-in, already there, you can ask kernel, monitor everything, w/o installing anything.</p>
]]></content:encoded>
			<wfw:commentRss>http://ykud.com/blog/bicpm/windows-utils/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

