<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://consultingblogs.emc.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Claypole's World - The SQL Server Side</title><subtitle type="html">Concerning development of bespoke applications and database administration.</subtitle><id>http://consultingblogs.emc.com/jamesrowlandjones/atom.aspx</id><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/default.aspx" /><link rel="self" type="application/atom+xml" href="http://consultingblogs.emc.com/jamesrowlandjones/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.20423.1">Community Server</generator><updated>2009-11-03T08:05:26Z</updated><entry><title>Denali : Using EXECUTE WITH RESULT SETS (example using SSIS Source Adaptors)</title><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/11/16/denali-using-execute-with-result-sets-example-using-ssis-source-adaptors.aspx" /><id>http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/11/16/denali-using-execute-with-result-sets-example-using-ssis-source-adaptors.aspx</id><published>2010-11-16T15:36:00Z</published><updated>2010-11-16T15:36:00Z</updated><content type="html">&lt;p&gt;One of my pet peeves about stored procedures is the lack of clarity they provide a user on the data types of returned columns.&amp;nbsp; This is especially applicable when the column returned has been calculated. Consider a statement such as this SELECT 10.0/5. It’s not obvious what that data type is. Now consider the fact that as the SQL developer I might decide to change the statement to be SELECT 10/5. &lt;/p&gt; &lt;p&gt;As I am sure you know the first returns a decimal and the second an int.&amp;nbsp; The interface therefore is inherently weak. There is nothing in the stored procedure programming paradigm that hardens that interface. Given that the result set of a stored procedure is actually a public interface or external contract that could potentially be consumed by any number of data consumers I’ve often thought of this as a bit of problem.&amp;nbsp; The only way to work around this lack of hardening is to place an explicit cast on each column to guarantee that regardless of the change to the column the data type remains consistent i.e. SELECT CAST(10/5 as decimal(8,6)). Note though that this isn’t a complete solution – it doesn’t enable us to say anything about nullability.&lt;/p&gt; &lt;p&gt;This has now changed in Denali.&amp;nbsp; Denali offers an extension to the EXECUTE statement called with RESULT SETS. &lt;/p&gt; &lt;p&gt;I won’t bore you with a re-iteration of books online however that article is available &lt;a href="http://msdn.microsoft.com/en-us/library/ms188332(v=SQL.110).aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;A modified example (Books Online version returns an error) from the CTP1 version of Books Online is below.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;USE &lt;/span&gt;&lt;span style="color:teal;"&gt;AdventureWorks2008R2&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

EXEC &lt;/span&gt;&lt;span style="color:teal;"&gt;uspGetEmployeeManagers &lt;/span&gt;16
&lt;span style="color:blue;"&gt;WITH &lt;/span&gt;&lt;span style="color:teal;"&gt;RESULT &lt;/span&gt;&lt;span style="color:blue;"&gt;SETS
&lt;/span&gt;&lt;span style="color:gray;"&gt;( 
   (&lt;/span&gt;&lt;span style="color:teal;"&gt;[Reporting Level] &lt;/span&gt;&lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[ID of Employee] &lt;/span&gt;&lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Employee First Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;75&lt;span style="color:gray;"&gt;) NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Employee Last Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;150&lt;span style="color:gray;"&gt;) NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Employee ID of Manager] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;max&lt;/span&gt;&lt;span style="color:gray;"&gt;)  NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Manager First Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;75&lt;span style="color:gray;"&gt;) NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Manager Last Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;150&lt;span style="color:gray;"&gt;) NOT NULL )
);
&lt;/span&gt;&lt;font face="Tahoma"&gt;N.B. I have modified the data types for illustration purposes from the actual values.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;font face="Tahoma"&gt;What can we see from this?&lt;/font&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;The column names have been changed 
&lt;li&gt;The data types have been set 
&lt;li&gt;Nullability can be enforced &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;A good step forward I think you’ll agree. This is especially handy in SSIS as I can use this much friendlier syntax when creating queries against data sources. &lt;/p&gt;
&lt;p&gt;All you need to do is drop in the query above:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb2_704E6C70.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image_thumb2" border="0" alt="image_thumb2" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb2_thumb_5EAE5BD8.png" width="587" height="576"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and either press preview or check out columns page (below) to see column changes&lt;/p&gt;
&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb1_74B4C76A.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image_thumb1" border="0" alt="image_thumb1" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb1_thumb_794AD224.png" width="586" height="575"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The advanced editor shows us the data type changes&lt;/p&gt;
&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb3_68EF5A6B.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image_thumb3" border="0" alt="image_thumb3" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb3_thumb_2C0AB2CC.png" width="586" height="619"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That’s very cool I think. However this hasn’t resolved the stored procedure problem. After all I can still call this:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;EXEC &lt;/span&gt;&lt;span style="color:teal;"&gt;uspGetEmployeeManagers &lt;/span&gt;16&lt;/pre&gt;
&lt;p&gt;and get the original data types. &lt;/p&gt;
&lt;p&gt;This is still useful but does mean one would need to carry round and include the interface definition wherever the stored procedure was used. &lt;/p&gt;
&lt;p&gt;Not a great single version of the truth story there then.&lt;/p&gt;
&lt;p&gt;However, I can also augment the stored procedure to create that interface like so:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;ALTER PROCEDURE &lt;/span&gt;&lt;span style="color:teal;"&gt;[dbo]&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;[uspGetEmployeeManagers]
    @BusinessEntityID [int]
&lt;/span&gt;&lt;span style="color:blue;"&gt;AS

SET NOCOUNT ON&lt;/span&gt;&lt;span style="color:gray;"&gt;;

&lt;/span&gt;&lt;span style="color:blue;"&gt;EXECUTE &lt;/span&gt;&lt;span style="color:maroon;"&gt;sp_executesql 
    &lt;/span&gt;&lt;span style="color:red;"&gt;N'-- Use recursive query to list out all Employees required for a particular Manager
    WITH [EMP_cte]
        ([BusinessEntityID]
        ,[OrganizationNode]
        ,[FirstName]
        ,[LastName]
        ,[JobTitle]
        ,[RecursionLevel]
        ) -- CTE name and columns
    AS (
        SELECT     e.[BusinessEntityID]
                ,e.[OrganizationNode]
                ,p.[FirstName]
                ,p.[LastName]
                ,e.[JobTitle]
                ,0 -- Get the initial Employee
        FROM    [HumanResources].[Employee] e 
        JOIN    [Person].[Person] as p        
        ON        p.[BusinessEntityID] = e.[BusinessEntityID]
        WHERE    e.[BusinessEntityID] = @BusinessEntityID
        UNION ALL
        SELECT     e.[BusinessEntityID]
                ,e.[OrganizationNode]
                ,p.[FirstName]
                ,p.[LastName]
                ,e.[JobTitle]
                ,[RecursionLevel] + 1 -- Join recursive member to anchor
        FROM    [HumanResources].[Employee] e 
        JOIN    [EMP_cte]                
        ON        e.[OrganizationNode] = [EMP_cte].[OrganizationNode].GetAncestor(1)
        JOIN    [Person].[Person] p        
        ON        p.[BusinessEntityID] = e.[BusinessEntityID]
    )
    -- Join back to Employee to return the manager name 
    SELECT     [EMP_cte].[RecursionLevel]
            ,[EMP_cte].[BusinessEntityID]
            ,[EMP_cte].[FirstName]
            ,[EMP_cte].[LastName]
            ,[EMP_cte].[OrganizationNode].ToString() AS [OrganizationNode]
            ,p.[FirstName] AS ''ManagerFirstName''
            ,p.[LastName] AS ''ManagerLastName''  -- Outer select from the CTE
    FROM    [EMP_cte] 
    JOIN    [HumanResources].[Employee] e 
    ON        [EMP_cte].[OrganizationNode].GetAncestor(1) = e.[OrganizationNode]
    JOIN    [Person].[Person] p 
    ON        p.[BusinessEntityID] = e.[BusinessEntityID]
    ORDER BY [RecursionLevel]
            ,[EMP_cte].[OrganizationNode].ToString()
    OPTION (MAXRECURSION 25)'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;N'@BusinessEntityID [int]'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:teal;"&gt;@BusinessEntityID &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:teal;"&gt;@BusinessEntityID
