<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Gavin Payne</title>
	<atom:link href="http://gavinpayneuk.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gavinpayneuk.com</link>
	<description>Microsoft Certified Architect and technical architect</description>
	<lastBuildDate>Sun, 19 May 2013 16:53:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='gavinpayneuk.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Gavin Payne</title>
		<link>http://gavinpayneuk.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://gavinpayneuk.com/osd.xml" title="Gavin Payne" />
	<atom:link rel='hub' href='http://gavinpayneuk.com/?pushpress=hub'/>
		<item>
		<title>Architects and Architectures</title>
		<link>http://gavinpayneuk.com/2013/03/12/architects-and-architectures/</link>
		<comments>http://gavinpayneuk.com/2013/03/12/architects-and-architectures/#comments</comments>
		<pubDate>Tue, 12 Mar 2013 18:50:13 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=520</guid>
		<description><![CDATA[In the last few months I’ve been presenting a new session at community events that’s had a positive reception that I’m pleasantly surprised at. It’s had several titles, but currently its “How to be a more successful architect” and I &#8230; <a href="http://gavinpayneuk.com/2013/03/12/architects-and-architectures/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=520&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In the last few months I’ve been presenting a new session at community events that’s had a positive reception that I’m pleasantly surprised at.</p>
<p>It’s had several titles, but currently its “How to be a more successful architect” and I originally created it as an overview of my Microsoft Certified Architect journey, although I’ve taken it on a different course since then.</p>
<h2>Hopefully of interest to everyone</h2>
<p>The session is hopefully interesting to everyone in the IT industry, not just a specific type of SQL Server professional.&nbsp; It’s foundation is the idea that regardless of your job title, you’re probably informally, or formally, performing the role of an architect at some point in your working day.</p>
<p>It could be you have to clarify someone’s requirements so you can understand how whatever you create for them demonstrates its value the most.&nbsp; Or, you could you to justify to someone, or yourself, why the solution design you’ve come up with is the right design as you’ve taken a structured path to designing it.</p>
<p>&nbsp;</p>
<h2>Presentation slides</h2>
<p>The slides from my most recent delivery of the session at SQLSaturday #194 in Exeter are available <a href="http://gavinpayneuk.files.wordpress.com/2013/03/howtobeabetterarchitect_exeter.pdf" target="_blank">here</a>.&nbsp;&nbsp; Like all architectures its evolving, so I’m sure there’ll be newer versions in the future.</p>
<p>&nbsp;</p>
<h2>Presentation links</h2>
<p>Within the presentation, and during my delivery of it, I mention numerous online resources that I recommend reviewing as you develop your IT architect skills.</p>
<p>&nbsp;</p>
<h5>Architect Certifications</h5>
<p><strong><br /></strong>Global IT Architect Association’s CITA-P <a href="https://www.iasaglobal.org/assnfe/CourseView.asp?MODE=VIEW&amp;clCourseID=10&amp;csCategory=3&amp;csFrom=&amp;csTo=&amp;csKeyWord=&amp;csSortBy=1&amp;clPageNumber=1" target="_blank">here</a>.</p>
<p>The Open Group’s Certified Architect <a href="http://www.opengroup.org/openca/cert/" target="_blank">here</a>.</p>
<p>Microsoft’s Certified Architect <a href="http://www.microsoft.com/learning/en/us/mca-certification.aspx" target="_blank">here</a>.</p>
<p><strong></strong></p>
<h5>Architect Resources</h5>
<p><strong><br /></strong>Microsoft’s The Architect Journal <a href="http://msdn.microsoft.com/en-us/architecture/bb410935.aspx" target="_blank">here</a>.</p>
<p>Perspectives Based Architecture for requirements gathering <a href="http://msdn.microsoft.com/en-us/library/bb245776.aspx" target="_blank">here</a>.</p>
<p>ATAM for prioritising requirements <a href="http://www.sei.cmu.edu/reports/00tr004.pdf" target="_blank">here</a>.</p>
<p>Waterfall vs. Agile methodologies <a href="http://blogs.msdn.com/b/seliot/archive/2010/11/22/agile-versus-waterfall-videos.aspx" target="_blank">here</a>.</p>
<p>Influencing Without Authority book <a href="http://www.amazon.co.uk/Influence-Without-Authority-Allan-Cohen/dp/0471463302" target="_blank">here</a>.</p>
<p>MSDN Patterns and Practices library <a href="http://msdn.microsoft.com/en-us/library/ff921345.aspx" target="_blank">here</a>.</p>
<p>Microsoft Application Architecture Guide <a href="http://msdn.microsoft.com/en-gb/library/ff650706.aspx" target="_blank">here</a>.</p>
<h5>Solution Lifecycle Management</h5>
<p><strong><br /></strong>ITIL Application Life Cycle Process <a href="http://www.ibm.com/developerworks/tivoli/library/t-appmgtlife/" target="_blank">here</a>.</p>
<p>&nbsp;</p>
<p>Hopefully something somewhere in this post or the web links has caught your imagination, in which case, please share just what in the comments section.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=520&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2013/03/12/architects-and-architectures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>RCSI Demo Script</title>
		<link>http://gavinpayneuk.com/2013/03/04/rcsi-demo-script/</link>
		<comments>http://gavinpayneuk.com/2013/03/04/rcsi-demo-script/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 10:34:34 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://gavinpayneuk.com/?p=517</guid>
		<description><![CDATA[Someone recently asked if I could post the demo script that I mention in my RCSI blog post on this site. I&#8217;ve saved it as a PDF file as WordPress doesn&#8217;t like .sql or .txt files, but you can still &#8230; <a href="http://gavinpayneuk.com/2013/03/04/rcsi-demo-script/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=517&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Someone recently asked if I could post the demo script that I mention in my RCSI blog post on this site.</p>
<p>I&#8217;ve saved it as a PDF file as WordPress doesn&#8217;t like .sql or .txt files, but you can still copy and paste from it.</p>
<p>The file is <a href="http://gavinpayneuk.files.wordpress.com/2013/03/rcsi_demo.pdf">here</a>.</p>
<p>&nbsp;</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=517&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2013/03/04/rcsi-demo-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>Virtualisation limitations still exist, even in 2013</title>
		<link>http://gavinpayneuk.com/2013/02/06/virtualisation-limitations-still-exist-even-in-2013/</link>
		<comments>http://gavinpayneuk.com/2013/02/06/virtualisation-limitations-still-exist-even-in-2013/#comments</comments>
		<pubDate>Wed, 06 Feb 2013 23:33:04 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=511</guid>
		<description><![CDATA[While advances in technology are seemingly continuous, and the limitations of yesterday’s systems are now the minimum requirements of tomorrow’s, care should still be taken to make sure every capability scales as much as you need it to. Virtualisation of &#8230; <a href="http://gavinpayneuk.com/2013/02/06/virtualisation-limitations-still-exist-even-in-2013/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=511&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>While advances in technology are seemingly continuous, and the limitations of yesterday’s systems are now the minimum requirements of tomorrow’s, care should still be taken to make sure every capability scales as much as you need it to.</p>
<h2><strong>Virtualisation of yesterday</strong></h2>
<p>In the last few years, the capabilities of virtualisation have increased dramatically.  It was only a few years ago that virtual servers were limited to 4 vCPUs, had only average performance storage, and never had enough memory.  That explains why for a long time it was only ever our “small footprint” servers that we virtualised.</p>
<h2><strong>Virtualisation in 2013</strong></h2>
<p>Today, the enterprise virtualisation platform vendors deliver capabilities that we only dreamt of a few years ago; 32 vCPUs, 1TB of memory, and high availability by default, for every virtual server.</p>
<p>That’s a lot of engine power we can put behind our virtual servers, allowing us to virtualise hopefully most of our data centres if we choose to these days.</p>
<h2><strong>Watch for the subtle limitations</strong></h2>
<p>However, despite these great headline capabilities, there are still inherent capability limits that the small print carries.  I found one of these during a cluster build recently and that prompted me to write this article.</p>
<p>Our project was using VMware 5 to host some fairly large nodes of a SQL Server failover cluster instance.  Each virtual server had 16 vCPUs and 128GB of memory, something that VMware can adequately provide, but it was the storage configuration where we hit a limitation by surprise.</p>
<p>The SQL Server cluster design we initially created required upwards of 60 mount points to be presented to each of the cluster nodes, however we then discovered that VMware has a limit of 45 clustered/shared SAN volumes (raw device mappings) being presented to a virtual server.</p>
<p>What it quickly demonstrates is that while our focus was initially on whether or not the virtual server would run fast enough, the limitation that actually mattered to us was actually related to storage provisioning.</p>
<h2><strong>Published configuration limitations</strong></h2>
<p>The links below provide details from VMware and Microsoft about the complete limitations of their virtualisation software, and are worth reading if you’re planning to deploy virtual servers with more than the default resources.</p>
<p><a href="http://www.google.co.uk/url?sa=t&amp;rct=j&amp;q=vmware%20limits&amp;source=web&amp;cd=2&amp;cad=rja&amp;sqi=2&amp;ved=0CDUQFjAB&amp;url=http%3A%2F%2Fwww.vmware.com%2Fpdf%2Fvsphere5%2Fr50%2Fvsphere-50-configuration-maximums.pdf&amp;ei=kNMSUcOiE8il0AW39oDwCQ&amp;usg=AFQjCNEB6XvonDGGm4HQQePsXqZ49d9ACg&amp;bvm=bv.41934586,d.d2k" target="_blank">VMware 5 Configuration Maximums</a></p>
<p><a href="http://technet.microsoft.com/en-us/library/jj680093.aspx" target="_blank">Windows Server 2012 Hyper-V Scalability</a></p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=511&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2013/02/06/virtualisation-limitations-still-exist-even-in-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>Implementing a SQL Server 2012 failover cluster instance on Windows Server 2012, in January 2013</title>
		<link>http://gavinpayneuk.com/2013/01/29/implementing-a-sql-server-2012-failover-cluster-instance-on-windows-server-2012-in-january-2013/</link>
		<comments>http://gavinpayneuk.com/2013/01/29/implementing-a-sql-server-2012-failover-cluster-instance-on-windows-server-2012-in-january-2013/#comments</comments>
		<pubDate>Tue, 29 Jan 2013 11:47:51 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://gavinpayneuk.com/?p=497</guid>
		<description><![CDATA[New and Improved I’ve been using Windows Server 2012 for a while now, not just because it’s the newest and shiniest Microsoft operating system, but also because some of its new features are useful to me as both an architect &#8230; <a href="http://gavinpayneuk.com/2013/01/29/implementing-a-sql-server-2012-failover-cluster-instance-on-windows-server-2012-in-january-2013/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=497&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h2>New and Improved</h2>
<p>I’ve been using Windows Server 2012 for a while now, not just because it’s the newest and shiniest Microsoft operating system, but also because some of its new features are useful to me as both an architect and implementer of SQL Server platforms.</p>
<p>The most significant of these are in the failover clustering feature where some of SQL Server 2012’s requirements for Availability Groups can now be done in the GUI rather than the deprecated cluster.exe command line.  For example, modifying quorum voting, dynamic quorum models, and handling asymmetric storage.</p>
<h2>Subtle Issues</h2>
<p>Previously, I’d implemented clustered instances of SQL Server 2012 on Windows Server 2012 without any problems using the native RTM releases of both, in a production and development environments and all went well.  However, this week I began a new clustered platform installation and came across some real-world issues that I hadn’t seen before and thought I’d share.</p>
<h2>Installing the .net framework 3.5</h2>
<p>SQL Server 2012 requires that the .net framework 3.5 is installed prior to installation, however in Windows Server 2012 the install files for it are not shipped as part of the operating system.  Instead when you go to add the Windows feature, it will ask for the path to the source files on the Windows installation DVD to perform what it calls a side-by-side installation.  Sometimes, through luck, you’ll put the exact path details in correctly first time and it’ll work; the rest of the time you’ll find what is reported to be a bug where it’ll never accept anything you enter.</p>
<p>To get around this, you can use one line of PowerShell instead:</p>
<pre>Install-WindowsFeature NET-Framework-Core –Source X:\Sources\sxs</pre>
<p>Problem solved!</p>
<h2>.net framework hotfix KB2750149</h2>
<p>This hotfix is one of many that get installed automatically through the Windows Update service, however it has a side effect of breaking the Windows Failover Cluster manager, specifically when you click on the Roles branch (used to be known as Services).  You’ll receive a big error message screen starting with the text:</p>
<pre>“A weak event was created and it lives on the wrong object,
there is a very high chance this will fail, please review 
and make changes on your code to prevent this issue”.</pre>
<p>This is a known issue that Microsoft has acknowledged and is investigating.  In the meantime, the only workaround is to un-installed the hotfix KB2750149.</p>
<h2>DNS Registration Failure</h2>
<p>Another random error that I received was the DNS record for the cluster failing to get registered correctly during the creation of the cluster.  Windows Server 2012’s management tools now integrate with the other nodes in a cluster a lot more closely than they used to so even trying to make disk storage changes caused random server connection errors.  The main error I got when trying to bring the cluster itself online was the following:</p>
<pre>Cluster network name resource ‘Cluster Name’ failed registration 
of one or more associated DNS name(s) for the following reason:
The handle is invalid.</pre>
<p>I’m still not sure of the cause, apparently it could have been related to Active Directory permissions, but the solution that worked for me was to Repair the cluster’s virtual network name with the following two steps:</p>
<p>Firstly, taking the virtual network name offline.</p>
<p><a href="http://gavinpayneuk.files.wordpress.com/2013/01/fci_1.png"><img class="aligncenter size-medium wp-image-505" alt="FCI_1" src="http://gavinpayneuk.files.wordpress.com/2013/01/fci_1.png?w=300&#038;h=186" width="300" height="186" /></a></p>
<p>Secondly, repairing the virtual network name.</p>
<p><a href="http://gavinpayneuk.files.wordpress.com/2013/01/fci_2.png"><img class="aligncenter size-medium wp-image-506" alt="FCI_2" src="http://gavinpayneuk.files.wordpress.com/2013/01/fci_2.png?w=300&#038;h=73" width="300" height="73" /></a></p>
<p>Finally, bring the virtual network name back online.</p>
<p><a href="http://gavinpayneuk.files.wordpress.com/2013/01/fci_3.png"><img class="aligncenter size-medium wp-image-507" alt="FCI_3" src="http://gavinpayneuk.files.wordpress.com/2013/01/fci_3.png?w=300&#038;h=95" width="300" height="95" /></a></p>
<p>I&#8217;ve no idea if this will fix similar issues you may get, but knowing the option to repair the cluster&#8217;s DNS record is useful to know.</p>
<h2>Summary – A Powerful Combination of Platforms</h2>
<p>Implementing a clustered instance of SQL Server 2012 on Windows Server 2012 is still a very capable and impressive combination, and something I’d still recommend be the default option these days.</p>
<p>This blog post covers what’s true about all failover cluster installations and that’s that they touch every part of the server’s infrastructure: storage, networking, operating system, active directory, as well as SQL Server.  Consequently, minor tweaks to any of these areas can leave the SQL Server professional with a new area of the infrastructure to master.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=497&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2013/01/29/implementing-a-sql-server-2012-failover-cluster-instance-on-windows-server-2012-in-january-2013/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>

		<media:content url="http://gavinpayneuk.files.wordpress.com/2013/01/fci_1.png?w=300" medium="image">
			<media:title type="html">FCI_1</media:title>
		</media:content>

		<media:content url="http://gavinpayneuk.files.wordpress.com/2013/01/fci_2.png?w=300" medium="image">
			<media:title type="html">FCI_2</media:title>
		</media:content>

		<media:content url="http://gavinpayneuk.files.wordpress.com/2013/01/fci_3.png?w=300" medium="image">
			<media:title type="html">FCI_3</media:title>
		</media:content>
	</item>
		<item>
		<title>Columnstore Indexes Overview</title>
		<link>http://gavinpayneuk.com/2013/01/02/columnstore-indexes-overview/</link>
		<comments>http://gavinpayneuk.com/2013/01/02/columnstore-indexes-overview/#comments</comments>
		<pubDate>Wed, 02 Jan 2013 09:55:25 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=490</guid>
		<description><![CDATA[In December 2012, I presented about “Accelerating the Data Warehouse Using xVelocity Columnstore Indexes” at a SQLSanta event in London. My presentation’s purpose, and demos, were to show how this type of database engine index, that’s new in SQL Server &#8230; <a href="http://gavinpayneuk.com/2013/01/02/columnstore-indexes-overview/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=490&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In December 2012, I presented about “Accelerating the Data Warehouse Using xVelocity Columnstore Indexes” at a SQLSanta event in London.</p>
<p>My presentation’s purpose, and demos, were to show how this type of database engine index, that’s new in SQL Server 2012, significantly improves the performance of data warehouse style queries.&nbsp; </p>
<p>Columnstore indexes, and their complimenting Batch-Mode Query Processing feature, are used transparently by SQL Server once they’re created so the benefit for SQL Server professional is that that there’s no need to change existing data warehouse applications or queries to benefit from these performance improvements.&nbsp; </p>
<h1>Slides</h1>
<p>The presentation’s slides are available <a href="http://gavinpayneuk.files.wordpress.com/2013/01/accelerating-the-data-warehouse.pdf">here</a>.</p>
<h1>Session Questions</h1>
<p>Below are some of the answers to questions that I remember giving during the session:</p>
<ul>
<li>Even though the levels of internal compression of data within a Columnstore index are affected by the cardinality of the index’s data, the performance benefits of Columnstore indexes are so great compared to a non-clustered index that your data’s cardinality is not likely to influence whether you use Columnstore indexes or not; <br /> 
<li>You can use Columnstore indexes with AlwaysOn Availability Groups; <br /> 
<li>The SQL Server query optimiser will automatically consider using a Columnstore index and Batch-Mode Query Processing itself, you don’t have to re-write queries to use start using them; <br /> 
<li>Batch-Mode Query Processing only works with Columnstore indexes; <br /> 
<li>The column order, and number of Columnstore index keys, do not affect the performance of a query that using the Columnstore index. </li>
</ul>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=490&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2013/01/02/columnstore-indexes-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>What&#8217;s coming up</title>
		<link>http://gavinpayneuk.com/2012/12/06/whats-coming-up/</link>
		<comments>http://gavinpayneuk.com/2012/12/06/whats-coming-up/#comments</comments>
		<pubDate>Thu, 06 Dec 2012 22:44:22 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=484</guid>
		<description><![CDATA[In the last couple of months my community activities list has had things leave it and new things join it, so I thought share my future plans, and promote some of the events I&#8217;m supporting. Microsoft Certified Architect : SQL &#8230; <a href="http://gavinpayneuk.com/2012/12/06/whats-coming-up/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=484&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In the last couple of months my community activities list has had things leave it and new things join it, so I thought share my future plans, and promote some of the events I&#8217;m supporting.</p>
<h2>Microsoft Certified Architect : SQL Server – Giving back</h2>
<p>Preparing for my MCA Board was the hardest, yet in hindsight the most rewarding and interesting, thing I’ve ever done.  The subjects it covers still interest me to the extent that I’m now contributing to the MCA programme itself, allowing the next people through the certification’s process to benefit from someone else’s experiences and inputs.</p>
<p>For those of you with the pre-requisite SQL Server MCM certification and who are interested in taking the next level of certification, there are more details here:<br />
<a href="http://www.microsoft.com/learning/en/us/mca-certification.aspx">http://www.microsoft.com/learning/en/us/mca-certification.aspx</a></p>
<p>Additionally, free feel to email me if you have any questions about my experience of the programme <a href="mailto:gavin@coeo.com">gavin@coeo.com</a></p>
<h2>Accelerating Data Warehouses with Columnstore Indexes &#8211; SQL Santa – 14th December</h2>
<p>The fact that Columnstore indexes work in a totally different way to how we’re used to SQL Server working makes me curious about them.  I’m sharing the learnings from my curiousness, and outcome from a customer proof of concept test, in a hour’s presentation at a London event in mid-December.  SQLSanta is a day long even at Microsoft’s London venue, and has a range of Microsoft Product Marketing, and industry professionals, presenting about contemporary SQL Server industry topics.</p>
<p>Although the event is now fully booked, you can find more details about the sessions here <a href="http://www.sqlserverfaq.com/events/452/SQL-Santa-2012.aspx">http://www.sqlserverfaq.com/events/452/SQL-Santa-2012.aspx</a> as I suspect some will be presented at future community events, I’ve certainly submitted mine for some already.</p>
<h2>Mission Critical Data Platforms on Windows Server 2012 Pre-con – SQL Saturday 194 – Exeter – 8th March</h2>
<p>Christian and I are hosting this one day workshop with the agenda of un-leashing the new capabilities of Windows Server 2012 to make SQL Server deployments even more highly available in even more scenarios.  Rather than reviewing the introductory level aspects of Failover Clustering or Availability Groups, the day looks at how previous platform limitations can now be overcome using native features in the latest Windows operating system.  These include subjects such as the merging of high-availability and disaster recovery design patterns, the use of new storage formats such as SMB file shares, and using Hyper-V virtual machines in HA and DR configurations.</p>
<p>You can read more about our pre-con, and book, here <a href="http://sqlsouthwest.co.uk/SQLSaturday_precon.htm">http://sqlsouthwest.co.uk/SQLSaturday_precon.htm</a></p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=484&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/12/06/whats-coming-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>Coeo sessions at SQLSaturday Cambridge</title>
		<link>http://gavinpayneuk.com/2012/09/12/coeo-sessions-at-sqlsaturday-cambridge/</link>
		<comments>http://gavinpayneuk.com/2012/09/12/coeo-sessions-at-sqlsaturday-cambridge/#comments</comments>
		<pubDate>Wed, 12 Sep 2012 11:53:16 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=482</guid>
		<description><![CDATA[This weekend saw the UK’s first SQLSaturday organised by Mark Broadbent, and held in Cambridge, that was without doubt a huge success. Coeo were lucky to have four of us present a staggering five sessions on the day; so thank &#8230; <a href="http://gavinpayneuk.com/2012/09/12/coeo-sessions-at-sqlsaturday-cambridge/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=482&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This weekend saw the UK’s first SQLSaturday organised by Mark Broadbent, and held in Cambridge, that was without doubt a huge success.</p>
<p>Coeo were lucky to have four of us present a staggering five sessions on the day; so thank you to the SQLSaturday team for selecting our sessions, and to those who chose to attend them.</p>
<p>I’ve put a link to the presentation slides for all of our sessions below:</p>
<ul>
<li>I want to be a better architect &#8211; <em>Gavin Payne</em> <br />Slides <a href="http://gavinpayneuk.files.wordpress.com/2012/09/howtobeamoresuccessfularchitect.pdf" target="_blank">here</a> </li>
</ul>
<ul>
<li>NUMA internals of SQL Server 2012 – <em>Gavin Payne <br />Slides <a href="http://gavinpayneuk.files.wordpress.com/2012/09/numa-internals-of-sql-server-2012.pdf" target="_blank">here</a> </em></li>
</ul>
<p><em></em></p>
<ul>
<li>Deploying a highly available BI environment – Chris Testa-O&#8217;Neill <br /><em>Slides <a href="http://gavinpayneuk.files.wordpress.com/2012/09/deploying-a-highly-available-environment.pdf" target="_blank">here</a> </em></li>
</ul>
<p><em></em></p>
<ul>
<li>SQL Server 2012 certification – Chris Testa-O&#8217;Neill and Pete Harris <br /><em>Slides <a href="http://gavinpayneuk.files.wordpress.com/2012/09/sql-certification-and-training-pete-harris.pdf" target="_blank">here</a></em> </li>
</ul>
<p><em></em></p>
<ul>
<li>Troubleshooting SQL Server with PowerShell – James Boother <br /><em>Slides <a href="http://gavinpayneuk.files.wordpress.com/2012/09/troubleshooting-sql-server-with-powershell.pdf" target="_blank">here</a></em> </li>
</ul>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=482&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/09/12/coeo-sessions-at-sqlsaturday-cambridge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>This is Columnstore</title>
		<link>http://gavinpayneuk.com/2012/07/22/this-is-columnstore-part-1/</link>
		<comments>http://gavinpayneuk.com/2012/07/22/this-is-columnstore-part-1/#comments</comments>
		<pubDate>Sun, 22 Jul 2012 23:25:31 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=456</guid>
		<description><![CDATA[This weekend I finally spent some time getting up to speed on the new xVelocity Columnstore index feature in SQL Server 2012 Enterprise Edition. This is part one of three blog articles about my initial experiences of them, but more &#8230; <a href="http://gavinpayneuk.com/2012/07/22/this-is-columnstore-part-1/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=456&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This weekend I finally spent some time getting up to speed on the new xVelocity Columnstore index feature in SQL Server 2012 Enterprise Edition.</p>
<p>This is part one of three blog articles about my initial experiences of them, but more interestingly, a quick look under the hood at how they work.</p>
<p><strong><em>What are columnstore indexes?</em></strong><br />
In summary, the Columnstore indexes feature is both a type of non-clustered index AND a new query processing mode built into the SQL Server 2012 database engine. Their aim is to massively increase (approx. 10x) the performance of the types of queries used within a data warehouse, or in simpler terms – querying very large tables as quickly as possible.</p>
<p>There are many explanations of what columnstore indexes actually are, how they’re different to row-based indexes, and how SQL Server’s implementation works so I’ll point you to perhaps the best links for these topics:</p>
<ul>
<li>How do Column Stores work? &#8211; Thomas Kejser <a href="http://blog.kejser.org/2012/07/04/how-do-column-stores-work/">here</a></li>
<li>Inside SQL Server’s implementation – Conor Cunningham <a href="http://sqlbits.com/Sessions/Event10/Saturday_Keynote">here</a></li>
</ul>
<p><em><strong>How would I use them?</strong></em><br />
Hopefully, the two links above will give you an idea as to what the feature was designed to do and the circumstances in which you might use them. The next section focuses on how you would use them and for this series of blog articles I’m going to use the two simple tables shown below:</p>
<p><a href="http://gavinpayneuk.files.wordpress.com/2012/07/clip_image001.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="clip_image001" alt="clip_image001" src="http://gavinpayneuk.files.wordpress.com/2012/07/clip_image001_thumb.png?w=430&#038;h=161" width="430" height="161" border="0" /></a></p>
<p>Having created and populated the tables, I used random number based values to create 35 million rows in the fact table for 10 products, I then created regular clustered indexes on them:</p>
<pre><span style="font-family:Courier New;">create table tblFact (rowID bigint identity(1,1),
custID int, prodID int, Sale money); </span>
create table DimProd (prodID int,prodName varchar(200)); 
create unique clustered index idx_cls_tblFact on tblFact(rowID);
create unique clustered index idx_cls_Prod on DimProd(prodID);
<span style="font-family:Courier New;">insert into DimProd (prodID, prodName) 
values (1, 'Car'), (2, 'Van'), (3, 'Truck'), 
(4, 'Taxi'), (5, 'Horse'), (6, 'Helicopter'), 
(7, 'BizJet'),(8, 'JumboJet'),(9, 'Ferry'), 
(10, 'Hovercraft')</span>
<span style="font-family:Courier New;">insert into tblFact 
(custID, prodID, Sale) 
(select convert(int,rand()*10), convert(int,rand()*100),
convert(money,rand()*10000)) 
go 1000000 </span></pre>
<p>Followed by:</p>
<pre><span style="font-family:Courier New;">insert into tblFact (custID, prodID, Sale) 
(select top 500000 custID, prodID, Sale from tblFact) 
go 58</span></pre>
<p>This will give you 30 million rows for about 1GB of disk space.</p>
<p>I then ran a simple query against the table that’s designed to simulate a simple star schema and the type of query a data warehouse might use:</p>
<pre><span style="font-family:Courier New;">select DimProd.prodName, 
sum(tblFact.Sale) 
from tblFact, DimProd 
where tblFact.prodID = DimProd.prodID 
group by DimProd.prodName </span></pre>
<p>I could have added supporting non-clustered indexes, but traditional index design isn’t the point of this article, but with the 35 million rows I had in my fact table the query takes <strong><em>4 seconds</em></strong> to run.</p>
<p><em><strong>Adding a columnstore index<br />
</strong></em>The next step is to actually add a columnstore index, this is quite a big step as:</p>
<ul>
<li>You can only have 1 columnstore index per table</li>
<li>Creating the columnstore index makes the table read-only</li>
</ul>
<p>The following command adds a columnstore index:</p>
<pre><span style="font-family:Courier New;">create columnstore index idx_cs_tblFact on tblFact(custID, prodID, Sale)</span></pre>
<p>You can tell from the time it takes to create, on my SSD drive about 50 seconds, that there’s a lot of work going on to create it; for comparison, creating the equivalent regular non-clustered index takes about half the time.</p>
<p>If I then execute the query used above again, the query optimizer will use the columnstore index AND the new batch query processing mode that Conor mentioned, and the query will now execute in less than a second.</p>
<p><a href="http://gavinpayneuk.files.wordpress.com/2012/07/clip_image002.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="clip_image002" alt="clip_image002" src="http://gavinpayneuk.files.wordpress.com/2012/07/clip_image002_thumb.png?w=413&#038;h=117" width="413" height="117" border="0" /></a></p>
<p>Although the performance improvements in our example might not seem great, 4 seconds down to 1 second, in further tests I’ve increased the fact table from 30 million to 90 million rows, yet didn’t seen a 3x increase in query runtime.</p>
<p><strong><em>Sys.indexes<br />
</em></strong>Finally, for this article, you can begin to see how columnstore indexes are both different and similar to normal indexes by looking at their properties in SSMS and sys.indexes with this query:</p>
<pre><span style="font-family:Courier New;">select * from sys.indexes where type = 6</span></pre>
<p>Books OnLine lists Index type 6 books as a “Nonclustered columnstore index”, while Index type 5 interestingly is “Clustered xVelocity memory optimized columnstore index (<strong><em>Reserved for future use</em></strong>.)” This suggests there might be quite a lot more than just updatable columnstore indexes on the roadmap.</p>
<p>Of course, this is all just my first look at columnstore indexes, if you know something I’ve not mentioned, please feel free to comment on the post!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=456&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/07/22/this-is-columnstore-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>

		<media:content url="http://gavinpayneuk.files.wordpress.com/2012/07/clip_image001_thumb.png" medium="image">
			<media:title type="html">clip_image001</media:title>
		</media:content>

		<media:content url="http://gavinpayneuk.files.wordpress.com/2012/07/clip_image002_thumb.png" medium="image">
			<media:title type="html">clip_image002</media:title>
		</media:content>
	</item>
		<item>
		<title>Efficient, partial, point-in-time database restores</title>
		<link>http://gavinpayneuk.com/2012/06/03/efficient-partial-point-in-time-database-restores/</link>
		<comments>http://gavinpayneuk.com/2012/06/03/efficient-partial-point-in-time-database-restores/#comments</comments>
		<pubDate>Sun, 03 Jun 2012 17:20:15 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=442</guid>
		<description><![CDATA[This article is about a situation that many of us could describe the theoretical approach to solving, but then struggle to understand why SQL Server wasn’t following that theoretical approach when you tried it for real. Earlier this week, I &#8230; <a href="http://gavinpayneuk.com/2012/06/03/efficient-partial-point-in-time-database-restores/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=442&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This article is about a situation that many of us could describe the theoretical approach to solving, but then struggle to understand why SQL Server wasn’t following that theoretical approach when you tried it for real.</p>
<p>Earlier this week, I had a client ask about the best way to perform:</p>
<li>a partial database restore, 1 of 1300 filegroups;
<li>to a specific point in time;
<li>using a differential backup, and therefore;
<li>without restoring each transaction log backup taken since the full backup.</li>
<p>&nbsp;</p>
<p>The last point might sound un-necessary because you’re restoring a differential backup, but the restore script originally being used meant SQL Server still wanted every transaction log since the full backup restored.&nbsp; This article explains the background to the situation, the successful restore commands, and identifies what was causing every transaction log to need to be restored.</p>
<p>For this article, let’s imagine we have a database of the following configuration:<a href="http://gavinpayneuk.files.wordpress.com/2012/06/dboverview.jpg"><img style="background-image:none;padding-left:0;padding-right:0;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:0;border-width:0;" title="DBoverview" border="0" alt="DBoverview" src="http://gavinpayneuk.files.wordpress.com/2012/06/dboverview_thumb.jpg?w=569&#038;h=143" width="569" height="143"></a></p>
<p>And, let’s imagine it has the following backup schedule:<a href="http://gavinpayneuk.files.wordpress.com/2012/06/backupoverview.jpg"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Backupoverview" border="0" alt="Backupoverview" src="http://gavinpayneuk.files.wordpress.com/2012/06/backupoverview_thumb.jpg?w=569&#038;h=296" width="569" height="296"></a></p>
<p>Then, let’s assume we want to restore fgTwo to the point in time labelled above in order to recover data from a table it stores.&nbsp; Performing a partial database restore which will be required also requires the primary filegroup to be restored so SQL Server will automatically restore it making the future database look like the following:</p>
<p><a href="http://gavinpayneuk.files.wordpress.com/2012/06/dboverview2.jpg"><img style="background-image:none;padding-left:0;padding-right:0;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:0;border-width:0;" title="DBoverview2" border="0" alt="DBoverview2" src="http://gavinpayneuk.files.wordpress.com/2012/06/dboverview2_thumb.jpg?w=351&#038;h=111" width="351" height="111"></a></p>
<p>You’d expect the path to restore fgTwo to look like the path on the left of the diagram below, but for some reason the client was being forced to perform the restore steps on the right, despite their T-SQL restore commands appearing to follow the syntax in Books Online.</p>
<p><a href="http://gavinpayneuk.files.wordpress.com/2012/06/restoreoverview.jpg"><img style="background-image:none;padding-left:0;padding-right:0;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:0;border-width:0;" title="Restoreoverview" border="0" alt="Restoreoverview" src="http://gavinpayneuk.files.wordpress.com/2012/06/restoreoverview_thumb.jpg?w=442&#038;h=250" width="442" height="250"></a></p>
<p>To show how to restore the filegroup using the path on the left, and highlight what was causing the path on the right to be required, I’ll use a series of T-SQL restore commands.</p>
<p>This first command restores the parts of the database we’re interested in from the full backup file, labelled “A” in our timeline, and the two most important parameters shown in green are what turns a complete database restore into a partial filegroup restore.</p>
<p><font color="#0000ff" face="Courier New">restore <br />database partial2<br /><font color="#00ff00"><strong>filegroup=&#8217;primary&#8217;, filegroup=&#8217;fgTwo&#8217;<br /></strong></font>from disk = &#8216;c:\parttest\partial1_FULL_A.bak&#8217;<br />with norecovery, <font color="#00ff00"><strong>partial</strong></font>, replace,<br />move &#8216;primary&#8217; to &#8216;c:\parttest\priamry.mdf&#8217;,<br />move &#8216;primary_log&#8217; to &#8216;c:\parttest\primary_log.ldf&#8217;,<br />move &#8216;fTwo&#8217; to &#8216;c:\parttest\fTwo.ndf&#8217;</font></p>
<p>The next command restores from the differential backup, labelled “B” in our timeline, and means we don’t need to restore transaction logs A1 and A2.&nbsp; In the client’s real-world scenario they actually had 120+ transaction logs between the full and differential backups, hence the desire not to have to restore each of them.</p>
<p>It was this command that was the cause of them having to restore every transaction log since the full backup, the crossed out parameters in purple were what was used and causing it to happen.&nbsp; <strong><em>Telling SQL Server again which filegroups to restore was forcing it to need to restore the entire log chain since the full backup.</em></strong></p>
<p><font color="#0000ff" face="Courier New">restore <br />database partial2<br /><strike><font color="#9b00d3"><strong>filegroup=&#8217;fgTwo&#8217;</strong></font></strike><br />from disk = &#8216;c:\parttest\partial1_DIFF_B.bak&#8217;<br />with norecovery,<br />move &#8216;primary&#8217; to &#8216;c:\parttest\priamry.mdf&#8217;,<br />move &#8216;primary_log&#8217; to &#8216;c:\parttest\primary_log.ldf&#8217;,<br />move &#8216;fTwo&#8217; to &#8216;c:\parttest\fTwo.ndf&#8217;</font></p>
<p><font size="2" face="Consolas"><font size="2" face="Consolas"></font></font>
<p>Finally, with that step performed, you can then restore the subsequent transaction logs from after the differential backup with a relevant STOPAT parameter:</p>
<p><font color="#0000ff" face="Courier New">restore<br />log partial2<br />from disk = &#8216;c:\parttest\partial1_Log_B1.trn&#8217;<br />with norecovery, stopat=&#8217;2012-05-29 15:13:12.750&#8242;</font></p>
<p><font size="2" face="Consolas"><font size="2" face="Consolas"></font></font>
<p><font face="Courier New"><font color="#0000ff">restore<br />log partial2<br />from disk = &#8216;c:\parttest\partial1_Log_B2.trn&#8217;<br />with norecovery, stopat=&#8217;2012-05-29 15:13:12.750&#8242;<br /></font><br /><font color="#0000ff">restore database partial2 with recovery</font></font></p>
<p>At this point, the database is recovered with just the primary and fgTwo filegroups online, you can look in sys.master_files to see the state of all of the database’s data files and which are currently online.</p>
<p>In summary, this article showed how to perform a partial database restore, and how you can easily have to restore more than you were expecting to due to a simple “over-clarification” in a restore command.</p>
<p>I have a complete demo script of a more thorough test available for download from <a href="http://gavinpayneuk.files.wordpress.com/2012/06/partialdemo.pdf" target="_blank">here</a>.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=442&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/06/03/efficient-partial-point-in-time-database-restores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>

		<media:content url="http://gavinpayneuk.files.wordpress.com/2012/06/dboverview_thumb.jpg" medium="image">
			<media:title type="html">DBoverview</media:title>
		</media:content>

		<media:content url="http://gavinpayneuk.files.wordpress.com/2012/06/backupoverview_thumb.jpg" medium="image">
			<media:title type="html">Backupoverview</media:title>
		</media:content>

		<media:content url="http://gavinpayneuk.files.wordpress.com/2012/06/dboverview2_thumb.jpg" medium="image">
			<media:title type="html">DBoverview2</media:title>
		</media:content>

		<media:content url="http://gavinpayneuk.files.wordpress.com/2012/06/restoreoverview_thumb.jpg" medium="image">
			<media:title type="html">Restoreoverview</media:title>
		</media:content>
	</item>
		<item>
		<title>Read Committed Snapshot Isolation&#8211; Two Considerations</title>
		<link>http://gavinpayneuk.com/2012/05/11/read-committed-snapshot-isolation-two-considerations/</link>
		<comments>http://gavinpayneuk.com/2012/05/11/read-committed-snapshot-isolation-two-considerations/#comments</comments>
		<pubDate>Fri, 11 May 2012 20:32:40 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=431</guid>
		<description><![CDATA[&#160; The Read Committed Snapshot database option in SQL Server, known perhaps more accurately as Read Committed Snapshot Isolation or RCSI, can be enabled to help readers from blocking writers and writers from blocking readers.&#160; However, enabling it can cause &#8230; <a href="http://gavinpayneuk.com/2012/05/11/read-committed-snapshot-isolation-two-considerations/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=431&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<p>The Read Committed Snapshot database option in SQL Server, known perhaps more accurately as Read Committed Snapshot Isolation or RCSI, can be enabled to help readers from blocking writers and writers from blocking readers.&nbsp; However, enabling it can cause two issues with the tempdb database which are often overlooked.</p>
<p>One can slow down queries, <strong><em>the other can cause queries to <font color="#ff0000">fail</font></em></strong>.</p>
<h2>Overview of RCSI</h2>
<p>Enabling the option changes the behaviour of the default SQL Server isolation level, read committed.&nbsp; By default, this isolation level means that if one session is updating a range of rows then another session cannot execute a select query against the same set of rows; the shared locks the select query needs are incompatible with the eXclusive or Update locks that the update query will be using; the session executing the select query ends up being blocked until the transaction involving the update query has committed.&nbsp; That’s a very high level overview of what happens so those wanting to know more or become an MCM should watch this video <a href="http://technet.microsoft.com/en-us/sqlserver/gg545007.aspx" target="_blank">here</a>.</p>
<p>&nbsp;</p>
<p>Configuring a database to use the Read Committed Snapshot option aims to stop this happening by using Row Versioning.&nbsp; Essentially, before a row is locked in preparation for changes a copy of it is put in a special part of the tempdb database, known as the version store.&nbsp; When a select query then wants to read that row it uses the copy in the version store rather than waiting for the actual row to have its locks released.&nbsp; Again, I recommend watching the video linked to above to see just what happens as I’m just giving a high level overview of the feature before I discuss the primary points in this article.</p>
<p>&nbsp;</p>
<h2>Tempdb Performance</h2>
<p>One of the first things people mention when you suggest enabling the Read Committed Snapshot option is that it will put pressure on the tempdb database which stores the version store.</p>
<p>That’s correct it will, but a properly configured tempdb database should never be a bottleneck in your environment.&nbsp; You can read how super-tuning expert Thomas Kejser put the world’s biggest database workloads through SQL Server and never had to worry about tempdb performance <a href="http://www.google.co.uk/url?sa=t&amp;rct=j&amp;q=thomas%20kejser%20tempdb&amp;source=web&amp;cd=7&amp;ved=0CF0QFjAG&amp;url=http%3A%2F%2Fsqlbits.com%2FDownloads%2F117%2FLessons%2520Learned%2520from%2520128%2520Core%2520OLTP%2520Testing%2520-%2520Thomas%2520Kejser.pptx&amp;ei=DmatT4vjLMnN8QPrpIXCCg&amp;usg=AFQjCNHukj94MyeAXSnE1u0vDdPm3pF99g&amp;cad=rja" target="_blank">here</a>.</p>
<p>There are two considerations I recommend for configuring your tempdb database in order to ensure good performance:</p>
<ul>
<li>The number of tempdb data files – in the absence of your own monitoring for PFS, GAM or SGAM contention within tempdb I hear people at Microsoft these days recommending having 8 equally sized data files which I’d agree with.&nbsp; They don’t need to each be massive, their total size could still be 8MB(!), but having more increases the number of internal system objects within the database so reduces the changes a single system objects becoming contended.&nbsp; (<em>The rule in SQL Server generally tends to be that if you have any kind of resource contention add more of that resource; whether it be IOPS, locks or PFS pages etc.</em>).&nbsp; Having too many data files is much less likely to cause you problems than having too few, just be sensible about how many you have. </li>
</ul>
<p>&nbsp;</p>
<ul>
<li>The type of physical storage for the tempdb data files – as always, configure the storage you use for tempdb like you would for your database files.&nbsp; Fast, reliable and striped arrays, and while Thomas will tell you that using dedicated disks isn’t important for him, others will tell you its crucial.&nbsp; The only additional comment I have is that some people deploy NAND storage specifically for tempdb, in fact SQL Server 2012 had some changes to support this with failover clusters. </li>
</ul>
<p>&nbsp;</p>
<p>Crucially though, having a poor performing tempdb database won’t break a user’s queries, they may just run slower than they could do, especially if you’re using the read committed snapshot option. </p>
<p>&nbsp;</p>
<h2>Tempdb Sizing</h2>
<p>How much space your tempdb database needs depends on how you use SQL Server, some people need very little space whiles others need lots.&nbsp; <font color="#ff0000"><strong><em>What’s relevant to this article is that the read committed snapshot option doesn’t just like tempdb space, it needs it.</em></strong></font></p>
<p>We mentioned how rows get written to the version store in tempdb as they get locked in the source user database, but what happens if there’s no free space in tempdb when that process goes to happen?&nbsp; I did a test to find out, you can email me for my demo script if you want to try it for yourself.</p>
<p>In summary, when tempdb is full update queries will still execute successfully but select queries which expect to find the rows they need in the version store will fail when they can’t find them there.&nbsp; You’re likely to see this message:</p>
<p>&nbsp;</p>
<p>“<font face="Courier New"><font size="2">Msg 3958, Level 16, State 1, Line 1 </font></font></p>
<p style="margin:0;" class="MsoNormal"><font size="3"><font face="Calibri"><font size="2" face="Courier New">Transaction aborted when accessing versioned row in table &#8216;dbo.t1&#8242; in database &#8216;s1&#8242;. Requested versioned row was not found. Your tempdb is probably out of space. Please refer to BOL on how to configure tempdb for versioning.</font>” </font></font></p>
<p>So how do you stop that from happening?&nbsp; </p>
<p>The safety option I suggest is to place tempdb on a drive with lots of free space although its acceptable to configure tempdb to start with small initial data file sizes.&nbsp; However, make sure you configure the date file auto-grow settings so that when tempdb runs out of free space SQL Server will automatically allocate it some more.&nbsp; There are methodologies you can use for setting a good initial size for tempdb but for now enabling the autogrow option is a good failsafe.&nbsp; Then, after a couple of months see what size the data files have grown to and consider setting that to be their initial sizes.&nbsp; </p>
<p>&nbsp;</p>
<h2>General Recommendations, Test</h2>
<p>Those are very general recommendations, along with setting the data file auto grow size to 500MB, but in the absence of specific testing or advice for your environment they might be something you want to try using in a test environment to help you learn more about tempdb behaviour in your environment.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=431&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/05/11/read-committed-snapshot-isolation-two-considerations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>Knowing when you&#8217;re ready to attempt to become an MCM of SQL Server</title>
		<link>http://gavinpayneuk.com/2012/05/01/knowing-when-youre-ready-to-attempt-to-become-an-mcm-of-sql-server/</link>
		<comments>http://gavinpayneuk.com/2012/05/01/knowing-when-youre-ready-to-attempt-to-become-an-mcm-of-sql-server/#comments</comments>
		<pubDate>Tue, 01 May 2012 08:57:32 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=415</guid>
		<description><![CDATA[Since I became a “Microsoft Certified Master of SQL Server” I’ve had lots of people asking me how I prepared, how I knew I was ready to take the exams and what they were like. At the SQLBits certification session &#8230; <a href="http://gavinpayneuk.com/2012/05/01/knowing-when-youre-ready-to-attempt-to-become-an-mcm-of-sql-server/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=415&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Since I became a “Microsoft Certified Master of SQL Server” I’ve had lots of people asking me how I prepared, how I knew I was ready to take the exams and what they were like. At the SQLBits certification session recently I was invited on to the panel to answer questions about the “modern” MCM program. This article hopes to answer some of the questions people ask yet they will always have very personal answers. What feels difficult for me might be slightly less difficult for you yet I might make it sound really difficult etc. Despite this, I thought I’d share my experiences with you and hopefully help you decide when you’re ready to attempt to become a Microsoft Certified Master.</p>
<p>Before we start, I should point out a couple of things: this article has been reviewed by the former MCM program manager Robert Davies so don’t think it gives away secret information about how to prepare &#8211; none of that is covered by any NDA anyway, and also realise that the MCM is a very high level of certification, its not for everyone.  Read the experience the program assumes you have and ask yourself if that’s like your background.</p>
<h2>How I Prepared</h2>
<p>There were three specific steps I took for in my preparation and luckily I was able to make most of them part of my day to day role at Coeo. They were:</p>
<p>1. Real-world experience</p>
<p>2. Reading materials</p>
<p>3. MCM readiness videos</p>
<p>Equally as importantly, you need to find a way to make the intense preparation more exciting to you than just sitting down in an evening and reading a book. If you take that approach you’ll run out of mental energy and begin cutting corners in your preparation which will reduce your knowledge and familiarity with features. I introduce the word <em>familiarity</em> there for the first time, that’s an important word for the MCM’s requirements of you.</p>
<h2>Familiarity</h2>
<p>This certification isn’t about knowing every syntax, command or trace flag ever published, it’s about knowing what features SQL Server has, how they work, how they work with each other and their limitations. No book will teach you all of that, only having used them a lot will you become familiar with them. For example, if the lab exam asks you to meet requirement X then you should immediately know that feature Y is the answer, then is not the time to be teaching yourself the difference between two similar features. Of course, if you also know there’s something which can stop a straightforward implementation of feature Y then your familiarity with it needs to be able to tell you in advance what that issue will be – and how to fix it.</p>
<h2><strong>Real-world Experience</strong></h2>
<p>Nothing can prepare you better for the MCM exams than real-world experience of having used SQL Server, that’s where your familiarity comes from. Of course, that probably doesn’t mean managing your company’s HR or Intranet databases as the MCM is focused at enterprise environments with requirements and issues which require MCM level experts to resolve them. I was lucky that my day job put me in those enterprise situations almost every day and while you may not think you have that luxury you’d probably be surprised.</p>
<p>My advice is to do the following regardless of what your involvement with SQL Server is:</p>
<ul>
<li>become familiar with the MCM’s exam objectives and your understanding of what they require you to know (the readiness videos may help if you’re not sure) in terms of features and best practices, they are available <a href="http://www.microsoft.com/learning/en/us/certification/master-sql-path.aspx#exam-topics">here</a></li>
<li>generalise each SQL Server request or requirement you get given in your current role, remove what makes it specific to your environment and most importantly, the limitations your current environment might put on how you would deliver it</li>
<li>then, in your own time, consider how you might meet that requirement in a way that best shows your understanding of the MCM’s exam objectives. For example, using peer-to-peer replication might not be possible in your environment but it could be the most appropriate way an MCM would implement a solution in an environment with no legacy restrictions</li>
<li>with your chosen approach planned, implement it on some virtual machines. You don’t need to worry about having complicated database schemas or large volumes of data, nor do your virtual machines have to be fast. You should be able to create the databases and data for your tests in 60 seconds, keep them simple so you can focus on getting the feature to work so you can learn about it. Spending a whole evening just trying to replicate all of the tables in your intranet database is an un-necessary way to waste time</li>
<li>with the feature installed, remove it and repeat the setup, determine if its best to use the GUI or T-SQL setup steps in case there are options you can’t chose through the GUI, then find out how you troubleshoot and diagnose that feature, are there DMVs or log files etc.</li>
</ul>
<p>That may seem like a lot of effort but that’s the level of preparation I put into learning about SQL Server for my exams. Of course, there will be some features you might know more than enough about already, great, tick those off and move onto those you don’t know so well.</p>
<h2><strong>Reading Materials</strong></h2>
<p>The MCM web site gives you a very thorough reading list, <a href="http://www.microsoft.com/learning/en/us/certification/master-sql-path.aspx#mcm-microsoft-sql-server-2008-readiness">here</a>, which covers almost every part of SQL Server in almost every depth you can imagine. How much of that reading list you can ever read is a very personal decision based on time, ability and ultimately your interest in some of the subjects. What I will say is that every little thing you know about SQL Server when you go into the exams will boost your confidence, especially if you find you know more than is required. Some of the books can be expensive and difficult to get hold of so don’t feel they’re compulsory reading. Instead, Books Online and blogs can give you the equivalent knowledge but you will have to spend more time searching for it. I’m not going to recommend any specific blogs, only that the types of blog you read should typically be authored by people who teach pre-cons or deliver level 500 training at conferences.</p>
<p>When you do read a book, make sure you have a good note taking method. There’s no point in reading a book, getting to the end and forgetting what you read 2 days ago at the beginning. I used OneNote but there are many variants of the productivity tool around.</p>
<h2><strong>MCM Readiness Videos</strong></h2>
<p>I found the videos, available <a href="http://technet.microsoft.com/en-us/sqlserver/ff977043.aspx">here</a>, very useful but not in the way you’re probably imagining.<br />
I watched them at anywhere between 1.2 and 1.6x their normal speed depending on who was speaking. Why? Because I used them for revision and checking I knew what was being shown, not because I was using them as my only learning opportunity or because I wanted to emulate the classroom experience. If I didn’t know something that was being shown I either stopped the video and researched that subject, or watched that part at normal speed. However, you cannot pass the MCM exams just by watching 40 hours of videos! They are readiness videos, not a complete training course.</p>
<p>That was “all” I did for my preparation. Notice I didn’t call it revision, as I was honest and had to learn new things for the MCM exams, you will need to as well. I also didn’t do any MCM training courses, practice labs, webinars or use any discussion groups etc. However, watching the #sqlmcm hash tag on Twitter though may be of interest.</p>
<h2><strong>Knowing When You’re Ready</strong></h2>
<p>If someone asked if you’re ready to take the exams you’d always say you need another month or 2 months. In fact, the more you prepare the more you realise you don’t know so the more time you feel you need, that’s just because you’re aiming for a perfection that’ll never exist. Below are three recommendations my mentor, an MCM, gave me to help determine if I was ready and prepared:</p>
<ul>
<li>if your preparation plan is going to be more than 6 months you’re not ready to even begin. You can’t sustain the preparation intensity for any longer than that</li>
<li>you should be able to confidently talk about a feature of SQL Server to someone else who works with the product for 90 seconds and not end wondering if the other person believed what you were saying because everything you said should have been true and something you’d learnt</li>
<li>you should be able to take all four of the pre-req exams needed for the MCM the day before you take your first MCM exam and not think anything of it. If passing an MCITPro exam is still a big hurdle for you, you’ll need to re-consider your approach to the MCM exams</li>
</ul>
<p>So, that’s my advice, it’s not right, it’s not wrong, it’s just my approach that I used for taking, and passing first time, the MCM exams. Good luck with yours!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=415&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/05/01/knowing-when-youre-ready-to-attempt-to-become-an-mcm-of-sql-server/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>What to do when the solution will never be in front of you</title>
		<link>http://gavinpayneuk.com/2012/04/25/what-do-when-the-solution-will-never-be-in-front-of-you/</link>
		<comments>http://gavinpayneuk.com/2012/04/25/what-do-when-the-solution-will-never-be-in-front-of-you/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 21:41:19 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=411</guid>
		<description><![CDATA[Sometimes you have a requirement which you don’t have a tool in your toolbox for.&#160; When that happens the solution may not be to just get another tool and add it to your existing toolbox, it might be you have &#8230; <a href="http://gavinpayneuk.com/2012/04/25/what-do-when-the-solution-will-never-be-in-front-of-you/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=411&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Sometimes you have a requirement which you don’t have a tool in your toolbox for.&nbsp; When that happens the solution may not be to just get another tool and add it to your existing toolbox, it might be you have to use an entirely new type of toolbox with tools you’ve never used before in it.&nbsp; Doing that maybe a bold architectural decision but is often where the biggest performance or functionality gains can come from.</p>
<p>Recently, in the SQL Server space there have been some technologies become available that showed how existing performance bottlenecks were removed by solving the problem in a completely new way to the previous successful but relatively temporary fixes.&nbsp; Two examples we’ll consider are solid-state storage and Columnstore indexes.</p>
<h2>10x faster can’t always come from 10x the power</h2>
<p>Tonight I read the keynote presentation that Conor Cunningham gave at SQLBits recently about ColumnStore indexes (available <a href="http://blogs.msdn.com/b/conor_cunningham_msft/archive/2012/04/03/conor-vs-sqlbits-x-slide-decks.aspx" target="_blank">here</a>) but rather than read about how ColumnStore indexes work I read it from an architectural decision making perspective.&nbsp; </p>
<p>Midway through the presentation is the line “Making something 10x faster is HARD”, followed by a slide questioning how could you make a query run 10x faster.&nbsp; The answer wasn’t optimising the existing way of doing things, it was to implement a completely new way of working, in this case a new query optimiser mode and index format.&nbsp; The existing options just couldn’t be tuned anymore to meet the requirement.</p>
<h2>Game changing storage</h2>
<p>The other example I quoted was the introduction of solid state storage in database servers.&nbsp; Making storage fast was always a goal of infrastructure teams, they used different RAID levels, different caches and different numbers of disks until the industry realised that 5 and 10% gains weren’t always worth the effort or cost of implementing.&nbsp; Instead, what we wanted was something that was 10000% faster and the answer wasn’t more disks, it was a totally different approach to persistently storing data, in this case using memory chips instead of spinning platters.</p>
<h2>Conclusion</h2>
<p>You’re probably never going to be asked to re-write a query optimiser or create a new type of storage hardware, however you maybe asked to keep making something go faster or scale further after having just done all you can do to make it faster.&nbsp; It could be making reports run quicker or supporting more concurrent users.&nbsp; My conclusion is that you shouldn’t just think about how to solve today’s problem using today’s options, think about a medium term option that may mean doing something radical but it won’t be a shock to you when you realise you need to do it.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=411&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/04/25/what-do-when-the-solution-will-never-be-in-front-of-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>Microsoft Certifications &#8211; a newcomer&#8217;s guide</title>
		<link>http://gavinpayneuk.com/2012/04/23/microsoft-certifications-a-newcomers-guide/</link>
		<comments>http://gavinpayneuk.com/2012/04/23/microsoft-certifications-a-newcomers-guide/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 13:58:57 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=407</guid>
		<description><![CDATA[At the recent SQLBits X conference I was invited onto the panel during a session about Microsoft certifications and I said I’d write a follow-up article about some of what we discussed.&#160; While one of the session’s aim was to &#8230; <a href="http://gavinpayneuk.com/2012/04/23/microsoft-certifications-a-newcomers-guide/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=407&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>At the recent SQLBits X conference I was invited onto the panel during a session about Microsoft certifications and I said I’d write a follow-up article about some of what we discussed.&nbsp; While one of the session’s aim was to start communicating the changes the SQL Server 2012 certifications are bringing, most of the questions were about Microsoft certifications in general, although there was a disproportionately high interest in the Microsoft Certified Master.&nbsp; I’ll cover MCM topics in a separate post.</p>
<p>These are just my views and the advice I give people who ask me similar questions, they may differ from yours, they may not. </p>
<h2>Which level of certification should you aim for?</h2>
<p>For the SQL Server database engine, there are four levels of certification, the BI track will soon have a similar number, and at the same time all of the certification names will change but for now I’m going to use the SQL Server 2008 era titles and list them in increasing order of “difficulty”.&nbsp; They are: Technical Specialist (<strong>MCTS</strong>), IT Professional (<strong>MCITPro</strong>), Certified Master (<strong>MCM</strong>) and Certified Architect (<strong>MCA</strong>).&nbsp; </p>
<p>Which level is right for you depends on your personal goals.&nbsp; If you have only just started using SQL Server or want to get confidence through external validation that what you know is accurate then the <strong>Technical Specialist</strong> is a good first goal.&nbsp; In order to prepare for this you’ll probably need to broaden your knowledge to include some SQL Server features you haven’t used before, preparing you for when you do use them.&nbsp; This is an important step as it shows how certification will drive your professional development as well as deliver your certification goals.&nbsp; </p>
<p>If you take a Technical Specialist exam and get a good pass mark then you’re probably already on the way to achieving the <strong>IT Professional</strong> certification.&nbsp; I’d recommend this level for anyone who uses SQL Server all day everyday and has done so for 1-2 years.&nbsp; Passing this level will not only validate your knowledge, but also give you confidence to talk about SQL Server .&nbsp; If you’re in a role that deals primarily with SQL Server then you’re going to have people asking you questions about it, you’re on the road to becoming your department’s subject matter expert.&nbsp; </p>
<p>When it comes to the <strong>Microsoft Certified Master</strong> there’s only one person who can tell you if that level of certification is a suitable goal for you, and that’s you.&nbsp; Actually, your manager might have a view as well especially if you work for a company that’s passionate about SQL Server.&nbsp; If you look at the requirements that microsoft.com gives for Microsoft&#8217;s highest level of technical certification and think “I can do that” or “I want to pass that” then you’ve just set your next goal.&nbsp; It’s true that there’s probably a lot more thought that goes into aiming for this difficult and expensive certification but ultimately you have to have that “I want to pass” motivation in you otherwise the 6+ months of preparation will just be something you start tomorrow.&nbsp; If you’re serious about wanting to pass the MCM then it has to become part of your everyday life.&nbsp; I’ve met a few people who are “18 months into a 6 month revision plan”, they’ve just got side-tracked apparently.</p>
<p>The <strong>Microsoft Certified Architect</strong> is Microsoft’s highest level of certification for SQL Server and one which often gets overlooked.&nbsp; Why?&nbsp; I put it down to it not being a technical certification.&nbsp; To me however its equally as important as any technical credentials you might have if you’re positioning yourself as one of the best in the world at deploying or architecting SQL Server solutions.&nbsp; Being a Microsoft Certified Master is a pre-requisite for taking the MCA program which doesn’t have an exam.&nbsp; Instead you have to submit a 40 page portfolio and attend a 6 hour Board in Seattle where you’re quizzed on design and deployment methodologies, communication and influencing styles, and risk and resource management amongst other things.&nbsp; For me personally, its an exciting challenge.&nbsp; After 2 years of tech-heavy MCTS, MCITPro and MCM preparation I need to balance my skills with the ability to walk into a blue-chip company and say “here’s the right SQL Server architecture for your business and technical requirements, and I’ll lead the implementation of it.”&nbsp; That to me is powerful.&nbsp;&nbsp; </p>
<h2>Which version of certification should you choose?</h2>
<p>Whenever a new major release of SQL Server appears people always starting asking whether they should stop revising for the previous version and start studying for the new version.&nbsp; Again, that’s a question only you can answer as versions are only old if you start using something newer.&nbsp; If you work in an environment where your software vendor’s support policy means you’ll never be able to upgrade from version x of SQL Server and you want to learn more about that version then there’s probably no benefit in you taking exams for a newer version that you’ll never use.&nbsp; If however you want your knowledge to always be relevant and current then you’ll quickly get used to taking exams as soon as they get announced.&nbsp; However, if you’ve taken that approach in the past make sure you maintain the real-world experience to back up text-book reading otherwise your success with the SQL Server 2012 exams and especially the MCM will be limited.</p>
<h2>Strengths and Weaknesses</h2>
<p>One of the perceptions newcomers to certification often worry about is that you need to be an expert and get every question in an exam right in order to pass.&nbsp; If you look at the learning topics and begin to see un-familiar subjects, perhaps impersonation, XML or CLR, you might think you need to be as good at those areas as you are in your stronger areas.&nbsp; The good news is that to my knowledge, no Microsoft exam requires you to get 100% to pass, in fact the published pass mark for most if not all is 70%.&nbsp; I’m not suggesting you can ignore entire areas of the syllabus, but at the same time you don’t need to get every question right to pass.&nbsp; If you go into an exam knowing more about indexing than required but less about XML than needed you might be lucky and pick up extra marks to balance out your overall score.&nbsp; Of course, there are quite a few topics you&#8217; need to be familiar with the pass but knowing that its ok to get some questions wrong should help remove the fear that you need to be an expert in every part of the exam.&nbsp; No one is an expert in everything, someone will always have a strength that makes up for a weakness elsewhere.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=407&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/04/23/microsoft-certifications-a-newcomers-guide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>Just what comes in the box?</title>
		<link>http://gavinpayneuk.com/2012/04/11/just-what-comes-in-the-box/</link>
		<comments>http://gavinpayneuk.com/2012/04/11/just-what-comes-in-the-box/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 19:48:12 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=403</guid>
		<description><![CDATA[As a SQL Server architect/consultant/advisor/advocate/you name it, one of my roles is to advise clients on the best solution for their requirements and their budget.&#160; That last piece may seem like common sense but people often forget with SQL Server &#8230; <a href="http://gavinpayneuk.com/2012/04/11/just-what-comes-in-the-box/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=403&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>As a SQL Server architect/consultant/advisor/advocate/you name it, one of my roles is to advise clients on the best solution for their requirements and <em>their budget</em>.&nbsp; That last piece may seem like common sense but people often forget with SQL Server where the dividing line between the Standard and Enterprise editions sits.&nbsp; </p>
<p>Knowing what comes in each edition, or more commonly what doesn’t come in Standard Edition especially in the area of high availability, is critical for me when I’m designing solutions for clients.&nbsp; So, with the recent public release of SQL Server 2012 my hunt for the “official SKU breakdown” began.&nbsp; There have been licensing datasheets released since late last year but they were too high level for me and the marketing terminology didn’t always translate into technical features.&nbsp; </p>
<p>Fortunately, TechNet has a feature by edition breakdown well documented on a web page <a href="http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx#CrossBoxScale" target="_blank">here</a>.&nbsp; Some of what the page shows you could guess, such as AlwaysOn Availability Groups being Enterprise Edition but 2-node FCIs remaining in Standard, however there were lots of surprises, caveats and footnotes which caught my eye.</p>
<p>I’ve yet to test some of the exact scenarios the web page described, but here is a list of the licensing breakdown which caught my eye:</p>
<ul>
<li>Database mail, SSDT, Intellisense, and version control support are not available with the 64-bit version of Standard edition<br /> 
<li>There are a lot of advanced SSIS features and adapters only in the Enterprise edition and not in the BI edition<br /> 
<li>Database mirroring is still listed as being supported in Standard and BI editions, just deprecated<br /> 
<li>Database Tuning Advisor has limited functionality in Standard Edition<br /> 
<li>The BI and Standard editions are limited to lesser of 4 Sockets or 16 cores<br /> 
<li>Standard edition also has a “Maximum Compute Capacity” limit, explained in a complex way <a href="http://msdn.microsoft.com/en-us/library/ms143760.aspx" target="_blank">here</a> <br /> 
<li>The database engine in BI edition is limited to 64GB of memory but SSAS and SSRS have no memory limitation</li>
</ul>
<p>I don’t intend to review each observation, instead make a general observation that if you’re looking in Microsoft’s words to deploy more than “non-mission critical” workloads on Standard or BI editions you should check the SKU breakdown first.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=403&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/04/11/just-what-comes-in-the-box/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>Community Event Leader Tools</title>
		<link>http://gavinpayneuk.com/2012/04/03/community-event-leader-tools/</link>
		<comments>http://gavinpayneuk.com/2012/04/03/community-event-leader-tools/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 16:52:52 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=399</guid>
		<description><![CDATA[As many of you know, I run a small SQL Server community event here in the UK, SQL Server in the Evening, with the help of Coeo colleague and MVP Justin Langford.&#160; There’s been half a dozen evening events in &#8230; <a href="http://gavinpayneuk.com/2012/04/03/community-event-leader-tools/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=399&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>As many of you know, I run a small SQL Server community event here in the UK, SQL Server in the Evening, with the help of Coeo colleague and MVP Justin Langford.&nbsp; There’s been half a dozen evening events in the last 16 months and recently it got to the point where I needed to start putting proper tools in place to communicate with my event’s followers.&nbsp; As well as telling them when the next event is it’d also be nice to share some of the Chapter Leader mails I get from Pass etc.</p>
<p>&nbsp;</p>
<h3>Chaining Together Disparate Services </h3>
<p>What amazed me was not only how many of the essential services I needed were available for free but also how they integrated with each other.&nbsp; I’ll now talk you through what I used and how it connected.</p>
<p>&nbsp;</p>
<h3>Web Site</h3>
<p>I have a really really simple web site for the event (<a href="http://www.sqlserverintheevening.com" target="_blank">link</a>) which just lists information about the next event.&nbsp; I host this using a free blog provided by WordPress (<a href="http://www.wordpress.com" target="_blank">link</a>) but rather than creating blog posts, I just have a single “page” which I edit with each event’s details.&nbsp; WordPress have a content management system so I can create and edit the page in a web browser, no need to upload files like a traditional web site.&nbsp; I should one day make something more of the web site but I’ll save that for the future.&nbsp; </p>
<p>&nbsp;</p>
<h3>Domain Name</h3>
<p>One of the nice things WordPress also do is sell and host domain names, before integrating them seamlessly with a blog site.&nbsp; For about $20 a year I have my domain name (sqlserverintheevening.com) linked to my free blog site and hosted by WordPress for me.&nbsp; That may not sound that impressive today but setting all of this up took about 5 minutes and was done through a couple of simple web pages. Use of the domain name isn’t just limited to the web site though, its also used by email.</p>
<p>&nbsp;</p>
<h3>Email</h3>
<p>WordPress have a setup web page in place that will do all the domain name configuration needed to accept email for your domain.&nbsp; What’s even better is that they a step by step guide for configuring a Google mailbox to send and receive using your domain name.&nbsp; This is a pretty complicated process but WordPress’s and Google’s configuration pages together make it a 5 minute process.&nbsp; 5 minutes later I had a Google Mail mailbox setup to send and receive email for sqlserverintheevening.com.</p>
<p>&nbsp;</p>
<h3>Event Registration</h3>
<p>I’ve used EventBrite (<a href="http://www.eventbrite.com" target="_blank">link</a>) to meet my venue’s requirements of providing a list of who’s coming to each event.&nbsp; This is a very slick web site which allows you to customise your event listing, the information you require, and more importantly store and provide the lists of who’s attending each of your events.&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<h3>Email Mailing Lists</h3>
<p>Finally, after the event I want to email those who attended and tell them about the next event.&nbsp; For this I use Mail Chimp (<a href="http://www.mailchimp.com" target="_blank">link</a>) and their free service is good enough for almost everyone I’d imagine.&nbsp; The web site does everything you need to create, manage and report on an email “campaign” as they call it and most importantly, people can un-subscribe without my involvement from the list.&nbsp; </p>
<p>The best part about Mail Chimp for me though was it can integrate into my EventBrite events and extract the names and email addresses of everyone who’s attended one of my previous events.&nbsp; That was really straight forward and took about 30 seconds, priceless.&nbsp; I also love being able to see how many emails bounced, were opened and who clicked the web link to the registration site.</p>
<p>&nbsp;</p>
<h3>The Best Part </h3>
<p>There were two best parts for me, firstly all of the services apart from the domain name are free.&nbsp; The vendors sell premium services but the free versions are more than good enough for my SQL Server community event.&nbsp; Secondly, setting everything up and sending my first email to everyone took about an hour, and I never saw an error message or have to resort to reading the help pages.&nbsp; It all just worked.</p>
<p>&nbsp;</p>
<p>Finally, I should clarify that for everyone who’s been emailed by me I’ve got multiple ways for them to opt out and to never get an email from me again, you should always do that too.&nbsp; Mail Chimp is almost too helpful in making sure you don’t spam people.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=399&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/04/03/community-event-leader-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>How many per-core licenses do I need?</title>
		<link>http://gavinpayneuk.com/2012/04/01/how-many-per-core-licenses-do-i-need/</link>
		<comments>http://gavinpayneuk.com/2012/04/01/how-many-per-core-licenses-do-i-need/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 20:45:49 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=394</guid>
		<description><![CDATA[&#160; With SQL Server 2012, your licensing requirements can choose to use or be required to use a per-core model depending on the edition you’re deploying. This is a change to previous editions which used a per-CPU socket model that &#8230; <a href="http://gavinpayneuk.com/2012/04/01/how-many-per-core-licenses-do-i-need/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=394&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<p>With SQL Server 2012, your licensing requirements can choose to use or be required to use a per-core model depending on the edition you’re deploying. This is a change to previous editions which used a per-CPU socket model that made counting how many per-CPU licences you needed easier – cores and HyperThreading didn’t influence the CPU socket count.  Any complications which people did have typically came from running SQL Server in a virtualised environment, was a vCPU a socket or did licensing related to the host’s CPU configuration etc.</p>
<p>SQL Server now shares with us for the first time in 2012 its understanding of the server’s CPU configuration on start-up.  In the first few entries in the errorlog you’ll see an entry like these:</p>
<p><span style="font-family:Courier New;">SQL Server detected 1 sockets with 4 cores per socket and 4 logical processors per socket, 4 total logical processors; using 4 logical processors based on SQL Server licensing. This is an informational message; no user action is required.</span></p>
<p>This doesn’t replace the need for accurate licensing purchases based on the hardware architecture you’re deploying but it should at least help you understand what SQL Server’s view of the hardware looks like.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=394&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/04/01/how-many-per-core-licenses-do-i-need/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>Decoding an affinity mask</title>
		<link>http://gavinpayneuk.com/2012/03/07/decoding-an-affinity-mask/</link>
		<comments>http://gavinpayneuk.com/2012/03/07/decoding-an-affinity-mask/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 21:54:15 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=390</guid>
		<description><![CDATA[Recently, in preparation for my SQLBits NUMA internals session I began looking at some of the SQLOS DMVs and trying to understand how their contents directly related to the physical server architecture that SQL Server was running on. While their &#8230; <a href="http://gavinpayneuk.com/2012/03/07/decoding-an-affinity-mask/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=390&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Recently, in preparation for my SQLBits NUMA internals session I began looking at some of the SQLOS DMVs and trying to understand how their contents directly related to the physical server architecture that SQL Server was running on.</p>
<p>While their contents used regular terms such as node and affinity mask the results were often in an “internals” format that can be distracting to the human reader.&nbsp; An example of this is the DMV <font face="Courier New">sys.dm_os_nodes</font> (link to Technet <a href="http://technet.microsoft.com/en-us/library/bb510628%28v=sql.110%29.aspx" target="_blank">here</a>), or more specifically the column <font face="Courier New">cpu_affinity_mask</font> which returns a bigint value that bears no resemblance to the server’s hardware configuration.&nbsp; Although, as many of you will probably know, the bigint value is a decimal representation of a bitmask that represents the processor value.&nbsp; To show what I mean, below is an example of the output from a server we manage:</p>
<table border="0" cellspacing="0" cellpadding="2" width="399">
<tbody>
<tr>
<td valign="top" width="173"><strong>NUMA Node</strong></td>
<td valign="top" width="224"><strong>CPU Mask – Decimal</strong></td>
</tr>
<tr>
<td valign="top" width="232">0</td>
<td valign="top" width="224"><font face="Courier New">65535</font></td>
</tr>
<tr>
<td valign="top" width="255"><font face="Courier New">1</font></td>
<td valign="top" width="224"><font face="Courier New">4294901760</font></td>
</tr>
<tr>
<td valign="top" width="268"><font face="Courier New">2</font></td>
<td valign="top" width="224"><font face="Courier New">281470681743360</font></td>
</tr>
<tr>
<td valign="top" width="275"><font face="Courier New">3</font></td>
<td valign="top" width="224"><font face="Courier New">-281474976710656</font></td>
</tr>
</tbody>
</table>
<p>So how do we turn the –281474976710656 value into something meaningful?&nbsp; The answer comes from a query I found on the SQLServerCentral forums which I then modified, the original link is <a href="http://www.sqlservercentral.com/Forums/Topic483076-338-1.aspx#bm483892" target="_blank">here</a>, while my version is shown below:</p>
<p><font face="Courier New"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">
<p>with</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">bits</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">as<br /></font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">(</font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 7 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">as</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">n</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas">128 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">as</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">e</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 6</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 64 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all<br /></font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 5</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 32 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 4</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 16 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 3</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 8 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all<br /></font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 2</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 4 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 1</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 2 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 0</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 1</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">),</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">bytes</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">as</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><br />(</font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 1 </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">m</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 2 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 3 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all<br /></font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 4 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 5 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 6 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all<br /></font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 7 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 8 </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">union</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">all</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 9</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">)<br /></font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select </font></font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">node_id</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">cpu_affinity_mask</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,<br />(</font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">select</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#ff00ff" size="2" face="Consolas"><font color="#ff00ff" size="2" face="Consolas"><font color="#ff00ff" size="2" face="Consolas">convert</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">(</font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">varchar</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">(</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas">3</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">),</font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"> </font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">((</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#ff00ff" size="2" face="Consolas"><font color="#ff00ff" size="2" face="Consolas"><font color="#ff00ff" size="2" face="Consolas">convert</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">(</font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">tinyint</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,<br /></font></font></font><font color="#ff00ff" size="2" face="Consolas"><font color="#ff00ff" size="2" face="Consolas"><font color="#ff00ff" size="2" face="Consolas">substring</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">(</font></font></font><font color="#ff00ff" size="2" face="Consolas"><font color="#ff00ff" size="2" face="Consolas"><font color="#ff00ff" size="2" face="Consolas">convert</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">(</font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">binary</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">(</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas">9</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">),</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">cpu_affinity_mask</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">),</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">m</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> 1</font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">))<br />&amp;</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">e</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">))</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">/</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">e</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">)</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">as</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">[text()]<br /></font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">from</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">bits<br /></font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">cross</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">join</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">bytes<br /></font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">order</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">by</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">m</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">,</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">n</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">desc<br />for</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">xml</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">path</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">(</font></font></font><font color="#ff0000" size="2" face="Consolas"><font color="#ff0000" size="2" face="Consolas"><font color="#ff0000" size="2" face="Consolas">&#8221;</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">)<br />)</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">as</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">binaryString<br /></font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">from</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008000" size="2" face="Consolas"><font color="#008000" size="2" face="Consolas"><font color="#008000" size="2" face="Consolas">sys</font></font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">.</font></font></font><font color="#008000" size="2" face="Consolas"><font color="#008000" size="2" face="Consolas"><font color="#008000" size="2" face="Consolas">dm_os_nodes<br /></font></font></font><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas"><font color="#0000ff" size="2" face="Consolas">where</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas"><font color="#008080" size="2" face="Consolas">node_id</font></font></font><font size="2" face="Consolas"><font color="#000000" size="2" face="Consolas"> </font></font><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas"><font color="#808080" size="2" face="Consolas">&lt;</font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas"><font color="#000000"> 64</font></p>
<p></font></font></font></font></font></font><font size="2" face="Consolas"><font size="2" face="Consolas">
<p></font></font>This then gives the more human readable results as follows:</p>
<p>
<table border="0" cellspacing="0" cellpadding="2" width="687">
<tbody>
<tr>
<td valign="top" width="136"><strong>NUMA Node</strong></td>
<td valign="top" width="549"><strong>CPU Mask –Binary</strong></td>
</tr>
<tr>
<td valign="top" width="136">0</td>
<td valign="top" width="549"><font face="Courier New">000000000000000000000000000000000000000000000000<strong>1111111111111111</strong></font></td>
</tr>
<tr>
<td valign="top" width="136"><font face="Courier New">1</font></td>
<td valign="top" width="549"><font face="Courier New">00000000000000000000000000000000<strong>1111111111111111</strong>0000000000000000</font></td>
</tr>
<tr>
<td valign="top" width="136"><font face="Courier New">2</font></td>
<td valign="top" width="549"><font face="Courier New">0000000000000000<strong>1111111111111111</strong>00000000000000000000000000000000</font></td>
</tr>
<tr>
<td valign="top" width="136"><font face="Courier New">3</font></td>
<td valign="top" width="549"><font face="Courier New"><strong>1111111111111111</strong>000000000000000000000000000000000000000000000000</font></td>
</tr>
</tbody>
</table>
<p>For those not familiar with the output, each “bit” is a logical CPU within the server.&nbsp; In this example, the bits set to 1 represent logical CPUs which are assigned to a specific NUMA node, more about that in my SQLBits session!</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=390&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/03/07/decoding-an-affinity-mask/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>SQLBits X : NUMA Internals Session</title>
		<link>http://gavinpayneuk.com/2012/01/22/sqlbits-x-numa-internals-session/</link>
		<comments>http://gavinpayneuk.com/2012/01/22/sqlbits-x-numa-internals-session/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 21:11:32 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/?p=386</guid>
		<description><![CDATA[For various (good and positive) reasons I never seem to get the time to write blog articles these days, however with the authoring of my next SQLBits session now on my todo list I thought I’d take a moment to &#8230; <a href="http://gavinpayneuk.com/2012/01/22/sqlbits-x-numa-internals-session/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=386&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>For various (good and positive) reasons I never seem to get the time to write blog articles these days, however with the authoring of my next SQLBits session now on my todo list I thought I’d take a moment to explain the background behind it and what its likely to contain.</p>
<h4>What is NUMA?</h4>
<p>NUMA stands for Non-Uniform Memory Architecture and is a server hardware architecture which any modern server with more than 1 CPU will use.&nbsp; In two sentences, to make servers scale better each CPU in a server is now only directly connected to specific pieces of the server’s physical memory.&nbsp; If a CPU needs to access memory which it isn’t directly connected to it needs to go via a memory controllers, this adds latency to the memory request so in an ideal world modern software should do its best to avoid ever needing to read “foreign memory”.&nbsp; There’s also something called Soft-NUMA which can be misleadingly positioned as being similar to Hard-NUMA, I’ll talk about that more in my session.</p>
<h4>What’s this got to do with SQL Server?</h4>
<p>Today, SQL Server is regularly deployed on servers with several CPUs and large amounts of memory and as a consequence both SQL Server and Windows are NUMA aware.&nbsp; They each do their part in trying to ensure these expensive “foreign” memory requests are kept to a minimum, Windows at the CPU instruction level, SQL Server at the SQLOS scheduler level.&nbsp;&nbsp; </p>
<h4>Curiousness develops</h4>
<p>You can’t influence how SQL Server works in the NUMA world, it all happens deep within the internals, but you can see NUMA “in action”.&nbsp; A lot of information about how SQL Sever is internally load balancing its workload and caches between the server’s NUMA nodes is exposed in the DMVs.&nbsp; And, if you’re anything like me then when you start looking into these DMVs you’ll be curious about what’s actually happening internally.&nbsp; How do parallel queries run across multiple schedulers when there is a “buffer pool” per NUMA node, why does all the memory seem to be assigned to one NUMA etc etc.</p>
<h4>Friday session</h4>
<p>It was these questions which made me curious enough to research the topic for myself earlier this year and I hope for those who come to my session on the Friday in March you’ll leave equally as impressed as I was about how SQL Server “floats” across your server’s motherboard.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=386&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2012/01/22/sqlbits-x-numa-internals-session/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>Through the Virtual Microscope&#8211;SQL Server and Hyper-V</title>
		<link>http://gavinpayneuk.com/2011/11/11/through-the-virtual-microscopesql-server-and-hyper-v/</link>
		<comments>http://gavinpayneuk.com/2011/11/11/through-the-virtual-microscopesql-server-and-hyper-v/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 18:52:51 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/2011/11/11/through-the-virtual-microscopesql-server-and-hyper-v/</guid>
		<description><![CDATA[In my recent SQLBits conference session, Through the Virtual Looking Glass available to watch here, I spoke about monitoring SQL Server in a virtualised environment.  We looked at good and bad contention, where resource pressures which can adversely affect SQL &#8230; <a href="http://gavinpayneuk.com/2011/11/11/through-the-virtual-microscopesql-server-and-hyper-v/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=382&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In my recent SQLBits conference session, Through the Virtual Looking Glass available to watch <a href="http://sqlbits.com/Sessions/Event9/Through_the_virtual_looking_glass" target="_blank">here</a>, I spoke about monitoring SQL Server in a virtualised environment.  We looked at good and bad contention, where resource pressures which can adversely affect SQL Server might come from and most importantly how we can monitor the environment to detect them.</p>
<p>Since then, I’ve been in discussions with some of the Microsoft product team who are focussed on optimising Windows 8 Hyper-V and SQL Server 2012, specifically Guy Bowerman and Serdar Sutay.  We’ve been talking about some of the challenges SQL Server professionals have today working in virtualised environments and how we could resolve them through future product functionality.  An example of a recent change they’ve engineered into the product has been the support for hot-add memory support in the standard edition of SQL Server 2012 when running in virtual environments, this is still an Enterprise Edition only features for physical servers.  This will allow lower end users of SQL Server to still benefit from the Dynamic Memory feature of Windows Server 2008R2 service pack 1.</p>
<p>In both my presentation and conversations with Microsoft I’ve been discussing the importance of knowing as much as we can about the physical host server, its utilisation, the hypervisor’s configuration as well as what’s happening inside the virtual server – the SQL Server component.  To help, Serdar kindly sent me some information about Hyper-V information exposed inside the virtual machine’s registry.</p>
<p>As a result, I’ve written a Powershell script for DBAs which gives a bit more of an insight about the Hyper-V environment SQL Server is running within.  The script can be found at the bottom of this blog article which gives the following information:</p>
<ul>
<li>The hostname of the <strong><em>virtual server </em></strong>the script is running on – for reference purposes.</li>
<li>The hostname of the <strong><em>physical host server </em></strong>the script is running on – this is useful to be able to tell if the virtual server has been Live Migrated to another physical host server without the DBA knowing.  Why?  Well this maybe an issue if the new physical host server is of a much lower spec than the one it was on previously; if SQL Server jobs start running more slowly than they did yesterday then the problem might have nothing to do with SQL Server at all.  Instead, the new host server might be slower or more highly contended.</li>
<li>A check to see whether or not its possible for Hyper-‘s <strong><em>Dynamic Memory </em></strong>feature to be used on the current host server.  While we may not be able to tell as easily whether  Dynamic Memory is actually configured for use, knowing whether or not it could be will at least help with memory related performance troubleshooting.</li>
<li>Finally, the last two checks give information about the <strong><em>physical CPUs </em></strong>in the host server.  This information may not directly be relevant to the performance of the virtual server as CPU resource maybe restricted or contended, but it is a good way to help identify whether you’re using the same physical server as you were yesterday.  If your virtual  server has been moved at least you can tell whether you should be getting the same CPU performance as you were previously.</li>
</ul>
<p>It’s a fairly basic script which I’m sure could fail badly due to its lack of error handling, however it worked as expected from a Powershell session.</p>
<p>The script is below, apologies if the formatting is slightly odd:</p>
<p><span style="font-family:Cordia New;font-size:small;">#Get Hyper-V environment data from the registry<br />
$Path = &#8216;HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters&#8217;<br />
$Key = Get-Item -LiteralPath $path </span></p>
<p><span style="font-family:Cordia New;font-size:small;">$PhysicalHostname = $Key.GetValue(&#8216;PhysicalHostName&#8217;)<br />
$VirtualHostname  = $Key.GetValue(&#8216;VirtualMachineName&#8217;)<br />
$OsMajor          = $Key.GetValue(&#8216;HostingSystemOsMajor&#8217;)<br />
$OsMinor          = $Key.GetValue(&#8216;HostingSystemOsMinor&#8217;)<br />
$ServPack         = $Key.GetValue(&#8216;HostingSystemSpMajor&#8217;)</span></p>
<p><span style="font-family:Cordia New;font-size:small;">if (($OSMajor -ge &#8217;6&#8242;) -and ($OSMinor -ge &#8217;1&#8242;) -and ($ServPack -ge &#8217;1&#8242;))<br />
{ $DynamicMemory = &#8216;Supported&#8217;}<br />
else<br />
{ $DynamicMemory = &#8216;Not supported&#8217;}</span></p>
<p><span style="font-family:Cordia New;font-size:small;">#Get physical CPU information</span><br />
<span style="font-family:Cordia New;font-size:small;">$CPUName = (Get-WMIObject Win32_Processor).Name<br />
$CPUMHz  = (Get-WMIObject Win32_Processor).MaxClockSpeed</span></p>
<p><span style="font-family:Cordia New;font-size:small;">write-host &#8216;The hostname of this virtual machine is               :&#8217; $VirtualHostname<br />
write-host &#8216;The hostname of the physical host server is           :&#8217; $PhysicalHostname<br />
write-host &#8221;</span></p>
<p><span style="font-family:Cordia New;font-size:small;">write-host &#8216;Hyper-V Dynamic Memory support on this host server is :&#8217; $DynamicMemory<br />
write-host &#8221;</span></p>
<p><span style="font-family:Cordia New;font-size:small;">write-host &#8216;The CPU type in the physical host server is           :&#8217; $CPUName<br />
write-host &#8216;The CPU speed in the physical host server is          :&#8217; $CPUMHz &#8216;MHz&#8217;</span></p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=382&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2011/11/11/through-the-virtual-microscopesql-server-and-hyper-v/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
		<item>
		<title>Upgrading your development skills</title>
		<link>http://gavinpayneuk.com/2011/10/10/upgrading-your-development-skills/</link>
		<comments>http://gavinpayneuk.com/2011/10/10/upgrading-your-development-skills/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 21:41:33 +0000</pubDate>
		<dc:creator>gavinpayneuk</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">https://gavinpayneuk.wordpress.com/2011/10/10/upgrading-your-development-skills/</guid>
		<description><![CDATA[For those of us in the SQL Server community who are preparing for Denali or even working with it already SQL Server 2008 R2 feels old. Whenever I work with clients still using 2005 or even 2000 I’m reminded that &#8230; <a href="http://gavinpayneuk.com/2011/10/10/upgrading-your-development-skills/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=381&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>For those of us in the SQL Server community who are preparing for Denali or even working with it already SQL Server 2008 R2 feels old. Whenever I work with clients still using 2005 or even 2000 I’m reminded that using 2008 and onwards is still just a dream in some environments. Fortunately, for a lot of those clients upgrades eventually do happen, in fact right now I’m running several upgrade projects to get systems on to SQL Server 2008.
<p>Moving to SQL Server 2008 is a good move for them and while there maybe more features to use we also hope that out of the box SQL Server 2008 is more reliable, secure and scalable than previous versions. That brings us to the subject of new features. Unless we use those new features we’ll never benefit from them being there, but we can’t use them if we don’t know how to.
<p>That subject is the purpose behind a training course I deliver which is now being made available to the general public for the first time in November. The 2 day course aims to teach developers familiar with SQL Server 2005 and sometimes just 2000 about what’s new for them in 2008. I enrich what could otherwise be just another “what’s new” book chapter by combining feature overviews with demos, labs and experiences from the field.
<p>In summary, upgrading to a new version of SQL Server is a good move, but can be even better if you upgrade your team’s skillsets at the same time. And yes, Denali is coming soon but for a fair number of businesses running SQL Server, 2008 is still either a goal or a recent investment here for a few more years yet.
<p>For those interested in knowing more about my public training course, please see the link <a href="http://www.regonline.co.uk/Register/Checkin.aspx?EventID=1016685&amp;trackingcode=COEO" target="_blank">here</a>.</p>
<br />  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gavinpayneuk.com&#038;blog=10807622&#038;post=381&#038;subd=gavinpayneuk&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://gavinpayneuk.com/2011/10/10/upgrading-your-development-skills/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19d95dab4c315cdb14caaa8a21e15dba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">gavinpayneuk</media:title>
		</media:content>
	</item>
	</channel>
</rss>