&lt;/span&gt;&lt;span style="color:blue;"&gt;WITH &lt;/span&gt;&lt;span style="color:teal;"&gt;RESULT &lt;/span&gt;&lt;span style="color:blue;"&gt;SETS
&lt;/span&gt;&lt;span style="color:gray;"&gt;( 
   (&lt;/span&gt;&lt;span style="color:teal;"&gt;[Reporting Level] &lt;/span&gt;&lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[ID of Employee] &lt;/span&gt;&lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Employee First Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;75&lt;span style="color:gray;"&gt;) NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Employee Last Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;150&lt;span style="color:gray;"&gt;) NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Employee ID of Manager] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;max&lt;/span&gt;&lt;span style="color:gray;"&gt;)  NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Manager First Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;75&lt;span style="color:gray;"&gt;) NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Manager Last Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;150&lt;span style="color:gray;"&gt;) NOT NULL )
);
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="color:gray;"&gt;&lt;font color="#000000" face="Tahoma"&gt;Instinctively I like this. I like the separation. I feel like an interface developer and a contract has been included with this proc.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="color:gray;"&gt;&lt;font color="#000000" face="Tahoma"&gt;The casts are not cluttering up the rest of the syntax and neither are the aliases.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:gray;"&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;&lt;font color="#000000" face="Tahoma"&gt;I am not limited to a single result set either. &lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color:gray;"&gt;&lt;font color="#000000" face="Tahoma"&gt;I can even say that no result will be returned by using the WITH RESULTS NONE option.&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="color:gray;"&gt;&lt;font color="#000000" face="Tahoma"&gt;However, WITH RESULT SETS will not allow you to return a different number of columns to the actual procedure. Every column must be handled.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:gray;"&gt;&lt;font color="#000000" face="Tahoma"&gt;So a request such as this :&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;EXEC &lt;/span&gt;&lt;span style="color:teal;"&gt;uspGetEmployeeManagers &lt;/span&gt;16
&lt;span style="color:blue;"&gt;WITH &lt;/span&gt;&lt;span style="color:teal;"&gt;RESULT &lt;/span&gt;&lt;span style="color:blue;"&gt;SETS
&lt;/span&gt;&lt;span style="color:gray;"&gt;( 
   (&lt;/span&gt;&lt;span style="color:teal;"&gt;[Reporting Level] &lt;/span&gt;&lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;NOT NULL,
    &lt;/span&gt;&lt;span style="color:green;"&gt;--[ID of Employee] int NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Employee First Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;75&lt;span style="color:gray;"&gt;) NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Employee Last Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;150&lt;span style="color:gray;"&gt;) NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Employee ID of Manager] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;max&lt;/span&gt;&lt;span style="color:gray;"&gt;)  NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Manager First Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;75&lt;span style="color:gray;"&gt;) NOT NULL,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;[Manager Last Name] &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;150&lt;span style="color:gray;"&gt;) NOT NULL )
);
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="color:gray;"&gt;&lt;font color="#000000" face="Tahoma"&gt;Returns an error like this: &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;font color="#ff0000"&gt;Msg 11537, Level 16, State 1, Procedure uspGetEmployeeManagers, Line 9
EXECUTE statement failed because its WITH RESULT SETS clause 
specified 6 column(s) for result set number 1
, but the statement sent 7 column(s) at run time.
&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;&lt;font face="Tahoma"&gt;I haven’t yet tested this for performance but a quick check against the query plans shows no obvious differences between the two query plans.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Tahoma"&gt;This does suggest that the WITH RESULT SETS rules are applied after the fact and that there might be some cost in that translation. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Tahoma"&gt;However, I will save that particular investigation for later.&lt;/font&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;font face="Tahoma"&gt;Cheers, James&lt;/font&gt;&lt;/pre&gt;&lt;img src="http://consultingblogs.emc.com/aggbug.aspx?PostID=17916" width="1" height="1"&gt;</content><author><name>James.Rowland-Jones</name><uri>http://consultingblogs.emc.com/members/James.Rowland-Jones.aspx</uri></author><category term="SSIS" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SSIS/default.aspx" /><category term="SQL Server Integration Services" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+Integration+Services/default.aspx" /><category term="SQL Server" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server/default.aspx" /><category term="Denali" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Denali/default.aspx" /></entry><entry><title>Focus on Fast Track : My SQLBits VI Presentation</title><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/04/25/focus-on-fast-track-my-sqlbits-vi-presentation.aspx" /><id>http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/04/25/focus-on-fast-track-my-sqlbits-vi-presentation.aspx</id><published>2010-04-25T20:01:12Z</published><updated>2010-04-25T20:01:12Z</updated><content type="html">&lt;p&gt;For those of you interested in the principles of Fast Track I thought it’d be worth putting out my &lt;a href="http://www.sqlbits.com/Agenda/event6/Fast_Track_Foundations__Get_Serious_about_Sequential_I_O/default.aspx" target="_blank"&gt;SQLBits VI&lt;/a&gt; presentation slide deck on my blog. It will of course be available from the &lt;a href="http://www.sqlbits.com" target="_blank"&gt;SQLBits&lt;/a&gt; website in due course. In about 6 weeks time that will be the better resource as the session recordings will be available at that time. Only then will you be able to truly relive the JRJ and &lt;a href="http://www.sqlbits.com/Gallery/Images/SpeakerPhotos/102_0020.JPG" target="_blank"&gt;naked Neo&lt;/a&gt; experience. I expect both these resources (the slides and the session recording) will be available from &lt;a href="http://www.sqlbits.com/Agenda/event6/Fast_Track_Foundations__Get_Serious_about_Sequential_I_O/default.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For now though you’ll have to make do with the slides.&amp;#160; &lt;a href="http://consultingblogs.emc.com/simonmunro/" target="_blank"&gt;Simon Munro&lt;/a&gt; upped the ante with some natty embed from Slide Share. Imitation is still the best form of flattery (even though his slides are way cooler) and so I have gone for something remarkably similar.&lt;/p&gt;  &lt;div style="width:425px;" id="__ss_3850476"&gt;&lt;strong style="margin:12px 0px 4px;display:block;"&gt;&lt;a title="Fast track foundations getting serious about sequential io" href="http://www.slideshare.net/jrowlandjones/fast-track-foundations-getting-serious-about-sequential-io"&gt;Fast track foundations getting serious about sequential io&lt;/a&gt;&lt;/strong&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fasttrackfoundationsgettingseriousaboutsequentialio-100425142644-phpapp02&amp;amp;stripped_title=fast-track-foundations-getting-serious-about-sequential-io" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fasttrackfoundationsgettingseriousaboutsequentialio-100425142644-phpapp02&amp;amp;stripped_title=fast-track-foundations-getting-serious-about-sequential-io" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;    &lt;div style="padding-bottom:12px;padding-left:0px;padding-right:0px;padding-top:5px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/jrowlandjones"&gt;jrowlandjones&lt;/a&gt;.&lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Finally a big thank you to my friend and &lt;a href="http://www.sqlbits.com/about/WhosWho.aspx" target="_blank"&gt;SQLBits Committee&lt;/a&gt; colleague &lt;a href="http://www.konesans.com" target="_blank"&gt;Allan Mitchell&lt;/a&gt; for teaming up with me and providing the SSIS demonstrations that formed the second half of this presentation.&amp;#160; He might think I have a slightly perverse interpretation of the word “team” after being subjected to persistent name calling throughout my section of the presentation. Actually I think he rather enjoyed it… Although it’s not often you see &lt;a href="http://www.sqlis.com" target="_blank"&gt;Allan&lt;/a&gt; struggling for words. :o)&amp;#160; See for yourself when the videos are released on &lt;a href="http://www.sqlbits.com"&gt;www.sqlbits.com&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;Cheers, JRJ &lt;/p&gt;&lt;img src="http://consultingblogs.emc.com/aggbug.aspx?PostID=17145" width="1" height="1"&gt;</content><author><name>James.Rowland-Jones</name><uri>http://consultingblogs.emc.com/members/James.Rowland-Jones.aspx</uri></author><category term="SQL Server" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server/default.aspx" /><category term="SQL Server 2008" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+2008/default.aspx" /><category term="Fast Track Data Warehousing" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Fast+Track+Data+Warehousing/default.aspx" /></entry><entry><title>Focus on Fast Track : Understanding the –E Startup Parameter</title><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/04/25/focus-on-fast-track-understanding-the-e-startup-parameter.aspx" /><id>http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/04/25/focus-on-fast-track-understanding-the-e-startup-parameter.aspx</id><published>2010-04-25T06:12:42Z</published><updated>2010-04-25T06:12:42Z</updated><content type="html">&lt;p&gt;&lt;/p&gt;  &lt;p&gt;One of my focuses at the moment is the work that Microsoft have done with various hardware providers to deliver “Fast Track” – A reference architecture for SQL Server Data Warehousing that delivers predictable blistering performance on prescribed commodity hardware. Sounds great I think you’ll agree.&amp;#160; What is even better is that the architecture comes with a series of best practices on how to make the most of your Fast Track system.&amp;#160; &lt;/p&gt;  &lt;p&gt;As you might expect there are some SQL Server settings you need to change to make.&amp;#160; However, I am impressed by the fact that the team have gone further than this.&amp;#160; There is also a focus on the build of your solution and how you should load data into a Fast Track Data Warehouse.&lt;/p&gt;  &lt;p&gt;It’s inspired me to get blogging again and I’ve decided to write a series called “Focus on Fast Track”.&amp;#160; This should follow on nicely for those of you who attended my session at SQLBits VI entitled “Fast Track Foundations : Serious about Sequential I/O”. If you didn’t see this presentation it shouldn’t matter too much – especially as all the sessions are recorded at SQLBits and are made available for free over the internet once all the editing / post production work has been done.&amp;#160; &lt;/p&gt;  &lt;p&gt;Fast Track is important an important step for Microsoft. They are helping customers get the most from SQL Server and not just from the software perspective.&amp;#160; What is being offered is clear deployment solution for data warehousing.&amp;#160; Tackling the physical deployment challenge with real hardware specifications is a big step forward. I hope it is the first of many.&lt;/p&gt;  &lt;p&gt;In this first post I’d like to talk about one of the recommended settings for SQL Server in a Fast Track System.&amp;#160; The use of the –E startup parameter. Actually its very relevant to all SQL Server Data Warehousing scenarios.&amp;#160; It has also had a chequered past in terms of how this parameter has been documented. I’d therefore like to try and bring a new insight into what this parameter does but also why it is important.&lt;/p&gt;  &lt;h1&gt;Life without –E&lt;/h1&gt;  &lt;p&gt;Before identifying what –E does or doesn’t do I think it would be helpful to clearly state what happens when –E has not been configured on a SQL Server.&lt;/p&gt;  &lt;p&gt;Imagine a Database with a Primary and Secondary File Group. The Primary contains a single file and only holds the internal tables etc and the secondary hold the user data.&amp;#160; The secondary file group contains multiple files that are evenly sized and spread across multiple LUNs.&amp;#160; It would look something like the database below.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE DATABASE &lt;/span&gt;[EParam] &lt;span style="color:blue;"&gt;ON  PRIMARY 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam.mdf' 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;51200KB 
    &lt;span style="color:gray;"&gt;,&lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNLIMITED
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;) 
    ,&lt;/span&gt;FILEGROUP [Data]  &lt;span style="color:blue;"&gt;DEFAULT 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam1'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam1.ndf' 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;10240KB 
    &lt;span style="color:gray;"&gt;,&lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNLIMITED
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB
    &lt;span style="color:gray;"&gt;)
    ,
    (&lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam2'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam2.ndf' 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;10240KB 
    &lt;span style="color:gray;"&gt;,&lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNLIMITED
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;)
    ,
    (&lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam3'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam3.ndf'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;10240KB 
    &lt;span style="color:gray;"&gt;,&lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNLIMITED
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB
    &lt;span style="color:gray;"&gt;)
    , 
    (&lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam4'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam4.ndf' 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;10240KB 
    &lt;span style="color:gray;"&gt;,&lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNLIMITED
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB
    &lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:magenta;"&gt;LOG &lt;/span&gt;&lt;span style="color:blue;"&gt;ON 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam_log'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam_log.ldf' 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;,&lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;2048GB 
    &lt;span style="color:gray;"&gt;,&lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;10&lt;span style="color:gray;"&gt;%
    )&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;When a database has been laid out as above SQL Server will use “a round robin proportional fill” algorithm to evenly distribute the data.&amp;#160; Every time a table requests an extent from SQL Server it will be satisfied by allocating an extent from the next file in the filegroup. This ensures that the files fill up evenly. Note the round robin is not determined at the table level.&amp;#160; We can see this in the following example script.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;Use &lt;/span&gt;EParam

&lt;span style="color:blue;"&gt;Create Table &lt;/span&gt;NoET1 &lt;span style="color:gray;"&gt;(&lt;/span&gt;ECol1 &lt;span style="color:blue;"&gt;char&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;8000&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;Data&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;Create Table &lt;/span&gt;NoET2 &lt;span style="color:gray;"&gt;(&lt;/span&gt;ECol1 &lt;span style="color:blue;"&gt;char&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;8000&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;Data&lt;span style="color:gray;"&gt;;

&lt;/span&gt;&lt;span style="color:blue;"&gt;declare &lt;/span&gt;@cnt &lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;0

&lt;span style="color:blue;"&gt;While &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;&amp;lt;&lt;/span&gt;8
&lt;span style="color:blue;"&gt;BEGIN
    Insert into &lt;/span&gt;NoET1
    &lt;span style="color:blue;"&gt;Values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;REPLICATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'X'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;8000&lt;span style="color:gray;"&gt;));
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;Set &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;= &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;+&lt;/span&gt;1
&lt;span style="color:blue;"&gt;END
GO
declare &lt;/span&gt;@cnt &lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;0

&lt;span style="color:blue;"&gt;While &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;&amp;lt;&lt;/span&gt;8
&lt;span style="color:blue;"&gt;BEGIN
    Insert into &lt;/span&gt;NoET2
    &lt;span style="color:blue;"&gt;Values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;REPLICATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'X'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;8000&lt;span style="color:gray;"&gt;));
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;Set &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;= &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;+&lt;/span&gt;1
&lt;span style="color:blue;"&gt;END
GO
declare &lt;/span&gt;@cnt &lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;0

&lt;span style="color:blue;"&gt;While &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;&amp;lt;&lt;/span&gt;8
&lt;span style="color:blue;"&gt;BEGIN
    Insert into &lt;/span&gt;NoET1
    &lt;span style="color:blue;"&gt;Values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;REPLICATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'X'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;8000&lt;span style="color:gray;"&gt;));
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;Set &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;= &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;+&lt;/span&gt;1
&lt;span style="color:blue;"&gt;END
GO
declare &lt;/span&gt;@cnt &lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;0

&lt;span style="color:blue;"&gt;While &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;&amp;lt;&lt;/span&gt;8
&lt;span style="color:blue;"&gt;BEGIN
    Insert into &lt;/span&gt;NoET2
    &lt;span style="color:blue;"&gt;Values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;REPLICATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'X'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;8000&lt;span style="color:gray;"&gt;));
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;Set &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;= &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;+&lt;/span&gt;1
&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;--and so on&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;I’ll use the excellent &lt;a href="http://internalsviewer.codeplex.com" target="_blank"&gt;Internals Viewer&lt;/a&gt; to illustrate what has happened.&lt;/p&gt;

&lt;p&gt;&lt;span style="color:green;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_5CCC7B24.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_616285DE.png" width="680" height="369" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Each time a new extent has been required it has been granted from the next data file in the sequence. This has kept the data distribution even.&lt;/p&gt;

&lt;p&gt;If prop fill operated at the table level then the NoET1 (blue purple) table would have data in all four files but it does not.&lt;/p&gt;

&lt;h2&gt;The Gaps (Slight Tangent)&lt;/h2&gt;

&lt;p&gt;You may be wondering why there is a couple of odd looking things going on in the picture above.&amp;#160; Lets look at file 5 as a good example.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Why are the first set of squares empty? &lt;/li&gt;

  &lt;li&gt;Why are there holes and mixed colours at the start of the allocation process but not at the end &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_4649B6D0.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_06139D56.png" width="608" height="239" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;At the beginning of every file is a bunch of pages that define the file. They are the File Header(5:0), PFS(5:1), GAM(5:2), SGAM(5:3), DCM(5:6) and BCM(5:7) pages. The numbers in brackets relate to the (File Number : Page Number). That takes care of the first eight grey squares.&amp;#160; (5:4) and (5:5) are not allocated.&lt;/p&gt;

&lt;p&gt;The reason the next extent has three colours is because it is a mixed extent. It contains one page from NoET1, six pages from NoET2 and an IAM page. &lt;/p&gt;

&lt;p&gt;IAM pages are distributed as needed through files and manage the extents for a 4 GB range in a given database file for a given allocation unit.&amp;#160; Each Table can have up to three types of allocation unit associated with it – IN_ROW_DATA, LOB_DATA, ROW_OVERFLOW_DATA. All our Rows are IN_ROW_DATA. Furthermore, you will get one IAM page for each file on which an allocation unit has extents.&lt;/p&gt;

&lt;p&gt;So in our case lets quickly look at NoET1. This table only contains IN_ROW_DATA and so is associated with a single allocation unit.&amp;#160; However, it contains data in three files so we have 3 IAM Pages for this table.&lt;/p&gt;

&lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Abbreviation&lt;/strong&gt;&lt;/td&gt;

      &lt;td&gt;&lt;strong&gt;Meaning&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;GAM&lt;/td&gt;

      &lt;td&gt;Global Allocation Map&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;
        &lt;p style="margin-right:0px;" dir="ltr"&gt;SGAM&lt;/p&gt;
      &lt;/td&gt;

      &lt;td&gt;Shared Global Allocation Map&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;DCM&lt;/td&gt;

      &lt;td&gt;Differential Change Map&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;BCM&lt;/td&gt;

      &lt;td&gt;Bulk Changed Map&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;PFS&lt;/td&gt;

      &lt;td&gt;Page Free Space&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Mixed Extents, GAM, SGAM, DCM, BCM and IAM pages are all covered in books online &lt;a href="http://technet.microsoft.com/en-us/library/cc280360.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;Where is the Confusion?&lt;/h1&gt;

&lt;p&gt;The functionality of –E I don’t believe has been completely documented. There is a subtlety to how –E works that hasn’t in my view been adequately described. Even the Fast Track paper references an incorrect/out of date KB Article.&amp;#160; Let’s just highlight the sources of incorrect info and look at what they say.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd459178.aspx" target="_blank"&gt;Fast Track White Paper&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;KB Article &lt;a href="http://support.microsoft.com/kb/329526" target="_blank"&gt;329526&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2008/03/16/sql-2k5-enterprise-edition-mini-feature-1-e-startup-option.aspx" target="_blank"&gt;My Blog&lt;/a&gt; :o( &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd459178.aspx" target="_blank"&gt;Data Loading Performance Guide&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Fast Track White Paper&lt;/h2&gt;

&lt;p&gt;For the clarity of the post I've copied verbatim what the &lt;a href="http://msdn.microsoft.com/en-us/library/dd459178.aspx" target="_blank"&gt;Fast Track White Paper&lt;/a&gt; says:&lt;/p&gt;

&lt;p&gt;“&lt;strong&gt;-E &lt;/strong&gt;should be added to the start-up options. This increases the number of contiguous extents in each file that are allocated to a database table as it grows. This improves sequential disk access. Microsoft Knowledge Base Article &lt;a href="http://support.microsoft.com/kb/329526" target="_blank"&gt;329526&lt;/a&gt; describes the &lt;b&gt;-E&lt;/b&gt; option in more detail.”&lt;/p&gt;

&lt;p&gt;What is wrong with this statement? –E does &lt;strong&gt;not&lt;/strong&gt; increase the number of contiguous extents in each file that are allocated to a table.&amp;#160; Maybe it should – interesting argument -&amp;#160; but it does not. &lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;h2&gt;KB Article 329526&lt;/h2&gt;

&lt;p&gt;The source: &lt;a href="http://support.microsoft.com/kb/329526" target="_blank"&gt;329526&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;“The default allocation mechanism allocates one extent per file, using a round robin proportional fill factor algorithm, before it switches to the next file in the filegroup. 
  &lt;br /&gt;In the SQL Server 64-bit release, you can allocate four consecutive extents per given file, before switching to the next file in the filegroup.”&lt;/p&gt;

&lt;p&gt;So what is wrong with this statement? You do not allocate four consecutive extents per given file before switching to the next file in the filegroup. Certainly not on SQL Server 2008. This KB article hasn’t been updated to say it covers 2008 but I don’t believe the code here changed. I would ignore this KB Article completely.&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;h2&gt;My Blog&lt;/h2&gt;

&lt;p&gt;The SQL Gods may strike me down for this one. Rule no.1 don’t believe everything you read.&amp;#160; I’d referenced &lt;a href="http://support.microsoft.com/kb/329526" target="_blank"&gt;329526&lt;/a&gt; for a series of posts about enterprise options but clearly hadn’t tested this one properly. Naughty Claypole. I would ignore this &lt;a href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2008/03/16/sql-2k5-enterprise-edition-mini-feature-1-e-startup-option.aspx" target="_blank"&gt;post&lt;/a&gt; if I were you.&lt;/p&gt;

&lt;h2&gt;Data Loading Performance Guide&lt;/h2&gt;

&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/dd425070.aspx" target="_blank"&gt;Data Loading Performance Guide&lt;/a&gt; says the following about –E :&lt;/p&gt;

&lt;p&gt;“When SQL Server bulks load into a table allocated to this filegroup, extents are allocated in a round robin fashion. In the default configuration, SQL Server allocates one extent to each file before moving to the next in the chain. It is possible to increase this to 64 extents using the –E startup flag.”&lt;/p&gt;

&lt;table border="1" cellspacing="0" cellpadding="2" width="399"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;File&lt;/strong&gt;&lt;/td&gt;

      &lt;td&gt;&lt;strong&gt;Default Extent&lt;/strong&gt; &lt;strong&gt;Allocation&lt;/strong&gt;&lt;/td&gt;

      &lt;td&gt;&lt;strong&gt;With –E Startup&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;0&lt;/td&gt;

      &lt;td&gt;Extent 1&lt;/td&gt;

      &lt;td&gt;1-64&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;1&lt;/td&gt;

      &lt;td&gt;
        &lt;p style="margin-right:0px;" dir="ltr"&gt;Extent 2&lt;/p&gt;
      &lt;/td&gt;

      &lt;td&gt;65-128&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;0&lt;/td&gt;

      &lt;td&gt;Extent 3&lt;/td&gt;

      &lt;td&gt;129-192 &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;1&lt;/td&gt;

      &lt;td&gt;Extent 4&lt;/td&gt;

      &lt;td&gt;193-256&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td&gt;etc&lt;/td&gt;

      &lt;td&gt;etc&lt;/td&gt;

      &lt;td&gt;etc&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;This is easily the closest to the actual answer. I’d say the wording&amp;#160; “It is possible to increase this to 64 extents using the –E startup flag” is slightly ambiguous and doesn’t deal with a small subtlety which is what I hope to show you in the next section. Suffice it to say that SQL Server does not increase the allocation to 64 extents when –E has been enabled.&amp;#160; Remember an allocation means a reservation. If a table received 64 extents every time it received an allocation then the Total pages column in &lt;a href="http://msdn.microsoft.com/en-us/library/ms189792.aspx" target="_blank"&gt;sys.allocation_units&lt;/a&gt; would be increased by 512 pages. It does not. &lt;/p&gt;

&lt;h1&gt;So what does –E do?&lt;/h1&gt;

&lt;p&gt;-E changes the rate at which the proportional fill occurs. The Data Loading Performance Guide alludes to this – especially in the table.&amp;#160; Rather than moving to the next file after a single extent allocation the movement occurs after 64 extents have been allocated.&amp;#160; These extent allocations do not need to come from a single table. If I was loading two tables in parallel for example and had –E enabled then both tables would consume those 64 extents in the single file before moving on to the next file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-E does not alter the fact that SQL Server allocates one extent at a time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Therefore when –E is enabled you will only see Total Pages increase by 8 pages (1 extent) every time an allocation occurs.&lt;/p&gt;

&lt;p&gt;That sounds like I might be splitting hairs but I believe the distinction is important to understand. It is especially important for Fast Track as Fast Track is completely dependent on sequential I/O for its performance. –E is enabled to enhance the sequential scanning performed in a read-ahead so that more data is contiguously available in a single file.&amp;#160; If two tables that share the same files/filegroup are loaded in parallel then the advantage of –E is removed. The extents will be fragmented and this will in turn reduce the performance of the read-ahead.&lt;/p&gt;

&lt;p&gt;Now to show that I have learned my lesson. Here comes the proof.&lt;/p&gt;

&lt;h1&gt;&lt;/h1&gt;

&lt;h1&gt;&lt;/h1&gt;

&lt;h1&gt;Proving –E Functionality&lt;/h1&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;First of all we need to enable the –E startup parameter.&amp;#160; You can do this by amending the startup parameters on the SQL Server Service.&amp;#160; You should be using SQL Server Configuration Manager to do this.&lt;/p&gt;

&lt;h2&gt;Step 1 : Enable –E Startup Parameter&lt;/h2&gt;

&lt;p&gt;I have actually documented setting the –E startup parameter in another &lt;a href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/04/23/enabling-sql-server-start-up-parameters-a-couple-of-pitfalls.aspx" target="_blank"&gt;post&lt;/a&gt;. There are a couple of pitfalls that I thought were worth bringing out and so if you are unsure about setting Startup Parameters I’d urge you to read it. It includes a step by step guide to setting this correctly (yes you can set it incorrectly).&lt;/p&gt;

&lt;p&gt;However, if you just want to get on with the show make sure you set your startup parameter with exactly &lt;strong&gt;;-E &lt;/strong&gt;at the end of your list of Startup Parameters on the Startup parameter property of the SQL Server Service by using SQL Server Configuration Manager.&lt;/p&gt;

&lt;h2&gt;Step 2 : Create a multi file database&lt;/h2&gt;

&lt;p&gt;Something like this should be fine.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE DATABASE &lt;/span&gt;[EParam] &lt;span style="color:blue;"&gt;ON  PRIMARY 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam.mdf' 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;51200KB 
    &lt;span style="color:gray;"&gt;, &lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNLIMITED
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;)
, &lt;/span&gt;FILEGROUP [Data]  &lt;span style="color:blue;"&gt;DEFAULT 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam1'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam1.ndf' 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;10240KB 
    &lt;span style="color:gray;"&gt;, &lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNLIMITED
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;)
    , 
    ( &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam2'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam2.ndf' 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;10240KB 
    &lt;span style="color:gray;"&gt;, &lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNLIMITED
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;)
    , 
    ( &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam3'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam3.ndf' 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;10240KB 
    &lt;span style="color:gray;"&gt;, &lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNLIMITED
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;)
    , 
    ( &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam4'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam4.ndf' 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;10240KB 
    &lt;span style="color:gray;"&gt;, &lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;UNLIMITED
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;)
     &lt;/span&gt;&lt;span style="color:magenta;"&gt;LOG &lt;/span&gt;&lt;span style="color:blue;"&gt;ON 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'EParam_log'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'C:\Temp\EParam_log.ldf'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;, &lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;2048GB 
    &lt;span style="color:gray;"&gt;, &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;10&lt;span style="color:gray;"&gt;%
    )
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Step 3 : Create two tables&lt;/h2&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;Create Table &lt;/span&gt;ETestTable &lt;span style="color:gray;"&gt;(&lt;/span&gt;ECol1 &lt;span style="color:blue;"&gt;char&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;8000&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;Data&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;Create Table &lt;/span&gt;ETestTable2 &lt;span style="color:gray;"&gt;(&lt;/span&gt;ECol1 &lt;span style="color:blue;"&gt;char&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;8000&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;Data&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Internals Viewer shows that the database is still empty. As no data has yet been added nothing has been allocated.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_04CF0477.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_46863A05.png" width="676" height="380" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;Step 4 : Load in 64 extents of data into ETestTable&lt;/h2&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;declare &lt;/span&gt;@cnt &lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;0

&lt;span style="color:blue;"&gt;While &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;&amp;lt;&lt;/span&gt;504
&lt;span style="color:blue;"&gt;BEGIN
    Insert into &lt;/span&gt;ETestTable
    &lt;span style="color:blue;"&gt;Values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;REPLICATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'X'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;8000&lt;span style="color:gray;"&gt;));
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;Set &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;= &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;+&lt;/span&gt;1
&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Internals Viewer shows that all 504 records went into a single file. The round robin has not yet kicked in.&amp;#160; We load in 504 records because the first extent is mixed extent and our first 8 page requests will be allocated to mixed extents. The situation gets slightly muddled as one of the pages in the first extent is an IAM page meaning that we spill over into a second mixed extent. Therefore the first TWO extents allocated will be mixed extents. However, the 9th page request will allocate a uniform extent as we can see below.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_523B8137.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_5D849574.png" width="676" height="355" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;Step 5 : Load another 64 extents of data into ETestTable&lt;/h2&gt;

&lt;p&gt;This time we have no issue. We can happily load in 512 records for our 64 extents.&lt;/p&gt;

&lt;p&gt;Internals Viewer shows us that EParam3 has allocated all the extents. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_46761438.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_1CB29945.png" width="676" height="355" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Clearly then we can see 64 extents being allocated from one file before the prop fill round robin kicks in.&lt;/p&gt;

&lt;p&gt;However, notice that there is no IAM page in&amp;#160; the EParam3 file. Where is it?&lt;/p&gt;

&lt;p&gt;Well it is actually in the mixed extent on EParam4.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_27FBAD82.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_76ACC321.png" width="676" height="355" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The two pages I have highlighted in the image above are the IAM Pages.&amp;#160; The first IAM page on the left handles allocations from IN_ROW_DATA for ETestTable in the EParam4 file and the IAM page on the right handles IN_ROW_DATA extent allocations from ETestTable in the EParam3 data file.&lt;/p&gt;

&lt;h2&gt;Step 6 : Parallel Load Two Tables&lt;/h2&gt;

&lt;h3&gt;Step 6a : Load 64 Extents into second table &lt;/h3&gt;

&lt;p&gt;First of all let’s even up proceedings and do an initial load into even things up.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;declare &lt;/span&gt;@cnt &lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;0

&lt;span style="color:blue;"&gt;While &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;&amp;lt;&lt;/span&gt;512
&lt;span style="color:blue;"&gt;BEGIN
    Insert into &lt;/span&gt;ETestTable2
    &lt;span style="color:blue;"&gt;Values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;REPLICATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'X'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;8000&lt;span style="color:gray;"&gt;));
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;Set &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;= &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;+&lt;/span&gt;1
&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_59E3283F.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_2FB37A57.png" width="638" height="337" /&gt;&lt;/a&gt;&lt;/pre&gt;

&lt;p&gt;This time we can load in 512 pages in our first attempt to get to a full 64 extents because the previously allocated mixed extents have consumed 5 of our initial 8 page requests. Also note that ETestTable2 needs 2 IAM pages as the data has now spread into two files.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_687DAE57.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_6BCF2032.png" width="637" height="334" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Step 6b : Parallel load ETestTable and ETestTable2 with 32 Extents each&lt;/h3&gt;

&lt;p&gt;To simulate the parallel load I’ve inserted a row for each table in the following script and halved the number of loops:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;declare &lt;/span&gt;@cnt &lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;0

&lt;span style="color:blue;"&gt;While &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;&amp;lt;&lt;font color="#000000"&gt;256&lt;/font&gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;BEGIN
    Insert into &lt;/span&gt;ETestTable
    &lt;span style="color:blue;"&gt;Values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;REPLICATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'X'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;8000&lt;span style="color:gray;"&gt;));
    &lt;/span&gt;&lt;span style="color:blue;"&gt;Insert into &lt;/span&gt;ETestTable2
    &lt;span style="color:blue;"&gt;Values &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;REPLICATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'X'&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;8000&lt;span style="color:gray;"&gt;));    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;Set &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;= &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;+&lt;/span&gt;1
&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;What are the results? &lt;/p&gt;

&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_1345EC9D.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_767C51BA.png" width="655" height="344" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We have a striped and perfectly interleaved set of extents.&amp;#160; &lt;/p&gt;

&lt;p&gt;Clearly then –E does not allocate any more than one extent at a time and does nothing to protect this situation from occurring.&lt;/p&gt;

&lt;p&gt;For completeness let’s just see where those IAM Pages are:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_0080CD19.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_1CCE0F39.png" width="657" height="348" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;They are of course in that mixed extent that we used earlier.&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;h1&gt;&lt;/h1&gt;

&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;So there we have it. Clearly –E does not allocate more than one extent at a time. The change made to SQL Server by adding it as a startup parameter is that round robin behaviour in the &lt;a href="http://msdn.microsoft.com/en-us/library/ms187501.aspx" target="_blank"&gt;proportional fill&lt;/a&gt; algorithm has been affected. The round robin does not change files until 64 extents have been allocated from a single file.&lt;/p&gt;

&lt;p&gt;Many thanks to &lt;a href="http://sqlcat.com/members/tkejser.aspx" target="_blank"&gt;Thomas Kejser&lt;/a&gt; for his help and to &lt;a href="http://henkvandervalk.com/" target="_blank"&gt;Henk van der Valk&lt;/a&gt; for suggesting Internals Viewer as the best way to showcase this behaviour.&lt;/p&gt;

&lt;p&gt;In my next post in the &lt;a href="http://consultingblogs.emc.com/tags/Fast+Track+Data+Warehousing/default.aspx" target="_blank"&gt;Focus on Fast Track&lt;/a&gt; series I will look at the implications of –E before moving on to look at Sequential I/O and the impact –E has on it.&lt;/p&gt;

&lt;p&gt;Until the next time,&lt;/p&gt;

&lt;p&gt;JRJ&lt;/p&gt;&lt;img src="http://consultingblogs.emc.com/aggbug.aspx?PostID=17139" width="1" height="1"&gt;</content><author><name>James.Rowland-Jones</name><uri>http://consultingblogs.emc.com/members/James.Rowland-Jones.aspx</uri></author><category term="SQL Server" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server/default.aspx" /><category term="SQL Server 2008" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+2008/default.aspx" /><category term="Data Warehousing" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Data+Warehousing/default.aspx" /><category term="Fast Track Data Warehousing" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Fast+Track+Data+Warehousing/default.aspx" /><category term="Startup Parameters" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Startup+Parameters/default.aspx" /></entry><entry><title>Enabling SQL Server Start-up Parameters – A Couple of Pitfalls</title><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/04/23/enabling-sql-server-start-up-parameters-a-couple-of-pitfalls.aspx" /><id>http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/04/23/enabling-sql-server-start-up-parameters-a-couple-of-pitfalls.aspx</id><published>2010-04-23T07:55:16Z</published><updated>2010-04-23T07:55:16Z</updated><content type="html">&lt;p&gt;In SQL Server there are a couple of ways to set startup parameters:&amp;#160; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;SQL Server Configuration Manager &lt;/li&gt;    &lt;li&gt;Command Prompt Net start &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Of these only one can be relied upon as a permanent option. That is the Configuration Manager.&amp;#160; I have been toying with startup parameters recently as part of my interest in Fast Track Data Warehousing. I have noticed there are a couple of things you really need to be mindful of when setting these values.&lt;/p&gt;  &lt;p&gt;To illustrate these little gotchas I thought it would be worth while stepping through a scenario whilst configuring the –E startup parameter.&lt;/p&gt;  &lt;h2&gt;How To : Enable –E&lt;/h2&gt;  &lt;p&gt;Below are the steps you need to follow:&lt;/p&gt;  &lt;h3&gt;Step 1 : Fire Up SQL Server Configuration Manager&lt;/h3&gt;  &lt;p&gt;Start &amp;gt;&amp;gt; All Programs &amp;gt;&amp;gt; Microsoft SQL Server 2008 &amp;gt;&amp;gt; Configuration Tools &amp;gt;&amp;gt; SQL Server Configuration Manager &lt;/p&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_57E3295E.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_665E2583.png" width="657" height="525" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Step 2: Right Click on SQL Server Service and Select Advanced Tab&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image4_29797DE4.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image4_thumb_568E6AB2.png" width="590" height="654" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Step 3 : Click on the drop down arrow and update the Start-up Parameter property&lt;/h3&gt;  &lt;p&gt;To set the –E parameter tack &lt;strong&gt;;-E &lt;/strong&gt;to the end of the list of startup parameters&lt;/p&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image8_1CDBAAFB.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image8_thumb_49F097C9.png" width="576" height="431" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Step 4 : Click on Apply and then Clear the warning box&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image30_3928ED1B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image30_thumb_663DD9E9.png" width="534" height="591" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click Apply&lt;/p&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image18_3B35C617.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image18_thumb_4F4EE2A0.png" width="537" height="183" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Click OK&lt;/p&gt;  &lt;h3&gt;Step 5 : Click on the Logon Tab&amp;#160; and Restart SQL Server by clicking on the “Restart” button&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image24_4E0A49C1.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image24_thumb_4CC5B0E2.png" width="533" height="589" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;So What’s the Problem? Where are the gotchas?&lt;/h2&gt;  &lt;p&gt;Assuming you followed Steps above EXACTLY then nothing will be wrong and –E will work perfectly well for you.&lt;/p&gt;  &lt;p&gt;However, gotchas do exist.&amp;#160; Look back at Step 3&lt;/p&gt;  &lt;p&gt;This is where the gotchas are. The Startup Parameter property box is very sensitive.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If you put your new parameter at the end of the list you must precede your new option with a semi-colon &lt;/li&gt;    &lt;li&gt;If you put your parameter at the beginning of the list you must append the option with a semi-colon (&lt;a href="http://msdn.microsoft.com/en-us/library/ms345416.aspx" target="_blank"&gt;documented&lt;/a&gt; but not clearly)&lt;/li&gt;    &lt;li&gt;You must NOT have any spaces between the semi-colon and the hyphen. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The last one is the real killer&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If you put a space between the semi-colon and the hyphen then the parameter will be ignored.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This works:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image12_74A8B041.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image12_thumb_21BD9D10.png" width="660" height="494" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This does not:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image15_1089BF6D.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image15_thumb_569A7C80.png" width="659" height="489" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;SQL Server interprets the startup parameter as “space-E” not “–E”.&lt;strong&gt; It will therefore not have the desired effect.&lt;/strong&gt;&lt;/p&gt;  &lt;h1&gt;&lt;/h1&gt;  &lt;h2&gt;The SQL Server Log&lt;/h2&gt;  &lt;p&gt;To compound the matter the SQL Log shows something quite interesting.&lt;/p&gt;  &lt;h3&gt;With ;-E&lt;/h3&gt;  &lt;p&gt;2010-04-20 09:27:36.91 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Mar 29 2009 10:11:52     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Copyright (c) 1988-2008 Microsoft Corporation     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Developer Edition (64-bit) on Windows NT 6.1 &amp;lt;X64&amp;gt; (Build 7600: ) &lt;/p&gt;  &lt;p&gt;2010-04-20 09:27:36.91 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (c) 2005 Microsoft Corporation.    &lt;br /&gt;2010-04-20 09:27:36.91 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; All rights reserved.     &lt;br /&gt;2010-04-20 09:27:36.91 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Server process ID is 1456.     &lt;br /&gt;2010-04-20 09:27:36.91 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System Manufacturer: 'Dell Inc.', System Model: 'Latitude D830'.     &lt;br /&gt;2010-04-20 09:27:36.91 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Authentication mode is MIXED.     &lt;br /&gt;2010-04-20 09:27:36.91 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Logging SQL Server messages in file 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG'.     &lt;br /&gt;2010-04-20 09:27:36.91 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; This instance of SQL Server last reported using a process ID of 5876 at 20/04/2010 09:27:30 (local) 20/04/2010 08:27:30 (UTC). This is an informational message only; no user action is required.     &lt;br /&gt;2010-04-20 09:27:36.91 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Registry startup parameters:     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -d C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -e C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -l C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mastlog.ldf     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -E     &lt;br /&gt;2010-04-20 09:27:36.92 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required.&lt;/p&gt;  &lt;h4&gt;Illustration of ;-E&lt;/h4&gt;  &lt;p&gt;I will use the great &lt;a href="http://internalsviewer.codeplex.com" target="_blank"&gt;Internals Viewer&lt;/a&gt; to demonstrate the impact of setting this parameter.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_0C4FC1DB.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_51881904.png" width="680" height="365" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the graphic above the blueish boxes represent data pages that have been allocated from three extents. It can be clearly seen that all extents have been allocated from a single file.&lt;/p&gt;  &lt;p&gt;Without going into the details here (please see my next post to get the juice on –E) the default behaviour of SQL Server has changed. &lt;a href="http://msdn.microsoft.com/en-us/library/ms187501.aspx" target="_blank"&gt;Proportional fill&lt;/a&gt; has not occurred.&lt;/p&gt;  &lt;h3&gt;With ;space-E&lt;/h3&gt;  &lt;p&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Mar 29 2009 10:11:52     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Copyright (c) 1988-2008 Microsoft Corporation     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Developer Edition (64-bit) on Windows NT 6.1 &amp;lt;X64&amp;gt; (Build 7600: ) &lt;/p&gt;  &lt;p&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (c) 2005 Microsoft Corporation.    &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; All rights reserved.     &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Server process ID is 1604.     &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System Manufacturer: 'Dell Inc.', System Model: 'Latitude D830'.     &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Authentication mode is MIXED.     &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Logging SQL Server messages in file 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG'.     &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; This instance of SQL Server last reported using a process ID of 1456 at 20/04/2010 09:47:13 (local) 20/04/2010 08:47:13 (UTC). This is an informational message only; no user action is required.     &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Registry startup parameters:     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -d C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -e C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -l C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mastlog.ldf     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -E     &lt;br /&gt;2010-04-20 09:47:19.87 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required.&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;Illustration of ;space-E&lt;/h4&gt;  &lt;p&gt;As you can see from the graphic below the purple boxes representing data pages are now spread in three different data files. Three extents have again been allocated and the proportional fill algorithm has spread this allocation evenly across the files. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_16543D39.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_thumb_0D8434ED.png" width="676" height="358" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;So what does the SQL Server log show?&lt;/h3&gt;  &lt;p&gt;What’s the difference in the log? Almost nothing!&amp;#160; One could be very easily led to think that the –E startup parameter had been set as it shows in both logs. You have to look pretty closely to see that the second log –E is mis-aligned.&amp;#160; &lt;/p&gt;  &lt;p&gt;However, the actual difference in behaviour is significant. &lt;/p&gt;  &lt;p&gt;In the first instance SQL Server behaviour has been altered. In the second the change has no impact on SQL Server.&amp;#160; However, by looking at the log one could be led to believe that –E had in fact been set. Confusing? I think so.&lt;/p&gt;  &lt;h2&gt;SQL Server Log Conclusions&lt;/h2&gt;  &lt;p&gt;Discovering this issue has led me to an interesting conclusion.&lt;/p&gt;  &lt;p&gt;The SQL Server Log is a statement of intent not a statement of fact.&lt;/p&gt;  &lt;p&gt;I was expecting the log to tell me to tell me that –E had not been enabled when I had configured ;space-E. It did not. It tells me that SQL Server was started with space-E.&lt;/p&gt;  &lt;p&gt;The log is therefore spitting out the configured values not the running values (the ones that actually have an effect).&lt;/p&gt;  &lt;p&gt;What would be better is if the Log told me three things.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;What options were configured as Startup parameters &lt;/li&gt;    &lt;li&gt;What options had been set – i.e. the Runtime values &lt;/li&gt;    &lt;li&gt;What options weren’t recognised and therefore had been ignored &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I think it’d be much more helpful (and a lot less confusing) if SQL Server did something like this:&lt;/p&gt;  &lt;p&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System Manufacturer: 'Dell Inc.', System Model: 'Latitude D830'.    &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Authentication mode is MIXED.     &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Logging SQL Server messages in file 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG'.     &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; This instance of SQL Server last reported using a process ID of 1456 at 20/04/2010 09:47:13 (local) 20/04/2010 08:47:13 (UTC). This is an informational message only; no user action is required.     &lt;br /&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Configured registry startup parameters:     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -d C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -e C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -l C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mastlog.ldf     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -E&lt;/p&gt;  &lt;p&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Running registry startup parameters:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -d C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -e C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -l C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\mastlog.ldf     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;2010-04-20 09:47:19.86 Server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Unrecognised Registry startup parameters:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -E     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;It would be even nicer if the log actually explained what these options are. It could even provide a link to the BOL documentation. That’d be useful.&lt;/p&gt;  &lt;p&gt;Do you agree?&amp;#160; I have posted a connect item up. If you think this is worth changing in SQL Server then please vote!&lt;/p&gt;  &lt;p&gt;&lt;a href="https://connect.microsoft.com/SQLServer/feedback/details/553439/sql-server-log-and-startup-parameter-logging"&gt;https://connect.microsoft.com/SQLServer/feedback/details/553439/sql-server-log-and-startup-parameter-logging&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You may have noticed that I haven’t really explained in full what the –E parameter is. That is because I want to cover that in my next post and kick of my series entitled &amp;quot;&lt;a href="http://consultingblogs.emc.com/tags/Fast+Track+Data+Warehousing/default.aspx" target="_blank"&gt;Focus On Fast Track&lt;/a&gt;&amp;quot;.&amp;#160; It’s nearly done so don’t worry you won’t have to wait long!&lt;/p&gt;  &lt;p&gt;Until the next time, James&lt;/p&gt;&lt;img src="http://consultingblogs.emc.com/aggbug.aspx?PostID=17134" width="1" height="1"&gt;</content><author><name>James.Rowland-Jones</name><uri>http://consultingblogs.emc.com/members/James.Rowland-Jones.aspx</uri></author><category term="SQL Server" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server/default.aspx" /><category term="Database Administration" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Database+Administration/default.aspx" /><category term="SQL Server 2008" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+2008/default.aspx" /><category term="SQL Server Internals" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+Internals/default.aspx" /><category term="Fast Track Data Warehousing" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Fast+Track+Data+Warehousing/default.aspx" /><category term="Startup Parameters" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Startup+Parameters/default.aspx" /></entry><entry><title>Last Call for SQLSocial London Event 16th March 2010 : Meet Itzik Ben-Gan, Greg Low, Davide Mauri &amp; Bill Vaughn</title><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/03/14/last-call-for-sqlsocial-london-event-16th-march-2010-meet-itzik-ben-gan-greg-low-davide-mauri-amp-bill-vaughn.aspx" /><id>http://consultingblogs.emc.com/jamesrowlandjones/archive/2010/03/14/last-call-for-sqlsocial-london-event-16th-march-2010-meet-itzik-ben-gan-greg-low-davide-mauri-amp-bill-vaughn.aspx</id><published>2010-03-14T12:54:36Z</published><updated>2010-03-14T12:54:36Z</updated><content type="html">&lt;p&gt;&lt;a href="http://sqlblogcasts.com/blogs/simons/Default.aspx" target="_blank"&gt;Simon Sabin&lt;/a&gt; has organised a SQLSocial event for this coming Tuesday. It’s at the &lt;a href="http://www.smithfieldtavern.co.uk" target="_blank"&gt;Smithfield Tavern&lt;/a&gt; and will start at 18:30.&lt;/p&gt;  &lt;p&gt;It features some of the worlds most famous SQL Server celebrities in an informal setting. These guys are over in the UK for &lt;a href="http://www.devweek.com" target="_blank"&gt;DevWeek&lt;/a&gt; and have kindly given up an evening to meet you all.&lt;/p&gt;  &lt;p&gt;85 people have already registered – so this is very much the last call for any stragglers who have yet to make up their minds.&lt;/p&gt;  &lt;p&gt;There aren’t many times you get the opportunity to just walk up to the likes of Bill, Greg or Itzik and ask them a question so I’d urge you to take advantage. You might even want to ask Davide about his plans for &lt;a href="http://www.codeplex.com/DTLoggedExec" target="_blank"&gt;DTLoggedExec&lt;/a&gt; – his free SSIS logging tool that’s available now on codeplex. Failing that you can always ask &lt;a href="http://sqlblogcasts.com/blogs/simons/Default.aspx" target="_blank"&gt;Simon&lt;/a&gt; about what’s going to happen at &lt;a href="http://www.sqlbits.com/" target="_blank"&gt;SQLBits&lt;/a&gt; VI. &lt;/p&gt;  &lt;p&gt;The event is free and your first beer is also free so there really is no reason to miss this.&lt;/p&gt;  &lt;p&gt;Head to &lt;a href="http://www.sqlsocial.com/Events/10-02-16/Evening_with_Itzik_Ben-Gan_Greg_Low_and_Davide_Mauri.aspx"&gt;http://www.sqlsocial.com/Events/10-02-16/Evening_with_Itzik_Ben-Gan_Greg_Low_and_Davide_Mauri.aspx&lt;/a&gt; for registration.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Agenda&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;6:30 Welcome, network, eat, post your question topic      &lt;br /&gt;7:00 Small session on something interesting       &lt;br /&gt;7:15 Q&amp;amp;A panel with Itzik, Greg, Davide and Bill       &lt;br /&gt;8:30 just socialise&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Address&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Smithfield Tavern      &lt;br /&gt;105 Charterhouse Street       &lt;br /&gt;London       &lt;br /&gt;EC1M 6HR&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Unfortunately I won’t be able to be there as I am working out in the Dam at the moment. However, I hope you all have fun.&lt;/p&gt;  &lt;p&gt;Cheers, James&lt;/p&gt;  &lt;p&gt;P.S. If your mind goes blank ask about enhancements to the OVER clause… Almost guaranteed to generate a comment from a certain someone :o).&lt;/p&gt;&lt;img src="http://consultingblogs.emc.com/aggbug.aspx?PostID=16931" width="1" height="1"&gt;</content><author><name>James.Rowland-Jones</name><uri>http://consultingblogs.emc.com/members/James.Rowland-Jones.aspx</uri></author><category term="SQL Server" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server/default.aspx" /><category term="Community" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Community/default.aspx" /><category term="SQL Server 2008" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+2008/default.aspx" /></entry><entry><title>PASS Nederland Chapter Meeting 17/11/2009</title><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/11/18/pass-nederland-chapter-meeting-17-11-2009.aspx" /><id>http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/11/18/pass-nederland-chapter-meeting-17-11-2009.aspx</id><published>2009-11-18T07:38:56Z</published><updated>2009-11-18T07:38:56Z</updated><content type="html">&lt;p&gt;For those of you who aren’t aware I am currently working out of the Netherlands. That’s one of the joys of being&amp;#160; a consultant for a global organisation – you can literally end up anywhere! However, last night I had the please of speaking to the PASS Chapter here in the Netherlands &lt;a title="http://www.sqlpass.nl/" href="http://www.sqlpass.nl/"&gt;http://www.sqlpass.nl/&lt;/a&gt;. I covered some of the Data Warehousing Features in SQL Server 2008. It was a lot of fun and great to speak to a completely new audience for me.&amp;#160; Some people may have become wary of my presentation “style” after seeing me at &lt;a href="http://www.sqlbits.com/" target="_blank"&gt;SQLBits&lt;/a&gt; but here I had 30 or so willing victims who had no knowledge of me or my pop quizzes :o).&amp;#160; If you are in the UK and would like to know more about these features I will presenting this session on Friday 20th November at the SQLBits 2008 &amp;amp; R2 day.&amp;#160; It’s the last session of the day but what else are you going to do? Sit in traffic on the M4? Surely it’ll be less painful than that :o)…&lt;/p&gt;  &lt;p&gt;I’d like to thank every one who came along and look forward to attending next months session. If I wasn’t greatly mistaken (my Dutch is still a bit basic to say the least) Marcel van der Holst will be presenting.&amp;#160; Personally, I’d come over from the UK for that kind of session. Marcel is THE MAN and has helped me out with my book and also in understanding &lt;a href="http://blogs.conchango.com/jamesrowlandjones/archive/2009/05/28/the-curious-case-of-the-dubious-deadlock-and-the-not-so-logical-lock.aspx" target="_blank"&gt;the curious case of the dubious deadlock and the not so logical lock&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;A couple of things came up last night that people have asked me to post links to that I included in my presentation.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The excellent Data Loading Performance Guide - &lt;a title="http://msdn.microsoft.com/en-us/library/dd425070.aspx" href="http://msdn.microsoft.com/en-us/library/dd425070.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd425070.aspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Stuart Ozer’s ManagePartition.exe&amp;#160; - &lt;a title="http://sqlpartitionmgmt.codeplex.com/" href="http://sqlpartitionmgmt.codeplex.com/"&gt;http://sqlpartitionmgmt.codeplex.com/&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I will post the slides and the presentation up onto the SQLBits website once I’ve presented it this week...&lt;/p&gt;  &lt;p&gt;Big thanks to &lt;a href="http://andrekamman.com/" target="_blank"&gt;André Kamman&lt;/a&gt; (&lt;em&gt;not&lt;/em&gt; just another SQL DBA) for the invite and to &lt;a href="http://www.computrain.nl/Default.aspx?AspxAutoDetectCookieSupport=1" target="_blank"&gt;Compu’Train&lt;/a&gt; for hosting the event.&lt;/p&gt;  &lt;p&gt;See you all at &lt;a href="http://www.sqlbits.com/" target="_blank"&gt;SQLBits&lt;/a&gt;! I think &lt;a href="http://blogs.technet.com/andrew/" target="_blank"&gt;Andrew Fryer&lt;/a&gt; still has a few tickets left so if you want to get to SQLBits on the Friday for FREE then send him a mail. &lt;/p&gt;  &lt;p&gt;Cheers, James&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/jrowlandjones" target="_blank"&gt;@jrowlandjones&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;P.S. Are you interested in becoming a BI consultant for EMC Consulting? If the answer is YES then please feel free to &lt;a href="http://consultingblogs.emc.com/jamesrowlandjones/contact.aspx" target="_blank"&gt;Contact Me&lt;/a&gt; and let’s start that discussion…&lt;/p&gt;&lt;img src="http://consultingblogs.emc.com/aggbug.aspx?PostID=16591" width="1" height="1"&gt;</content><author><name>James.Rowland-Jones</name><uri>http://consultingblogs.emc.com/members/James.Rowland-Jones.aspx</uri></author><category term="BI" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/BI/default.aspx" /><category term="SQLBITS" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQLBITS/default.aspx" /><category term="Community" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Community/default.aspx" /><category term="SQL Server 2008" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+2008/default.aspx" /><category term="Data Warehousing" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Data+Warehousing/default.aspx" /></entry><entry><title>SQLBits V : Friday Ticket Give-away!</title><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/11/16/sqlbits-v-friday-ticket-give-away.aspx" /><id>http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/11/16/sqlbits-v-friday-ticket-give-away.aspx</id><published>2009-11-16T16:43:45Z</published><updated>2009-11-16T16:43:45Z</updated><content type="html">&lt;p&gt;&lt;a href="http://blogs.technet.com/andrew/" target="_blank"&gt;Andrew Fryer&lt;/a&gt;, &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx" target="_blank"&gt;Microsoft&lt;/a&gt; IT Pro evangelist extraordinaire, has &lt;strong&gt;25&lt;/strong&gt; free tickets to give away for this Friday’s &lt;a href="http://www.sqlbits.com/" target="_blank"&gt;SQLBits&lt;/a&gt; SQL Server 2008 and R2 day!&amp;#160; Head over to his blog &lt;a href="http://blogs.technet.com/andrew/archive/2009/11/16/sql-bits-friday-session.aspx" target="_blank"&gt;here&lt;/a&gt; to find out how you can claim a ticket and bag yourself a great geeky day out. You are also most welcome to stay over and enjoy the community day on the Saturday although you will need to foot the bill for your own accommodation. There are limits you know :o).&lt;/p&gt;  &lt;p&gt;Look forward to seeing you all there!&lt;/p&gt;  &lt;p&gt;Cheers, James&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/jrowlandjones" target="_blank"&gt;@jrowlandjones&lt;/a&gt;&lt;/p&gt;&lt;img src="http://consultingblogs.emc.com/aggbug.aspx?PostID=16584" width="1" height="1"&gt;</content><author><name>James.Rowland-Jones</name><uri>http://consultingblogs.emc.com/members/James.Rowland-Jones.aspx</uri></author><category term="SQL Server" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server/default.aspx" /><category term="Community" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Community/default.aspx" /><category term="SQL Server 2008" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+2008/default.aspx" /><category term="SQL Server 2008 R2" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+2008+R2/default.aspx" /></entry><entry><title>My new SQL 2008 Internals Book!!!</title><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/11/13/my-new-sql-2008-internals-book.aspx" /><id>http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/11/13/my-new-sql-2008-internals-book.aspx</id><published>2009-11-13T11:15:10Z</published><updated>2009-11-13T11:15:10Z</updated><content type="html">&lt;p&gt;I say my but really of course I mean “our” :o).&amp;#160; It’s been a fantastic experience and I have got to know some great people and had a lot of fun, stress heartache and now joy.&amp;#160; Big thanks to the team at Wrox, especially Ami and of course my fellow authors and contributors, &lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/default.aspx" target="_blank"&gt;Jonathan Kehayias&lt;/a&gt; and Cindy Gross.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.co.uk/Professional-Server-2008-Internals-Troubleshooting/dp/0470484284/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1258110866&amp;amp;sr=8-1" target="_blank"&gt;&lt;img title="cover" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="720" alt="cover" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/cover_61C4D315.jpg" width="642" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Not much more to say than it’ll be available in all good bookshops in January but don’t let that stop you getting your pre-orders in now :).&lt;/p&gt;  &lt;p&gt;So in the style of Murray Walker “Buy! Buy! Buy!”&lt;/p&gt;  &lt;p&gt;Cheers, James&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/jrowlandjones" target="_blank"&gt;@jrowlandjones&lt;/a&gt;&lt;/p&gt;&lt;img src="http://consultingblogs.emc.com/aggbug.aspx?PostID=16569" width="1" height="1"&gt;</content><author><name>James.Rowland-Jones</name><uri>http://consultingblogs.emc.com/members/James.Rowland-Jones.aspx</uri></author><category term="SQL Server 2008" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+2008/default.aspx" /><category term="New SQL Book" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/New+SQL+Book/default.aspx" /></entry><entry><title>Bob Muglia demonstrates 192 core SQL Server 2008 R2 – with record performance</title><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/11/03/bob-muglia-demonstrates-192-core-sql-server-2008-r2-with-record-performance.aspx" /><id>http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/11/03/bob-muglia-demonstrates-192-core-sql-server-2008-r2-with-record-performance.aspx</id><published>2009-11-03T17:15:16Z</published><updated>2009-11-03T17:15:16Z</updated><content type="html">&lt;p&gt;Today is the beginning of PASS 2009.&amp;#160; I am currently sat in the key note and have just seen Bob Muglia demonstrate a SQL Server 2008 R2 running 192 cores.&lt;/p&gt;  &lt;p&gt;I think that’s worth sharing. As I am sat next to &lt;a href="http://sqlblogcasts.com/blogs/simons/Default.aspx" target="_blank"&gt;Simon Sabin&lt;/a&gt; I thought I’d share this using pictures rather than bang on for pages of text (he hates it when I do that ).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/IMG_0547_05B1501F.jpg"&gt;&lt;img title="IMG_0547" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="237" alt="IMG_0547" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/IMG_0547_thumb_1C7FFBCE.jpg" width="319" border="0" /&gt;&lt;/a&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/IMG_0549_077E538E.jpg"&gt;&lt;img title="IMG_0549" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="237" alt="IMG_0549" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/IMG_0549_thumb_38BD1821.jpg" width="317" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;However, if you want to see what can be done with a mere 96 cores why not check out Henk van der Valk’s awesome work on YouTube &lt;a href="http://www.youtube.com/watch?v=2qjrq8kpZUs" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; If you want to meet Henk and see 96 cores in action at &lt;a href="http://www.sqlbits.com/" target="_blank"&gt;SQLBits&lt;/a&gt; 2009. Henk works in the European Performance Center for Unisys.&lt;/p&gt;  &lt;p&gt;Finally some new benchmarks announced today…&lt;/p&gt;  &lt;p&gt;Check out the new SQL Server 2008 R2 record for TPC-E.&amp;#160; Of interest to me is that R2 is not only the fastest 2012.77&amp;#160; as opposed to 1,568.22 but also at lower cost Price/tpsE (958.23 USD compared with 1180.01 USD).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.tpc.org/tpce/results/tpce_perf_results.asp" target="_blank"&gt;&lt;img title="TPC-E" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="170" alt="TPC-E" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/TPCE_5727590A.png" width="680" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Also of interest on the benchmarking front is the new SQL 2008 TPC-H benchmark.&amp;#160; TPC-H is a data warehousing benchmark. SQL Server 2008 R2 has featured rather well in the price/performance for 10,000 GB results. Yes that is SQL Server in the no.1 slot :o).&amp;#160; Whilst the QphH isn’t the same as some of the others it clearly demonstrates SQL Server scales way beyond common misconceptions.&amp;#160; It is also delivering scale at a much keener TCO.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.tpc.org/tpch/results/tpch_price_perf_results.asp" target="_blank"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="223" alt="image" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/image_2D63DE17.png" width="676" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I think that’s quite enough for now.&amp;#160; &lt;a href="http://sqlblogcasts.com/blogs/simons/Default.aspx" target="_blank"&gt;Simon&lt;/a&gt; is starting to hurt me (too many words).&lt;/p&gt;  &lt;p&gt;Cheers, James&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/IMG_0549_7CDD33D3.jpg"&gt;&amp;#160;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://consultingblogs.emc.com/aggbug.aspx?PostID=16496" width="1" height="1"&gt;</content><author><name>James.Rowland-Jones</name><uri>http://consultingblogs.emc.com/members/James.Rowland-Jones.aspx</uri></author><category term="Community" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/Community/default.aspx" /><category term="PASS" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/PASS/default.aspx" /><category term="SQL Server 2008 R2" scheme="http://consultingblogs.emc.com/jamesrowlandjones/archive/tags/SQL+Server+2008+R2/default.aspx" /></entry><entry><title>Get Mugged at #SQLPASS 09</title><link rel="alternate" type="text/html" href="http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/11/03/get-mugged-at-sqlpass-09.aspx" /><id>http://consultingblogs.emc.com/jamesrowlandjones/archive/2009/11/03/get-mugged-at-sqlpass-09.aspx</id><published>2009-11-03T08:05:26Z</published><updated>2009-11-03T08:05:26Z</updated><content type="html">&lt;p&gt;Tomorrow I am hosting a table at the Birds of a Feather lunch and am following this up with my stint in the Ask The Experts Area (Data Warehousing). Please feel free to come by and say hi.&amp;#160; I know of two people now that have stumbled upon my blog so please don’t be shy. I rarely bite and the UK hasn’t had a case of rabies since November 2002. My aim is to get this up to double figures this week.&amp;#160; By way of inducement, I’ll have plenty of SQL bucks to give out and also should have a stack of &lt;a href="http://www.sqlbits.com/" target="_blank"&gt;SQLBits&lt;/a&gt; mugs to distribute too.&amp;#160; You won’t believe the effort we went to to get them at PASS this year.&amp;#160; I am still walking a little awkwardly… &lt;/p&gt;  &lt;p&gt;So if you fancy getting your hands on one these highly sought after collectors items then all you need to do is make sure you are &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;In Seattle&lt;/li&gt;    &lt;li&gt;Attending &lt;a href="http://twitter.com/sqlpass" target="_blank"&gt;#sqlpass&lt;/a&gt; 09&lt;/li&gt;    &lt;li&gt;At the Birds of a feather lunch or&lt;/li&gt;    &lt;li&gt;Lurking around the Ask the Experts area&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Please don’t be shy. I’d rather not be sat there like Billy no mates if it’s all the same to you.&amp;#160; Ok starting to sound a bit desperate so let’s have a look at what you could win…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://consultingblogs.emc.com/blogs/jamesrowlandjones/IMG_0546_6AAD85F5.jpg"&gt;&lt;img title="IMG_0546" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="361" alt="IMG_0546" src="http://consultingblogs.emc.com/blogs/jamesrowlandjones/IMG_0546_thumb_66DFBB58.jpg" width="480" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I should point out that not all the mugs made it on one piece and so those that survived are now extremely collectable.&amp;#160; Mugs will be offered on a first come first served basis – until I decide otherwise. One mug per mug/person. When they are gone they are gone. Caution contents of mug may be hot when filled with contents that are hot. Referee’s (my) decision is final. A SQLBits mug &lt;strong&gt;will&lt;/strong&gt; however make you more attractive to the opposite sex (after all you now own a collectors item).&amp;#160; Tests on improved levels of attractiveness to the same sex are on-going. Early tests are encouraging.&lt;/p&gt;  &lt;p&gt;I look forward to meeting you.&amp;#160; I have a lot of mugs.&lt;/p&gt;  &lt;p&gt;Cheers, James&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/jrowlandjones" target="_blank"&gt;@jrowlandjones&lt;/a&gt;&lt;/p&gt;&lt;img src="http://consultingblogs.emc.com/aggbug.aspx?PostID=16486" width="1" height="1"&gt;</content><author><name>James.Rowland-Jones</name><uri>http://consultingblogs.emc.com/members/James.Rowland-Jones.aspx</uri></author></entry></feed>
