<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jimmy May, Aspiring Geek:  SQL Server Performance, Best Practices, &amp; Productivity : Best Practices</title><link>http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx</link><description>Tags: Best Practices</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Xperf: Install Windows Performance Toolkit (WPT) with 242MB Download, Not 2.5GB Windows 7 SDK: Part 2</title><link>http://blogs.msdn.com/jimmymay/archive/2009/11/24/xperf-install-windows-performance-toolkit-wpt-with-242mb-download-not-2-5gb-windows-7-sdk-part-2.aspx</link><pubDate>Tue, 24 Nov 2009 19:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9928175</guid><dc:creator>Jimmy May</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9928175.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9928175</wfw:commentRss><description>&lt;P&gt;In my first post on &lt;A href="http://blogs.msdn.com/jimmymay/archive/2009/09/08/xperf-once-i-was-blind-and-now-i-see.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2009/09/08/xperf-once-i-was-blind-and-now-i-see.aspx"&gt;Xperf&lt;/A&gt;, I described the simple 4.4MB download necessary to install the Windows Performance Analyzer (WPA) &amp;amp; the other tools which comprise the Windows Performance Toolkit (WPT), including Xperf.&lt;/P&gt;
&lt;P&gt;I was surprised to learn that the WPT is no longer available in a discrete download.&lt;/P&gt;
&lt;P&gt;As I explained in &lt;A href="http://blogs.msdn.com/jimmymay/archive/2009/11/22/xperf-install-windows-performance-toolkit-wpt-with-242mb-download-not-the-entire-2-5gb-windows-7-sdk-part-1.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2009/11/22/xperf-install-windows-performance-toolkit-wpt-with-242mb-download-not-the-entire-2-5gb-windows-7-sdk-part-1.aspx"&gt;Part 1&lt;/A&gt;, the nominal way to install it now is through a humongous 2.5GB download of the &lt;A href="http://blogs.msdn.com/controlpanel/blogs/Microsoft%20Windows%20SDK%20for%20Windows%207%20and%20.NET%20Framework%203.5%20Service%20Pack%201" target=_blank&gt;Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 Service Pack 1&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Unlike my buddy &amp;amp; &lt;A href="http://blogs.technet.com/themasterblog/archive/2009/07/15/one-new-sql-mca-and-four-sql-mcms.aspx" target=_blank mce_href="http://blogs.technet.com/themasterblog/archive/2009/07/15/one-new-sql-mca-and-four-sql-mcms.aspx"&gt;fellow MCM&lt;/A&gt; &lt;A href="http://blogs.technet.com/themasterblog/archive/2009/08/13/a-new-sql-mcm-2008-to-introduce.aspx" target=_blank mce_href="http://blogs.technet.com/themasterblog/archive/2009/08/13/a-new-sql-mcm-2008-to-introduce.aspx"&gt;Jens Suessmeyer&lt;/A&gt; (&lt;A href="http://www.twitter.com/iamjens" target=_blank mce_href="http://www.twitter.com/iamjens"&gt;twitter&lt;/A&gt;|&lt;A href="http://blogs.msdn.com/jenss" target=_blank mce_href="http://blogs.msdn.com/jenss"&gt;blog&lt;/A&gt;) whose “&lt;A href="http://blogs.msdn.com/jenss" target=_blank mce_href="http://blogs.msdn.com/jenss"&gt;Developer hearted / Relational minded&lt;/A&gt;” blog betrays his expertise, downloading multiple gigabytes of developer tools on my workstations would be a waste of bandwidth &amp;amp; disk space.&lt;/P&gt;
&lt;P&gt;Fortunately there’s a much faster, easier way.&amp;nbsp; Here are the 8 steps to do so.&amp;nbsp; The key step is selecting only “Win32 Development Tools” in the SDK Installations Options (step 6).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1. Browse to the Windows 7 SDK download page &lt;BR&gt;&lt;/STRONG&gt;You can go directly to the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505"&gt;download page&lt;/A&gt; (&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505"&gt;the fourth URL below&lt;/A&gt;), but let’s start with the WPA home page &amp;amp; drill through.&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;EM&gt;&amp;lt;ADD&amp;gt; Don’t get distracted now, but there’re lots of great items here to bookmark &amp;amp; peruse later. &amp;lt;/ADD&amp;gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Windows Performance Analysis Developer Center &lt;BR&gt;&lt;A href="http://msdn.microsoft.com/en-us/performance/default.aspx" mce_href="http://msdn.microsoft.com/en-us/performance/default.aspx"&gt;http://msdn.microsoft.com/en-us/performance/default.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Windows Performance Analysis Tools &lt;BR&gt;&lt;A href="http://msdn.microsoft.com/en-us/performance/cc825801.aspx" mce_href="http://msdn.microsoft.com/en-us/performance/cc825801.aspx"&gt;http://msdn.microsoft.com/en-us/performance/cc825801.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Windows SDK &lt;BR&gt;&lt;A href="http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx" mce_href="http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx"&gt;http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&lt;/A&gt; &lt;/LI&gt;&lt;/OL&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;2. Run the Win 7 SDK Web Executable &lt;BR&gt;&lt;/STRONG&gt;Clicking the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505"&gt;download button&lt;/A&gt; initiates the download of winsdk_web.exe.&amp;nbsp; Save/run the file (493KB).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3. Installation Screen Shot: Windows SDK Setup Wizard &lt;BR&gt;&lt;/STRONG&gt;Click the Next &amp;gt; button on the first page of the Windows SDK Setup Wizard.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4. Installation Screen Shot: EULA &lt;BR&gt;&lt;/STRONG&gt;Choose “I agree” &amp;amp; click the Next &amp;gt; button on the End-User License Agreement page.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;5. Installation Screen Shot: Install Locations &lt;BR&gt;&lt;/STRONG&gt;Select destination folders for "Documentation and Tools" &amp;amp; "Samples", then click the Next &amp;gt; button.&amp;nbsp; The default location root is:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;C:\Program Files\Microsoft SDKs\Windows\v7.0&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;6. *KEY STEP* Installation Screen Shot: Installation Options &lt;BR&gt;&lt;/STRONG&gt;This is the key step in avoiding the SDK’s 2.5GB default download (4.5GB installed).&amp;nbsp; Clear all checkboxes except one:&amp;nbsp; Win32 Development Tools, which is “only” a 242MB download requiring 529MB to install.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Developer Tools &amp;gt; Windows Development Tools &amp;gt; Win32 Development Tools&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart2_F311/clip_image0015.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart2_F311/clip_image0015.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image001[5] border=0 alt=clip_image001[5] src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart2_F311/clip_image0015_thumb.png" width=545 height=385 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart2_F311/clip_image0015_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;7. Install &lt;BR&gt;&lt;/STRONG&gt;Click Next &amp;gt; on the &lt;STRONG&gt;Begin Installation&lt;/STRONG&gt; page.&amp;nbsp; patiently watch the progress of the &lt;STRONG&gt;Installation Progress&lt;/STRONG&gt; page.&amp;nbsp; On the &lt;STRONG&gt;Installation Complete&lt;/STRONG&gt; page, consider enabling the checkbox labeled, “&lt;STRONG&gt;Help improve our products by sending your installation report to Microsoft&lt;/STRONG&gt;…”&amp;nbsp; Click the Finish button.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart2_F311/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart2_F311/image_10.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://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart2_F311/image_thumb_4.png" width=532 height=377 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart2_F311/image_thumb_4.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;8. Find &amp;amp; Install the Appropriate WPT MSI &lt;BR&gt;&lt;/STRONG&gt;Now that the selected SDK components are installed, we can install WPT.&amp;nbsp; You’ll find the wpt_x86.msi &amp;amp; wpt_x64.msi files in the folder defined in step 5 above, by default:&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;C:\Program Files\Microsoft SDKs\Windows\v7.0&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Walk through the Microsoft Windows Performance Toolkit Setup:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;On the Welcome page, click Next &amp;gt; &lt;/LI&gt;
&lt;LI&gt;Accept the EULA, click Next &amp;gt; &lt;/LI&gt;
&lt;LI&gt;Choose Setup Type, click the Custom button &lt;/LI&gt;
&lt;LI&gt;On the Custom Setup page, click the Browse button, &amp;amp; on the Change Current Destination Folder page consider modifying the default &lt;BR&gt;&lt;FONT face="Lucida Console"&gt;C:\Program Files\Microsoft Windows Performance Toolkit\&lt;/FONT&gt; &lt;BR&gt;to &lt;BR&gt;&lt;FONT face="Lucida Console"&gt;C:\xperf\&lt;/FONT&gt; &lt;BR&gt;Click OK on , Click Next &lt;/LI&gt;
&lt;LI&gt;On the Ready to Install page, click the Install button to invoke the Installing Microsoft Windows Performance Toolkit page &lt;/LI&gt;
&lt;LI&gt;Click the Finish button on the Completing… page &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Jimmy May&lt;FONT size=1&gt;&lt;B&gt;, &lt;/B&gt;MCM, MCDBA, MCSE, MCITP: DBA + DB Dev | Principal Performance Engineer: SQL Server | MS IT Assessment Consulting &amp;amp; Engineering Services (A.C.E.) &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://msinfosec.com/" target=_blank mce_href="http://msinfosec.com/"&gt;&lt;FONT size=1&gt;http://msinfosec.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/jimmymay" target=_blank mce_href="http://blogs.msdn.com/jimmymay"&gt;&lt;FONT size=1&gt;http://blogs.msdn.com/jimmymay&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://www.twitter.com/aspiringgeek" mce_href="http://www.twitter.com/aspiringgeek"&gt;&lt;FONT size=1&gt;www.twitter.com/aspiringgeek&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;A href="mailto:jimmymay@microsoft.com" target=_blank mce_href="mailto:jimmymay@microsoft.com"&gt;&lt;FONT size=1&gt;jimmymay@microsoft.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;BR&gt;317.590.8650&lt;/FONT&gt;&lt;U&gt;&lt;FONT size=1&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;I&gt;Don’t practice in front of the CIO.&amp;nbsp; A professional prepares ahead of time. &lt;BR&gt;&lt;/I&gt;—&lt;A href="http://blogs.technet.com/wardpond/archive/2009/09/09/pond-s-twelfth-law-in-your-pursuit-of-five-nines-don-t-practice-in-front-of-the-cio.aspx" target=_blank mce_href="http://blogs.technet.com/wardpond/archive/2009/09/09/pond-s-twelfth-law-in-your-pursuit-of-five-nines-don-t-practice-in-front-of-the-cio.aspx"&gt;Pond's 12th Law&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9928175" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Training/default.aspx">Training</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/_2F00_faster/default.aspx">/faster</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/xperf_2F00_ETW_2F00_WPA_2F00_WPT/default.aspx">xperf/ETW/WPA/WPT</category></item><item><title>Xperf: Install Windows Performance Toolkit (WPT) with 242MB Download, Not the Entire 2.5GB Windows 7 SDK: Part 1</title><link>http://blogs.msdn.com/jimmymay/archive/2009/11/22/xperf-install-windows-performance-toolkit-wpt-with-242mb-download-not-the-entire-2-5gb-windows-7-sdk-part-1.aspx</link><pubDate>Sun, 22 Nov 2009 23:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9927028</guid><dc:creator>Jimmy May</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9927028.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9927028</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Say It Ain’t So!&lt;/STRONG&gt; &lt;BR&gt;In my first post on &lt;A href="http://blogs.msdn.com/jimmymay/archive/2009/09/08/xperf-once-i-was-blind-and-now-i-see.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2009/09/08/xperf-once-i-was-blind-and-now-i-see.aspx"&gt;Xperf&lt;/A&gt;, I described the simple 4.4MB download necessary to install the Windows Performance Analyzer (WPA) &amp;amp; the other tools which comprise the Windows Performance Toolkit (WPT), including Xperf.&lt;/P&gt;
&lt;P&gt;I was surprised to learn that the toolkit is no longer available in a discrete download.&lt;/P&gt;
&lt;P&gt;The only way to install it now is through the &lt;A href="http://blogs.msdn.com/controlpanel/blogs/Microsoft%20Windows%20SDK%20for%20Windows%207%20and%20.NET%20Framework%203.5%20Service%20Pack%201" target=_blank&gt;Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 Service Pack 1&lt;/A&gt;.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart1_F9BE/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart1_F9BE/image_4.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://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart1_F9BE/image_thumb_1.png" width=544 height=389 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/XperfInstallWindowsP.5GBWindows7SDKPart1_F9BE/image_thumb_1.png"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The default download is a honkin’ 2.5GB, 4.5GB installed, but all I want is the toolkit.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Why the Change? &lt;BR&gt;&lt;/B&gt;The version of WPT that was independently posted was incompatible with Win7.&amp;nbsp; The team wanted to remove it before a large number of people downloaded it and had issues with their freshly installed copy of the RTM bits.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How to Install WPT&lt;/STRONG&gt; &lt;BR&gt;Principal Development Lead &lt;STRONG&gt;&lt;A href="http://social.msdn.microsoft.com/Profile/en-US/?user=Adam%20Smith%20-%20MSFT" target=_blank mce_href="http://social.msdn.microsoft.com/Profile/en-US/?user=Adam%20Smith%20-%20MSFT"&gt;Adam Smith&lt;/A&gt;&lt;/STRONG&gt; helped me short-circuit the big download so we need download “only” 242MB.&lt;/P&gt;
&lt;P&gt;Per Adam, the web install allows us to choose just the win32 dev tools for a far more reasonable download—242MB instead of 2.5GB.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In Part 2 I’ll detail how to do so.&lt;/P&gt;
&lt;P&gt;Jimmy May&lt;FONT size=1&gt;&lt;B&gt;, &lt;/B&gt;MCM, MCDBA, MCSE, MCITP: DBA + DB Dev | Principal Performance Engineer: SQL Server | MS IT Assessment Consulting &amp;amp; Engineering Services (A.C.E.) &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://msinfosec.com/" target=_blank mce_href="http://msinfosec.com/"&gt;&lt;FONT size=1&gt;http://msinfosec.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/jimmymay" target=_blank mce_href="http://blogs.msdn.com/jimmymay"&gt;&lt;FONT size=1&gt;http://blogs.msdn.com/jimmymay&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;A href="mailto:jimmymay@microsoft.com" target=_blank mce_href="mailto:jimmymay@microsoft.com"&gt;&lt;FONT size=1&gt;jimmymay@microsoft.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;BR&gt;317.590.8650&lt;/FONT&gt;&lt;U&gt;&lt;FONT size=1&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;I&gt;Don’t practice in front of the CIO.&amp;nbsp; A professional prepares ahead of time. &lt;BR&gt;&lt;/I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; —&lt;A href="http://blogs.technet.com/wardpond/archive/2009/09/09/pond-s-twelfth-law-in-your-pursuit-of-five-nines-don-t-practice-in-front-of-the-cio.aspx" target=_blank mce_href="http://blogs.technet.com/wardpond/archive/2009/09/09/pond-s-twelfth-law-in-your-pursuit-of-five-nines-don-t-practice-in-front-of-the-cio.aspx"&gt;Pond's 12th Law&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927028" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Training/default.aspx">Training</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/_2F00_faster/default.aspx">/faster</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/xperf_2F00_ETW_2F00_WPA_2F00_WPT/default.aspx">xperf/ETW/WPA/WPT</category></item><item><title>SQLIOSim Parser by Jens Suessmeyer &amp; Yours Truly</title><link>http://blogs.msdn.com/jimmymay/archive/2009/09/27/sqliosim-parser-by-jens-suessmeyer-yours-truly.aspx</link><pubDate>Sun, 27 Sep 2009 14:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9899985</guid><dc:creator>Jimmy May</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9899985.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9899985</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;New! Improved!&lt;/EM&gt;&amp;nbsp;&lt;A title=v.3.3.0 href="http://www.sqlserver2005.de/Link.aspx?ID=43" target=_blank mce_href="http://www.sqlserver2005.de/Link.aspx?ID=43"&gt;v.3.3.0&lt;/A&gt; Now Available on &lt;A title=CodePlex href="http://www.sqlserver2005.de/Link.aspx?ID=43" target=_blank mce_href="http://www.sqlserver2005.de/Link.aspx?ID=43"&gt;CodePlex&lt;/A&gt;!&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Preamble&lt;/STRONG&gt; &lt;BR&gt;&lt;A title="SQLIOSim Parser" href="http://www.sqlserver2005.de/Link.aspx?ID=43" target=_blank mce_href="http://www.sqlserver2005.de/Link.aspx?ID=43"&gt;SQLIOSim Parser&lt;/A&gt; shreds the results of SQLIOSim.log.xml in seconds, allowing easier &amp;amp; more accurate interpretation of the output of SQLIOSim.&lt;/P&gt;
&lt;P&gt;SQLIOSim is a tool written by CSS Engineer Bob Dorr.&amp;nbsp; Many of you know Bob from the excellent insights he shares on the &lt;A href="http://blogs.msdn.com/psssql" target=_blank mce_href="http://blogs.msdn.com/psssql"&gt;CSS SQL Server Engineers&lt;/A&gt; blog.&amp;nbsp; Note that SQLIOSim is &lt;EM&gt;not&lt;/EM&gt; a performance tool; it is designed to validate &lt;EM&gt;disk I/O subsystem &lt;STRONG&gt;correctness&lt;/STRONG&gt;&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;Back during MCM training I was asked about interpreting the output of SQLIOSim.&amp;nbsp; I cited these references:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Understanding SQLIOSim Output&lt;/EM&gt; &lt;BR&gt;&lt;A href="http://sqlblog.com/blogs/kevin_kline/archive/2007/06/28/understanding-sqliosim-output.aspx" target=_blank mce_href="http://sqlblog.com/blogs/kevin_kline/archive/2007/06/28/understanding-sqliosim-output.aspx"&gt;http://sqlblog.com/blogs/kevin_kline/archive/2007/06/28/understanding-sqliosim-output.aspx&lt;/A&gt;&amp;nbsp; &lt;BR&gt;MVP Kevin Kline’s conversation with yours truly&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;&lt;EM&gt;More Tidbits on SQLIOSim&lt;/EM&gt; &lt;BR&gt;&lt;A href="http://sqlblog.com/blogs/kevin_kline/archive/2008/12/14/more-tidbits-on-sqliosim.aspx" target=_blank mce_href="http://sqlblog.com/blogs/kevin_kline/archive/2008/12/14/more-tidbits-on-sqliosim.aspx"&gt;http://sqlblog.com/blogs/kevin_kline/archive/2008/12/14/more-tidbits-on-sqliosim.aspx&lt;/A&gt;&amp;nbsp; &lt;BR&gt;Kevin’s conversation with Bob Dorr &amp;amp; Jose Fortuny&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;How It Works: SQLIOSim - Running Average, Target Duration, Discarded Buffers&lt;/EM&gt; &lt;BR&gt;&lt;A title=http://blogs.msdn.com/psssql/archive/2008/11/12/how-it-works-sqliosim-running-average-target-duration-discarded-buffers.aspx href="http://blogs.msdn.com/psssql/archive/2008/11/12/how-it-works-sqliosim-running-average-target-duration-discarded-buffers.aspx" target=_blank mce_href="http://blogs.msdn.com/psssql/archive/2008/11/12/how-it-works-sqliosim-running-average-target-duration-discarded-buffers.aspx"&gt;http://blogs.msdn.com/psssql/archive/2008/11/12/how-it-works-sqliosim-running-average-target-duration-discarded-buffers.aspx&lt;/A&gt; &lt;BR&gt;Bob Dorr documents key SQLIOSim metrics&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;How to use the SQLIOSim utility to simulate SQL Server activity on a disk subsystem &lt;BR&gt;&lt;/EM&gt;&lt;A title=http://support.microsoft.com/kb/231619 href="http://support.microsoft.com/kb/231619" target=_blank mce_href="http://support.microsoft.com/kb/231619"&gt;http://support.microsoft.com/kb/231619&lt;/A&gt; &lt;BR&gt;Microsoft KB article&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I’ll document these &amp;amp; other references in a subsequent post.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Genesis of SQLIOSim Parser &lt;BR&gt;&lt;/STRONG&gt;During MCM training I lamented that, as cool as the tool is, I explained my practice of manually parsing the output, laboriously copying-&amp;amp;-pasting values into Excel in order to better wrap my brain around the results.&lt;/P&gt;
&lt;P&gt;Serendipitously, &lt;A href="http://blogs.msdn.com/JensS" target=_blank mce_href="http://blogs.msdn.com/JensS"&gt;Jens Suessmeyer&lt;/A&gt; was there &amp;amp; offered to write a parser.&lt;/P&gt;
&lt;P&gt;Jens is not only a great friend, but one of the Microsoft’s rising stars.&amp;nbsp; Before joining Microsoft he was an MVP, he’s a prolific contributor to our internal DLs, &amp;amp; he has an impressive depth &amp;amp; breadth of knowledge.&amp;nbsp; Check out &amp;amp; subscribe to his &lt;A href="http://blogs.msdn.com/JensS" target=_blank mce_href="http://blogs.msdn.com/JensS"&gt;blog&lt;/A&gt;.&amp;nbsp; And now he’s provided yet another means to make our lives easier.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fruitful Collaboration Results in Downloadable Version&lt;BR&gt;&lt;/STRONG&gt;I provided guidelines &amp;amp; Jens has followed through by writing SQLIOParserWin.exe.&amp;nbsp; We’ve labored through several enhancements.&amp;nbsp; Be clear, Jens did the heavy lifting here.&amp;nbsp; The fruits of our collaboration are now available for review.&amp;nbsp; Here's a link to the latest-&amp;amp;-greatest, currently &lt;A title=v.3.3.0 href="http://www.sqlserver2005.de/Link.aspx?ID=43" target=_blank mce_href="http://www.sqlserver2005.de/Link.aspx?ID=43"&gt;v.3.3.0&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The parser has saved me loads of time whenever I use SQLIOSim &amp;amp; it will do the same for you.&amp;nbsp; I’m on-site with a customer right now.&amp;nbsp; &lt;STRONG&gt;I ran &amp;amp; parsed the real-life results of numerous tests in mere seconds instead of tedious &amp;amp; error-prone copying-&amp;amp;-pasting.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;SQLIOSim Parser Usage&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Note: A step ahead of me as usual, the latest-&amp;amp;-greatest version from Jens provides more sophisticated output than I've described here; stay tuned for details.&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;OL&gt;
&lt;OL&gt;
&lt;LI&gt;Download &amp;amp; execute SQLIOParserWin.exe &lt;/LI&gt;
&lt;LI&gt;Point to a SQLIOSim log file (Figure 1) &lt;/LI&gt;
&lt;LI&gt;Click the “Parse input file and show results” button to instantly display the ResultsPane window (Figure 2) &lt;/LI&gt;&lt;/OL&gt;&lt;/OL&gt;
&lt;P&gt;I analyze the results in Excel like this:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Type select &amp;amp; copy the results (Ctrl+A, Ctrl+C) &lt;/LI&gt;
&lt;LI&gt;Paste into Excel 
&lt;UL&gt;
&lt;LI&gt;Delete the empty first column &lt;/LI&gt;
&lt;LI&gt;Select all cells by typing Ctrl+A or clicking the Sheet Selector button (that’s the button at the intersection of the rows &amp;amp; columns) 
&lt;UL&gt;
&lt;LI&gt;Right-click a row button, click Row Height…, &amp;amp; change the value to 15 for all rows &lt;/LI&gt;
&lt;LI&gt;With the sheet still selected, type Ctrl+1 to invoke the Format Cells dialog 
&lt;UL&gt;
&lt;LI&gt;On the Number tab, click Number, change “Decimal places” to 0 &amp;amp; check “Use 1000 Separator” &lt;/LI&gt;
&lt;LI&gt;Click the Font tab &amp;amp; select something such as Consolas 9 &lt;/LI&gt;
&lt;LI&gt;Click OK to accept your changes &amp;amp; close the dialog &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;With the sheet’s contents still selected, “right size” the columns by double-clicking the boundary between columns A &amp;amp; B. &lt;/LI&gt;
&lt;LI&gt;Select the TestTime column, type Ctrl+1 again, click the Number tab, select the Custom category, &amp;amp; enter this value for the Type: mm/dd/yyyy hh:mm:ss &lt;/LI&gt;
&lt;LI&gt;Click OK to accept your changes &amp;amp; close the dialog &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;See Figure 3 for the final result.&amp;nbsp; I’ll post the macro code on request.&amp;nbsp; Note that Jens has even added row headers for us.&amp;nbsp; He’s also added a row id so we can sort the results but still if we desire restore the original order.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Alternative Output Formats &lt;BR&gt;&lt;/STRONG&gt;There are two alternative ways to generate output:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Save the result in XML format by providing a path &amp;amp; file in the “Result OutputFileName” textbox &amp;amp; clicking the “Export result file to XML” button. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;or&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Click the “Display result Report” button to invoke an intermediate window which allows you to enter: 
&lt;UL&gt;
&lt;LI&gt;CustomerName &lt;/LI&gt;
&lt;LI&gt;Path to customer logo &lt;/LI&gt;
&lt;LI&gt;Additional project information &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;The final report includes many relevant columns.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Feedback &lt;BR&gt;&lt;/STRONG&gt;We invite your feedback.&amp;nbsp; Let us know what you think.&amp;nbsp; Jens always eager to flex his coding skills.&amp;nbsp; SQLIOSim Parser is great for ad hoc analysis.&amp;nbsp; Future versions may include columns from the SQLIOSim config file which enhance enterprise compatibility.&lt;/P&gt;
&lt;P&gt;Note: These images reflect: SQLIOParserWin.exe v.0.2.3.0.&amp;nbsp; We'll be posting updated images sometime soon.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Figures &lt;BR&gt;&lt;/STRONG&gt;Here are the figures cited above.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_10.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://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_thumb_4.png" width=531 height=401 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_thumb_4.png"&gt;&lt;/A&gt; &lt;BR&gt;Figure 1.&amp;nbsp; Launch SQLIOParserWin.exe to expose the SQLIOSim Parser interface.&amp;nbsp; Point to a SQLIOSim log file &amp;amp; click the “Parse input file and show results” button.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_6.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://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_thumb_2.png" width=535 height=281 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_thumb_2.png"&gt;&lt;/A&gt; &lt;BR&gt;Figure 2.&amp;nbsp; The ResultsPane.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_12.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://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_thumb_5.png" width=969 height=310 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SQLIOSimParserbyJensSuessmeyer_AE13/image_thumb_5.png"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;Figure 3.&amp;nbsp; Sample output after copy-&amp;amp;-pasting the results of SQLIOSim Parser into Excel &amp;amp; manipulating the worksheet’s format as described in the text.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Columns &lt;BR&gt;&lt;/STRONG&gt;SQLIOSim Parse provides the following columns.&amp;nbsp; As stated, we may incorporate columns from the SQLIOSim config file in future versions.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;RowId &lt;/LI&gt;
&lt;LI&gt;DriveLetter &lt;/LI&gt;
&lt;LI&gt;TestTime &lt;/LI&gt;
&lt;LI&gt;FileName &lt;/LI&gt;
&lt;LI&gt;Compression &lt;/LI&gt;
&lt;LI&gt;Encryption &lt;/LI&gt;
&lt;LI&gt;Sparse &lt;/LI&gt;
&lt;LI&gt;TargetIODuration &lt;/LI&gt;
&lt;LI&gt;RunningAverageIODuration &lt;/LI&gt;
&lt;LI&gt;NumberOfTimesIOThrottled &lt;/LI&gt;
&lt;LI&gt;IORequestBlocks &lt;/LI&gt;
&lt;LI&gt;Reads &lt;/LI&gt;
&lt;LI&gt;ScatterReads &lt;/LI&gt;
&lt;LI&gt;Writes &lt;/LI&gt;
&lt;LI&gt;GatherWrites &lt;/LI&gt;
&lt;LI&gt;TotalIOTime &lt;/LI&gt;
&lt;LI&gt;SectorSize &lt;/LI&gt;
&lt;LI&gt;Cylinders &lt;/LI&gt;
&lt;LI&gt;MediaType &lt;/LI&gt;
&lt;LI&gt;SectorPerTrack &lt;/LI&gt;
&lt;LI&gt;TracksPerCylinder &lt;/LI&gt;
&lt;LI&gt;ReadCacheEnabled &lt;/LI&gt;
&lt;LI&gt;WriteCacheEnabled &lt;/LI&gt;
&lt;LI&gt;ReadCount &lt;/LI&gt;
&lt;LI&gt;ReadTime &lt;/LI&gt;
&lt;LI&gt;WriteCount &lt;/LI&gt;
&lt;LI&gt;WriteTime &lt;/LI&gt;
&lt;LI&gt;IdleTime &lt;/LI&gt;
&lt;LI&gt;BytesRead &lt;/LI&gt;
&lt;LI&gt;BytesWritten &lt;/LI&gt;
&lt;LI&gt;SplitIOCount &lt;/LI&gt;
&lt;LI&gt;StorageNumber &lt;/LI&gt;
&lt;LI&gt;StorageManager &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Jimmy May&lt;/STRONG&gt;&lt;FONT size=1&gt;, MCM, MCDBA, MCSE, MCITP: DBA + DB Dev &lt;BR&gt;Principal Performance Engineer: SQL Server &lt;BR&gt;A.C.E.: Assessment Consulting &amp;amp; Engineering Services &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://msinfosec.com/" target=_blank mce_href="http://msinfosec.com"&gt;&lt;FONT size=1&gt;http://msinfosec.com&lt;/FONT&gt;&lt;/A&gt; &lt;BR&gt;&lt;U&gt;&lt;A href="http://blogs.msdn.com/jimmymay" mce_href="http://blogs.msdn.com/jimmymay"&gt;&lt;FONT size=1&gt;http://blogs.msdn.com/jimmymay&lt;/FONT&gt;&lt;/A&gt;&lt;/U&gt; &lt;BR&gt;&lt;A href="http://www.twitter.com/aspiringgeek" target=_blank mce_href="http://www.twitter.com/aspiringgeek"&gt;&lt;FONT size=1&gt;www.twitter.com/aspiringgeek&lt;/FONT&gt;&lt;/A&gt; &lt;BR&gt;&lt;EM&gt;Don’t practice in front of the CIO.&amp;nbsp; A professional prepares ahead of time. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; —&lt;A href="http://blogs.technet.com/wardpond/archive/2009/09/09/pond-s-twelfth-law-in-your-pursuit-of-five-nines-don-t-practice-in-front-of-the-cio.aspx" target=_blank mce_href="http://blogs.technet.com/wardpond/archive/2009/09/09/pond-s-twelfth-law-in-your-pursuit-of-five-nines-don-t-practice-in-front-of-the-cio.aspx"&gt;Pond's 12&lt;FONT size=1&gt;th&lt;/FONT&gt; Law&lt;/A&gt;&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9899985" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Disk+I_2F00_O/default.aspx">Disk I/O</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/News/default.aspx">News</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/_2F00_faster/default.aspx">/faster</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQLIOSim/default.aspx">SQLIOSim</category></item><item><title>Aspiring Geek Speaks This Week Yet Again: Perpetual Technologies (PTI) Back-to-School with Microsoft and Oracle Event</title><link>http://blogs.msdn.com/jimmymay/archive/2009/09/16/aspiring-geek-speaks-this-week-yet-again-perpetual-technologies-pti-back-to-school-event.aspx</link><pubDate>Wed, 16 Sep 2009 16:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9895858</guid><dc:creator>Jimmy May</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9895858.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9895858</wfw:commentRss><description>&lt;P&gt;Yesterday I flew to Minneapolis to speak at &lt;A href="http://blogs.msdn.com/jimmymay/archive/2009/09/14/aspiring-geek-speaks-this-week-pass-minnesota.aspx" mce_href="http://blogs.msdn.com/jimmymay/archive/2009/09/14/aspiring-geek-speaks-this-week-pass-minnesota.aspx"&gt;PASS MN&lt;/A&gt; on &lt;A href="http://blogs.msdn.com/jimmymay/archive/tags/Disk+Partition+Alignment/default.aspx" mce_href="http://blogs.msdn.com/jimmymay/archive/tags/Disk+Partition+Alignment/default.aspx"&gt;disk partition alignment&lt;/A&gt;.&amp;nbsp; I left for the airport immediately afterward to get home to Indianapolis in order to speak at Perpetual Technologies, Inc. (&lt;A href="http://www.perptech.com/" target=_blank mce_href="http://www.perptech.com/"&gt;PTI&lt;/A&gt;) &lt;A href="http://view.exacttarget.com/?j=fe8a1d76766d027f77&amp;amp;m=fef016767d630c&amp;amp;ls=fdeb17747262067576117970&amp;amp;l=feca177176650d79&amp;amp;s=fe3517767566007c741075&amp;amp;jb=ffcf14&amp;amp;ju=fe5913797d6505747517" target=_blank mce_href="http://view.exacttarget.com/?j=fe8a1d76766d027f77&amp;amp;m=fef016767d630c&amp;amp;ls=fdeb17747262067576117970&amp;amp;l=feca177176650d79&amp;amp;s=fe3517767566007c741075&amp;amp;jb=ffcf14&amp;amp;ju=fe5913797d6505747517"&gt;2nd Annual Back to School with Microsoft &amp;amp; Oracle Event&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;PTI is home to some great folks, including my friends Kristin Sheibley, Ray Lucas (an &lt;A href="http://blogs.msdn.com/controlpanel/blogs/www.indypass.org" target=_blank mce_href="www.indypass.org"&gt;IndyPASS&lt;/A&gt; colleague), &amp;amp; MVP nominee Arie “AJ” Jones, proprietor of the &lt;A href="http://www.programmersedge.com/" target=_blank mce_href="http://www.programmersedge.com"&gt;Programmer’s Edge&lt;/A&gt; blog.&amp;nbsp; Here’s AJ’s &lt;A href="http://www.programmersedge.com/?p=1339" mce_href="http://www.programmersedge.com/?p=1339"&gt;post&lt;/A&gt; on the event.&lt;/P&gt;
&lt;P&gt;I’ll be speaking along with many others, including my Microsoft colleagues Tom Pizzato &amp;amp; Joe Carver.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="http://cl.exct.net/?ju=fe5813797d6505747510&amp;amp;ls=fdeb17747262067576117970&amp;amp;m=fef016767d630c&amp;amp;l=feca177176650d79&amp;amp;s=fe3517767566007c741075&amp;amp;jb=ffcf14&amp;amp;t=" mce_href="http://cl.exct.net/?ju=fe5813797d6505747510&amp;amp;ls=fdeb17747262067576117970&amp;amp;m=fef016767d630c&amp;amp;l=feca177176650d79&amp;amp;s=fe3517767566007c741075&amp;amp;jb=ffcf14&amp;amp;t="&gt;&lt;/A&gt;&lt;A href="http://view.exacttarget.com/?j=fe8a1d76766d027f77&amp;amp;m=fef016767d630c&amp;amp;ls=fdeb17747262067576117970&amp;amp;l=feca177176650d79&amp;amp;s=fe3517767566007c741075&amp;amp;jb=ffcf14&amp;amp;ju=fe5913797d6505747517" mce_href="http://view.exacttarget.com/?j=fe8a1d76766d027f77&amp;amp;m=fef016767d630c&amp;amp;ls=fdeb17747262067576117970&amp;amp;l=feca177176650d79&amp;amp;s=fe3517767566007c741075&amp;amp;jb=ffcf14&amp;amp;ju=fe5913797d6505747517"&gt;&lt;IMG title=schoolbus_ border=0 alt=schoolbus_ src="http://image.exct.net/lib/fef016767d630c/i/1/c13a5fa0-d.gif" width=600 height=94 mce_src="http://image.exct.net/lib/fef016767d630c/i/1/c13a5fa0-d.gif"&gt;&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I’ve been asked to speak on two different topics:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Table Partitioning in SQL Server 2005 &amp;amp; 2008 &lt;BR&gt;&lt;/STRONG&gt;Data can be stored by using the storage algorithms provided by Partitioned Tables and Indexes. Partitioning can make large tables and indexes more manageable and scalable.&amp;nbsp; Learn keywords, key concepts, &amp;amp; see meaningful demonstrations on techniques related to table partitioning which are consistent with enhanced performance, scalability, &amp;amp; management. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Combining Transactional Replication &amp;amp; DB Mirroring &lt;BR&gt;&lt;/STRONG&gt;Database mirroring can be used in conjunction with replication to provide availability for the publication database. Database mirroring involves two copies of a single database that typically reside on different computers. Mirroring involves applying the transaction log from every insertion, update, or deletion made on the principal database onto the mirror database.&amp;nbsp; Replication failover to a mirror is supported without the need to reinitialize replication.&amp;nbsp; Learn &amp;amp; see how these High Availability options can work together in SQL Server, as well as pitfalls to avoid.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;If you’re available, c’mon down!.&amp;nbsp; There’s no charge, &amp;amp; you can &lt;A href="http://view.exacttarget.com/?j=fe8a1d76766d027f77&amp;amp;m=fef016767d630c&amp;amp;ls=fdeb17747262067576117970&amp;amp;l=feca177176650d79&amp;amp;s=fe3517767566007c741075&amp;amp;jb=ffcf14&amp;amp;ju=fe5913797d6505747517" target=_blank mce_href="http://view.exacttarget.com/?j=fe8a1d76766d027f77&amp;amp;m=fef016767d630c&amp;amp;ls=fdeb17747262067576117970&amp;amp;l=feca177176650d79&amp;amp;s=fe3517767566007c741075&amp;amp;jb=ffcf14&amp;amp;ju=fe5913797d6505747517"&gt;register here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Here’s the venue:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Junior Achievement Center &lt;BR&gt;7435 North Keystone Avenue &lt;BR&gt;Indianapolis IN 46240 &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Jimmy May&lt;/STRONG&gt;&lt;FONT size=1&gt;, MCM, MCDBA, MCSE, MCITP: DBA + DB Dev &lt;BR&gt;Principal Performance Engineer: SQL Server &lt;BR&gt;A.C.E.: Assessment Consulting &amp;amp; Engineering Services &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://msinfosec.com/" mce_href="http://msinfosec.com"&gt;&lt;FONT size=1&gt;http://msinfosec.com&lt;/FONT&gt;&lt;/A&gt; &lt;BR&gt;&lt;U&gt;&lt;A href="http://blogs.msdn.com/jimmymay" mce_href="http://blogs.msdn.com/jimmymay"&gt;&lt;FONT size=1&gt;http://blogs.msdn.com/jimmymay&lt;/FONT&gt;&lt;/A&gt;&lt;/U&gt; &lt;BR&gt;&lt;A href="http://www.twitter.com/aspiringgeek" mce_href="http://www.twitter.com/aspiringgeek"&gt;&lt;FONT size=1&gt;www.twitter.com/aspiringgeek&lt;/FONT&gt;&lt;/A&gt; &lt;BR&gt;&lt;EM&gt;Don’t practice in front of the CIO.&amp;nbsp; A professional prepares ahead of time. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; —&lt;A href="http://blogs.technet.com/wardpond/archive/2009/09/09/pond-s-twelfth-law-in-your-pursuit-of-five-nines-don-t-practice-in-front-of-the-cio.aspx" target=_blank mce_href="http://blogs.technet.com/wardpond/archive/2009/09/09/pond-s-twelfth-law-in-your-pursuit-of-five-nines-don-t-practice-in-front-of-the-cio.aspx"&gt;Pond's 12&lt;FONT size=1&gt;th&lt;/FONT&gt; Law&lt;/A&gt;&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9895858" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/jimmymay/attachment/9895858.ashx" length="387307" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Speaking/default.aspx">Speaking</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Table+Partitioning/default.aspx">Table Partitioning</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Replication/default.aspx">Replication</category></item><item><title>sys.dm_db_index_operational_stats: Kick Your Assumptions: Part 1</title><link>http://blogs.msdn.com/jimmymay/archive/2009/08/03/sys-dm-db-index-operational-stats-kick-your-assumptions-part-1.aspx</link><pubDate>Mon, 03 Aug 2009 16:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9856212</guid><dc:creator>Jimmy May</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9856212.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9856212</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;A two-part tale in which your humble correspondent interrogates&amp;nbsp; &lt;BR&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;databases &amp;amp; Very Smart Persons (VSPs), &amp;amp; is forced to kick his ass- &lt;BR&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;umptions regarding a popular DMF.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Executive Summary &lt;BR&gt;&lt;/STRONG&gt;Documentation for the DMF sys.dm_db_index_operational_stats in BOL &lt;A href="http://msdn.microsoft.com/en-us/library/ms174281.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms174281.aspx"&gt;here&lt;/A&gt; &amp;amp; &lt;A href="http://msdn.microsoft.com/en-us/library/ms190328.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms190328.aspx"&gt;here&lt;/A&gt; as well as elsewhere is incorrect.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In fact, &lt;EM&gt;ops stats will &lt;U&gt;not&lt;/U&gt; return information for all indexes, but lists only those indexes (&amp;amp; their partitions) in the metadata cache.&lt;/EM&gt;&amp;nbsp; On a newly re-started server, no user indexes will appear in the result set.&amp;nbsp; This contradicts documentation.&lt;/P&gt;
&lt;P&gt;An outer join to a system object such as sys.indexes on object_id &amp;amp; index_id is required to list all indexes &amp;amp; partitions.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Using op stats Returns Info ONLY on Indexes in the Metadata Cache &lt;BR&gt;&lt;/STRONG&gt;The following returns names &amp;amp; metadata &lt;EM&gt;only for those indexes (&amp;amp; their partitions) in the metadata cache&lt;/EM&gt;.&amp;nbsp; On a newly re-started, this will consist only of system objects.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;--ops stats returns info only for a db’s indexes &amp;amp; their part’ns in cache &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --this contradicts documentation &lt;BR&gt;--note: db context here is not mandatory &lt;BR&gt;USE AdventureWorks; &lt;BR&gt;GO &lt;BR&gt;DECLARE @dbid sysname = DB_ID();&amp;nbsp; --SQL 2008 syntax &lt;BR&gt;--DECLARE @dbid sysname;&amp;nbsp; SET @dbid = DB_ID(); &lt;BR&gt;SELECT DB_NAME(@dbid) as db_name &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , OBJECT_NAME(object_id) as obj_name &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM sys.dm_db_index_operational_stats &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (@dbid, NULL, NULL, NULL) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ORDER BY obj_name;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Use op stats for Info on All Indexes—System &amp;amp; User Objects&lt;BR&gt;&lt;/STRONG&gt;Obtaining information for &lt;EM&gt;all&lt;/EM&gt; indexes (&amp;amp; their partitions) in a specific database—regardless of metadata cache status—including all system &amp;amp; user indexes, requires a query such as the following which uses an outer join to sys.indexes.&amp;nbsp; (Note that both of the following queries are sensitive to the database context.&amp;nbsp; Note also not validating the db &amp;amp; passing an invalid id to the DMF will produce undesired results.)&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;--to get ops stats to work as advertised &lt;BR&gt;--return all rows for all indexes (&amp;amp; partitions) for a specific db &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --use an outer join between ops stats &amp;amp; sys.indexes &lt;BR&gt;--note: db context is relevant &lt;BR&gt;USE AdventureWorks; &lt;BR&gt;GO &lt;BR&gt;DECLARE @dbid sysname = DB_ID();&amp;nbsp; --SQL 2008 syntax &lt;BR&gt;--DECLARE @dbid sysname;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET @dbid = DB_ID(); &lt;BR&gt;SELECT DB_NAME(@dbid) as db_name &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , OBJECT_NAME(i.object_id) as obj_name &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , ops.* &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM sys.dm_db_index_operational_stats &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (@dbid, NULL, NULL, NULL) as ops &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;RIGHT JOIN sys.indexes&lt;/STRONG&gt; as i &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ON ops.object_id = i.object_id AND ops.index_id = i.index_id &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ORDER BY obj_name , i.index_id , i.partition_number;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Use ops stats for Info on All User Indexes &lt;BR&gt;&lt;/STRONG&gt;The following uses op stats returns information for all &lt;EM&gt;user&lt;/EM&gt; indexes in a specific database—regardless of metadata cache status:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;--use op stats to return all rows for all *user* indexes (&amp;amp; partitions)&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --for a specific db &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --combine outer join between ops stats &amp;amp; sys.indexes &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --w/ OBJECTPROPERTY &lt;BR&gt;--note: db context is relevant &lt;BR&gt;USE AdventureWorks; &lt;BR&gt;GO &lt;BR&gt;DECLARE @dbid sysname = DB_ID();&amp;nbsp; --SQL 2008 syntax &lt;BR&gt;--DECLARE @dbid sysname;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET @dbid = DB_ID(); &lt;BR&gt;SELECT DB_NAME(@dbid) as db_name &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , OBJECT_NAME(i.object_id) as obj_name &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , ops.* &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM sys.dm_db_index_operational_stats &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (@dbid, NULL, NULL, NULL) as ops &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;RIGHT JOIN sys.indexes&lt;/STRONG&gt; as i &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ON ops.object_id = i.object_id AND ops.index_id = i.index_id &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE OBJECTPROPERTY(i.object_id,'IsUserTable') = 1 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ORDER BY obj_name , ops.index_id , ops.partition_number;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;To Be Continued... &lt;BR&gt;&lt;/STRONG&gt;Stay tuned for Part 2 for additional details &amp;amp; documentation, including a walk-through, widespread misconceptions even amongst VSPs, &amp;amp; internals.&lt;/P&gt;
&lt;P&gt;Jimmy May&lt;FONT size=1&gt;, MCM, MCDBA, MCSE, MCITP: DBA + DB Dev &lt;BR&gt;Senior Performance Consultant: SQL Server &lt;BR&gt;A.C.E.: Assessment Consulting &amp;amp; Engineering Services &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://msinfosec.com/" mce_href="http://msinfosec.com/"&gt;&lt;FONT size=1&gt;http://msinfosec.com&lt;/FONT&gt;&lt;/A&gt; &lt;BR&gt;&lt;A href="http://blogs.msdn.com/jimmymay" mce_href="http://blogs.msdn.com/jimmymay"&gt;&lt;FONT size=1&gt;http://blogs.msdn.com/jimmymay&lt;/FONT&gt;&lt;/A&gt;&lt;I&gt;&lt;FONT size=1&gt; &lt;BR&gt;Politics leads you in the direction of a belief.&amp;nbsp;&amp;nbsp; Data, if you follow them, lead you to truth. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; —Michael Crichton&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9856212" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/_2F00_faster/default.aspx">/faster</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/DMOs_2F00_DMFs_2F00_DMVs/default.aspx">DMOs/DMFs/DMVs</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Indexes/default.aspx">Indexes</category></item><item><title>SQL CAT New Whitepaper: Data Compression: Strategy, Capacity Planning and Best Practices by Sanjay Mishra, et al.</title><link>http://blogs.msdn.com/jimmymay/archive/2009/05/29/sql-cat-new-whitepaper-data-compression-strategy-capacity-planning-and-best-practices-by-sanjay-mishra-et-al.aspx</link><pubDate>Fri, 29 May 2009 21:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9655847</guid><dc:creator>Jimmy May</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9655847.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9655847</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Data Compression: Strategy, Capacity Planning and Best Practices&lt;/STRONG&gt; &lt;BR&gt;Hot off the presses, the SQL CAT team has just published a new whitepaper for which I had the opportunity to provide a technical review.&amp;nbsp; The author is SQL CAT best practices maven Sanjay Mishra.&amp;nbsp; Contributors include SQL CAT member Sunil Agarwal and architects Marcel van der Holst &amp;amp; Peter Carlin.&amp;nbsp; Besides yours truly, tech reviewers were Stuart Ozer, Lindsey Allen, Juergen Thomas, Thomas Kejser, Burzin Patel, Mike Ruthruff, &amp;amp; Prem Mehra of SQL CAT as well as &lt;A href="http://blogs.msdn.com/joesack/" target=_blank mce_href="http://blogs.msdn.com/joesack/"&gt;Joseph Sack&lt;/A&gt;, Cameron Gardiner, MVP &lt;A href="http://glennberrysqlperformance.spaces.live.com/" target=_blank mce_href="http://glennberrysqlperformance.spaces.live.com/"&gt;Glenn Berry&lt;/A&gt;, &lt;A href="http://sqlskills.com/blogs/paul" target=_blank mce_href="http://sqlskills.com/blogs/paul"&gt;Paul Randal&lt;/A&gt; (&lt;A href="http://blogs.msdn.com/controlpanel/blogs/www.sqlskills.com" target=_blank mce_href="http://blogs.msdn.com/controlpanel/blogs/www.sqlskills.com"&gt;SQLskills.com&lt;/A&gt;), &amp;amp; David P Smith (&lt;A href="http://www.serviceu.com/" target=_blank mce_href="http://www.serviceu.com/"&gt;ServiceU Corporation&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Put the Big Squeeze on Your Data&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;IMG border=0 alt="" src="http://www.theage.com.au/ffxImage/urlpicture_id_1057783353617_2003/07/11/12VICE.jpg" width=200 height=263&gt; &lt;BR&gt;&lt;FONT size=1&gt;&amp;lt;&lt;A href="http://www.theage.com.au/" target=_blank&gt;image source&lt;/A&gt;&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The data compression feature in the Microsoft SQL Server 2008 database software can help reduce the size of the database as well as improve the performance of I/O intensive workloads. However, extra CPU resources are required on the database server to compress and decompress the data, while data is exchanged with the application. Therefore, it is important to understand the workload characteristics when deciding which tables to compress. This white paper provides guidance on the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;How to decide which tables and indexes to compress&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;How to estimate the resources required to compress a table&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;How to reclaim space released by data compression&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;The performance impacts of data compression on typical workloads&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;See Sanjay’s post at the &lt;A href="http://sqlcat.com/whitepapers/archive/2009/05/29/data-compression-strategy-capacity-planning-and-best-practices.aspx" target=_blank&gt;SQL CAT blog&lt;/A&gt; For more information, refer to the whitepaper &lt;A href="http://msdn.microsoft.com/en-us/library/dd894051.aspx"&gt;Data Compression: Strategy, Capacity Planning and Best Practices&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Administrivia&lt;/STRONG&gt; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693" mce_href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693"&gt;&lt;FONT size=1&gt;Jimmy May&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;&lt;B&gt;, &lt;/B&gt;MCDBA, MCSE, MCITP: DBA + DB Dev &lt;BR&gt;Senior Performance Consultant: SQL Server &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/ace_team" mce_href="http://blogs.msdn.com/ace_team"&gt;&lt;FONT size=1&gt;A.C.E.&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;: Assessment, Consulting, &amp;amp; Engineering Services &lt;BR&gt;&lt;U&gt;&lt;A href="http://msinfosec.com/"&gt;http://msinfosec.com&lt;/A&gt; &lt;BR&gt;&lt;A href="http://blogs.msdn.com/jimmymay" mce_href="http://blogs.msdn.com/jimmymay"&gt;http://blogs.msdn.com/jimmymay&lt;/A&gt;&lt;/U&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=1&gt;This post was written with the &lt;/FONT&gt;&lt;A href="http://www.practicethis.com/" mce_href="http://www.practicethis.com/"&gt;&lt;FONT size=1&gt;PracticeThis.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;A href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer" mce_href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer"&gt;&lt;FONT size=1&gt;plugin for Windows Live Writer&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;The first thing to do in a cardiac arrest is to take your own pulse. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;—The Fat Man, &lt;EM&gt;House of God&lt;/EM&gt;, Samuel Shem&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9655847" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+CAT/default.aspx">SQL CAT</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Scalability/default.aspx">Scalability</category></item><item><title>Disk Partition Alignment (Sector Alignment): Make the Case: Save Hundreds of Thousands of Dollars</title><link>http://blogs.msdn.com/jimmymay/archive/2009/05/08/disk-partition-alignment-sector-alignment-make-the-case-with-this-template.aspx</link><pubDate>Fri, 08 May 2009 21:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9597449</guid><dc:creator>Jimmy May</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9597449.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9597449</wfw:commentRss><description>&lt;P&gt;I recently collaborated with Microsoft PFE &lt;A href="http://blogs.msdn.com/djanik" target=_blank mce_href="http://blogs.msdn.com/djanik"&gt;Daniel Janik&lt;/A&gt; to create a template to make the case for disk partition alignment.&amp;nbsp; Perhaps your customers or stakeholders within your organization can benefit.&amp;nbsp; This work was recently broadcast throughout PFE DLs as well as the April 2009 &lt;EM&gt;SQLRAP Newsletter&lt;/EM&gt;.&amp;nbsp; Thanks also to &lt;A href="http://blogs.msdn.com/cindygross" target=_blank mce_href="http://blogs.msdn.com/cindygross"&gt;Cindy Gross&lt;/A&gt; &amp;amp; &lt;A href="http://blogs.technet.com/wardpond" target=_blank mce_href="http://blogs.technet.com/wardpond"&gt;Ward Pond&lt;/A&gt; for their keen eyes.&lt;/P&gt;
&lt;P&gt;This information is available elsewhere on my blog &amp;amp; the Internets.&amp;nbsp; It’s provided here as public service for the first time for convenient access.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Make the Case for Disk Partition Alignment (Sector Alignment)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Introduction&lt;/EM&gt; &lt;BR&gt;&lt;/STRONG&gt;Disk partition alignment is a best practice and must be applied during disk setup.&amp;nbsp; Partition alignment provides a significant increase in system performance.&amp;nbsp; Microsoft engineers have shown again-&amp;amp;-again that disk alignment can improves performance by not merely the nominal 10 – 15% in RAID systems claimed in official documentation, but commonly 20%, 30%, or more.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;How to Save Hundreds of Thousands of Dollars &lt;BR&gt;&lt;/EM&gt;&lt;/STRONG&gt;If your SAN cost $1,000,000, &amp;amp; partition alignment provides 10%, 20%, 30%, or more throughput &amp;amp; IOPs at better latency, then alignment &lt;EM&gt;arguably provides a direct savings of $100,000, $200,000,&amp;nbsp; $300,000 or more&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;Likewise, failure to do so is like throwing that money away. &lt;/P&gt;
&lt;P&gt;Look at it another way.&amp;nbsp; Say you have 24 disks on three shelves dedicated to SQL Server.&amp;nbsp; Wouldn't it be great to have the equivalent of an additional shelf of disks?&amp;nbsp; Say you have 200 disks.&amp;nbsp; How different would your life be if you were able to get the performance of the equivalent of 250 disks or more?&amp;nbsp; Imagine the perf gain for hundreds or thousands of disks.&amp;nbsp; As my friend Danielle Nguyen said, we can "make huge perf gains and save huge $$ on additional hardware...especially when a data center has 100s of servers".&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Typical Results &lt;/EM&gt;&lt;BR&gt;&lt;/STRONG&gt;Here’re the results of an experiment which have been shown to be typical.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Data was collected for disk latency, duration, and other relevant metrics. The Avg. Disk Transfers/sec counters of the PhysicalDisk and LogicalDisk performance objects were used to measure disk latency.&amp;nbsp; Disk latency is a fundamental measure of disk performance. &lt;BR&gt;The experiment was simple, yet convincing.&amp;nbsp; The results were consistent and significant. &lt;/P&gt;
&lt;P&gt;Analysis resulted in the following conclusions:&lt;/P&gt;
&lt;LI&gt;Disk alignment produced significant improvement compared to nonaligned disks. The measurements document enhancements in excess of 30% for disk latency and duration. &lt;/LI&gt;
&lt;LI&gt;The performance of six aligned disks was comparable to or better than eight nonaligned disks. 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_4.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://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_thumb_1.png" width=537 height=333 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_thumb_1.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;The Fundamental Physics &lt;/STRONG&gt;&lt;BR&gt;&lt;/EM&gt;When the file allocation unit (cluster) size is defined at 64KB per best practice yet partition alignment is not performed, multiple IOPs are required to satisfy single requests. &lt;/P&gt;
&lt;P&gt;The following diagrams document the phenomena for cluster sizes of 4KB &amp;amp; 64KB.&amp;nbsp; &lt;EM&gt;For the latter, each-&amp;amp;-ever I/O request requires two IOPs!&lt;/EM&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_12.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://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_thumb_4.png" width=557 height=156 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_10.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://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_thumb.png" width=563 height=185 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/DiskPartitionAlignmentSectorAlignmentMak_C87E/image_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;The Remedy &lt;BR&gt;&lt;/EM&gt;&lt;/STRONG&gt;The remedy is simple but has a big gotcha.&amp;nbsp; The good news is that partition alignment is simple to perform; the bad news is that partition alignment must be done at partition creation time, prior to partitions being formatted. This is great if you have a new SAN, but it might be painful to convert large amounts of existing data on misaligned partitions.&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Use the command line utility DiskPart to implement alignment when creating new partitions.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Two Essential Correlations; Three Variables: Partition Offset, File Allocation Unit Size, &amp;amp; Stripe Unit Size &lt;BR&gt;&lt;/EM&gt;&lt;/STRONG&gt;There are two correlations which when satisfied are a fundamental precondition for optimal disk I/O performance.&amp;nbsp; &lt;STRONG&gt;The results of the following calculations must result in an integer value:&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&lt;STRONG&gt;Partition_Offset ÷ Stripe_Unit_Size &lt;BR&gt;Stripe_Unit_Size ÷ File_Allocation_Unit_Size &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Of the two, the first is by far the most important for optimal performance. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Starting Partition Offset &lt;BR&gt;&lt;/STRONG&gt;Use this formula to obtain the starting partition offsets for existing partitions:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face="Lucida Console"&gt;wmic partition get BlockSize, StartingOffset, Name, Index&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;File Allocation Unit Size &lt;BR&gt;&lt;/STRONG&gt;Run this command for each drive to see the file allocation unit size reported in bytes per cluster.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&lt;STRONG&gt;fsutil fsinfo ntfsinfo c: &lt;BR&gt;fsutil fsinfo ntfsinfo d: &lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;etc...&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Stripe Unit Size &lt;BR&gt;&lt;/STRONG&gt;The value for stripe unit size must be obtained from your SAN man (or woman).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Dynamic Volumes&lt;/STRONG&gt; &lt;BR&gt;Note that the dynamic volumes complicate matters a bit.&amp;nbsp; See &lt;A href="http://blogs.msdn.com/jimmymay/archive/2008/12/04/disk-partition-alignment-sector-alignment-for-sql-server-part-4-essentials-cheat-sheet.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2008/12/04/disk-partition-alignment-sector-alignment-for-sql-server-part-4-essentials-cheat-sheet.aspx"&gt;this post&lt;/A&gt; for more information.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;A Common Misalignment Example &lt;BR&gt;&lt;/EM&gt;&lt;/STRONG&gt;The following demonstrates a common misalignment scenario: Given a starting partition offset for 32,256 bytes (31.5 KB) and stripe unit size of 65,536 bytes (64 KB), the result is 0.4921875. This is not an integer; therefore the offset &amp;amp; strip unit size are not correlated. This is consistent with misalignment.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Disk I/O Subsystem Configuration &lt;BR&gt;&lt;/EM&gt;&lt;/STRONG&gt;Configuring optimal disk performance is often viewed as much art as science.&amp;nbsp; Yet an understanding of best practices can result in significant improvements in performance.&amp;nbsp; Some of the many factors which affect disk I/O performance include the number, size, &amp;amp; speed of disks; file allocation unit size; configuration of HBAs &amp;amp; fabric switches; network bandwidth; cache on disk, controllers, &amp;amp; SAN; whether disks are dedicated, shared, or virtualized; RAID level; bus speed; number of paths from disk I/O subsystem to server; driver versions for all components, stripe size, stripe unit size, &amp;amp; workload. Disk partition alignment is the foundation for optimal disk performance.&amp;nbsp; Failure to do so is incompatible with performance &amp;amp; scalability.&lt;/P&gt;&lt;/LI&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;References&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;¡New!&lt;/EM&gt;&amp;nbsp;&lt;BR&gt;&lt;STRONG&gt;&lt;EM&gt;Disk Partition Alignment (Sector Alignment) Best Practices: Characterization, Analysis, and Configuration for Optimal Performance of Windows Disks—Technical Note Series&lt;BR&gt;&lt;/EM&gt;&lt;/STRONG&gt;&lt;A href="http://sqlcat.com/whitepapers/archive/2009/05/11/disk-partition-alignment-best-practices-for-sql-server.aspx"&gt;http://sqlcat.com/whitepapers/archive/2009/05/11/disk-partition-alignment-best-practices-for-sql-server.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Disk Partition Alignment (Sector Alignment) for SQL Server: Part 1: Slide Deck &lt;BR&gt;&lt;A title=http://blogs.msdn.com/jimmymay/archive/2008/10/14/disk-partition-alignment-for-sql-server-slide-deck.aspx href="http://blogs.msdn.com/jimmymay/archive/2008/10/14/disk-partition-alignment-for-sql-server-slide-deck.aspx" mce_href="http://blogs.msdn.com/jimmymay/archive/2008/10/14/disk-partition-alignment-for-sql-server-slide-deck.aspx"&gt;http://blogs.msdn.com/jimmymay/archive/2008/10/14/disk-partition-alignment-for-sql-server-slide-deck.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Disk Partition Alignment (Sector Alignment) for SQL Server: Part 4: Essentials (Cheat Sheet) &lt;BR&gt;&lt;A title=http://blogs.msdn.com/jimmymay/archive/2008/12/04/disk-partition-alignment-sector-alignment-for-sql-server-part-4-essentials-cheat-sheet.aspx href="http://blogs.msdn.com/jimmymay/archive/2008/12/04/disk-partition-alignment-sector-alignment-for-sql-server-part-4-essentials-cheat-sheet.aspx" mce_href="http://blogs.msdn.com/jimmymay/archive/2008/12/04/disk-partition-alignment-sector-alignment-for-sql-server-part-4-essentials-cheat-sheet.aspx"&gt;http://blogs.msdn.com/jimmymay/archive/2008/12/04/disk-partition-alignment-sector-alignment-for-sql-server-part-4-essentials-cheat-sheet.aspx&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;An updated version of the Disk Partition tool for Windows Server 2003 is available &lt;BR&gt;&lt;/EM&gt;&lt;A href="http://support.microsoft.com/default.aspx?scid=kb;en-us;923076&amp;amp;sd=rss&amp;amp;spid=3198" mce_href="http://support.microsoft.com/default.aspx?scid=kb;en-us;923076&amp;amp;sd=rss&amp;amp;spid=3198"&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;923076&amp;amp;sd=rss&amp;amp;spid=3198&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Pre-deployment I/O Best Practices (&lt;I&gt;Volume Alignment and NTFS Allocation Unit Size&lt;/I&gt;) &lt;BR&gt;&lt;A href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/pdpliobp.mspx" mce_href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/pdpliobp.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/pdpliobp.mspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Disk Subsystem Performance Analysis for Windows &lt;A href="http://www.microsoft.com/whdc/archive/subsys_perf.mspx" mce_href="http://www.microsoft.com/whdc/archive/subsys_perf.mspx"&gt;&lt;BR&gt;http://www.microsoft.com/whdc/archive/subsys_perf.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/EM&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Administrivia&lt;/STRONG&gt; &lt;/EM&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;&amp;lt;Note: Edited for clarity on 20090510&amp;gt;&lt;BR&gt;&amp;lt;Note: Link to whitepaper added &amp;amp; "Disk I/O Subsystem Configuration" section added&amp;gt;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693" mce_href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693"&gt;&lt;FONT size=1&gt;Jimmy May&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;&lt;B&gt;, &lt;/B&gt;MCDBA, MCSE, MCITP: DBA + DB Dev &lt;BR&gt;Senior Performance Consultant: SQL Server &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/ace_team" mce_href="http://blogs.msdn.com/ace_team"&gt;&lt;FONT size=1&gt;A.C.E.&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;: Assessment, Consulting, &amp;amp; Engineering Services &lt;BR&gt;&lt;U&gt;&lt;A href="http://blogs.msdn.com/jimmymay" mce_href="http://blogs.msdn.com/jimmymay"&gt;http://blogs.msdn.com/jimmymay&lt;/A&gt;&lt;/U&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;This post was written with the &lt;/FONT&gt;&lt;A href="http://www.practicethis.com/" mce_href="http://www.practicethis.com/"&gt;&lt;FONT size=1&gt;PracticeThis.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;A href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer" mce_href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer"&gt;&lt;FONT size=1&gt;plugin for Windows Live Writer&lt;/FONT&gt;&lt;/A&gt;&lt;EM&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;If it is fast and ugly, they will use it and curse you; if it is slow, they will not use it. &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; —Computer science professor, billionaire, &amp;amp; entrepreneur David Cheriton &lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9597449" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Disk+I_2F00_O/default.aspx">Disk I/O</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Disk+Partition+Alignment/default.aspx">Disk Partition Alignment</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/_2F00_faster/default.aspx">/faster</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>A Language for Software Architecture by JD Meier in The Architecture Journal</title><link>http://blogs.msdn.com/jimmymay/archive/2009/04/28/a-language-for-software-architecture-by-jd-meier-in-the-architecture-journal.aspx</link><pubDate>Tue, 28 Apr 2009 16:41:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9573573</guid><dc:creator>Jimmy May</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9573573.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9573573</wfw:commentRss><description>&lt;p&gt;J.D. Meier is a Principal Program Manager for Microsoft’s &lt;a href="http://msdn.microsoft.com/en-us/practices/default.aspx" target="_blank"&gt;Patterns &amp;amp; Practices&lt;/a&gt; team.&amp;#160; He’s a great writer &amp;amp; a clear thinker.&amp;#160; J.D.’s &lt;a href="http://sourcesofinsight.com/" target="_blank"&gt;Sources of Insight&lt;/a&gt; is devoted to getting results &amp;amp; balancing life.&lt;/p&gt;  &lt;p&gt;His latest-&amp;amp;-greatest publication is available now:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;A Language for Software Architecture        &lt;br /&gt;&lt;/em&gt;J.D. Meier, &lt;em&gt;The Architecture Journal&lt;/em&gt;, #19, TechEd 2009 Special Edition       &lt;br /&gt;Article URL:&amp;#160; &lt;a title="http://short.ie/msdnlang4arch" href="http://short.ie/msdnlang4arch"&gt;http://short.ie/msdnlang4arch&lt;/a&gt;       &lt;br /&gt;Blog URL:&amp;#160; &lt;a title="http://short.ie/jdlang4arch" href="http://short.ie/jdlang4arch"&gt;http://short.ie/jdlang4arch&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;His starts out like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;It's a simple language for helping you get in the ballpark when you're traversing the very large space of software architecture.&amp;#160;&amp;#160; By framing and naming the space, we can more effectively share our principles, patterns, and practices for application architecture.&amp;#160;&amp;#160; This also helps consolidate all the great information spread over time and space and threads and heads.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I know how important it is to establish a common framework for communication.&amp;#160; In my deck on &lt;a href="http://blogs.msdn.com/jimmymay/archive/2008/10/14/disk-partition-alignment-for-sql-server-slide-deck.aspx" target="_blank"&gt;disk partition alignment&lt;/a&gt; &amp;amp; forthcoming white paper, I have a section devoted exactly to doing so.&amp;#160; For example, engineers must discriminate between ambiguous &amp;amp; often misused terms such as block, sector, partition, &amp;amp; volume.&lt;/p&gt;  &lt;p&gt;I recently returned from three weeks in the Middle East.&amp;#160; During many of our meetings, a translator was required.&amp;#160; I’m seldom accused of talking succinctly, yet for every word I spoke, it seemed the translator needed ten.&amp;#160; I was reminded of the translation preceding the &lt;a href="http://www.youtube.com/watch?v=fVo6RVISZj4" target="_blank"&gt;fight scene&lt;/a&gt; in Dwayne “The Rock” Johnson’s &lt;em&gt;&lt;a href="http://www.imdb.com/title/tt0327850/" target="_blank"&gt;The Rundown&lt;/a&gt;&lt;/em&gt;.&amp;#160; (Apparently nothing was lost in translation—the gig turned out swell.)&lt;/p&gt;  &lt;p&gt;J.D.’s work transcends my anecdotes by a wide margin.&amp;#160; The best practices he proselytizes are practical, scalable, &amp;amp; platform agnostic.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;…This also helps consolidate all the great information spread over time and space and threads and heads.&amp;#160;&amp;#160; More importantly, if we simplify how we talk about architecture, we can move up the stack as well as pave paths for others and help mentor others in our field.&amp;#160; Instead of asking basic questions like what is architecture, we can ask things like how do we define archetypes for the cloud or how do improve product line engineering for common systems and application types?&amp;#160; In our case, we're using the language to help rationalize our portfolio of assets in our patterns &amp;amp; practices product line…&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;J.D. lucidly outlines the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Why the Map &lt;/li&gt;    &lt;li&gt;Usage Scenarios &lt;/li&gt;    &lt;li&gt;Key Concepts &lt;/li&gt;    &lt;li&gt;The Map &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;His &lt;a href="http://short.ie/jdlang4arch" target="_blank"&gt;post&lt;/a&gt; &amp;amp; &lt;a href="http://short.ie/msdnlang4arch" target="_blank"&gt;article&lt;/a&gt; are not merely worth reading &amp;amp; re-reading, but &lt;em&gt;learning&lt;/em&gt;.&amp;#160; Don’t take my word for it.&amp;#160; Decide for yourself &amp;amp; share it with your team.&amp;#160; Doing so will provide a scalable framework for effective communication and success.&lt;/p&gt; &lt;em&gt;If it is fast and ugly, they will use it and curse you; if it is slow, they will not use it.    &lt;br /&gt;&lt;/em&gt;&amp;#160;&amp;#160;&amp;#160; —Computer science professor, billionaire, &amp;amp; entrepreneur David Cheriton   &lt;p&gt;&lt;strong&gt;Administrivia&lt;/strong&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693"&gt;&lt;font size="1"&gt;Jimmy May&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;&lt;b&gt;, &lt;/b&gt;MCDBA, MCSE, MCITP: DBA + DB Dev         &lt;br /&gt;Senior Performance Consultant: SQL Server         &lt;br /&gt;&lt;/font&gt;&lt;a href="http://blogs.msdn.com/ace_team"&gt;&lt;font size="1"&gt;A.C.E.&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;: Assessment, Consulting, &amp;amp; Engineering Services        &lt;br /&gt;&lt;u&gt;&lt;a href="http://blogs.msdn.com/jimmymay"&gt;http://blogs.msdn.com/jimmymay&lt;/a&gt;&lt;/u&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="1"&gt;This post was written with the &lt;/font&gt;&lt;a href="http://www.practicethis.com/"&gt;&lt;font size="1"&gt;PracticeThis.com&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt; &lt;/font&gt;&lt;a href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer"&gt;&lt;font size="1"&gt;plugin for Windows Live Writer&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9573573" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/News/default.aspx">News</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Engineering+Discipline/default.aspx">Engineering Discipline</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Wait Stats by Joe Sack</title><link>http://blogs.msdn.com/jimmymay/archive/2009/04/27/wait-stats-by-joe-sack.aspx</link><pubDate>Mon, 27 Apr 2009 18:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9570985</guid><dc:creator>Jimmy May</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9570985.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9570985</wfw:commentRss><description>&lt;P&gt;Wait stats rock.&amp;nbsp; As I shared recently with friends, when it comes to SQL Server performance, wait stats are the #1 arrow in my quiver, the first tool out of my toolbox, the &lt;A href="http://www.google.com/url?q=http://www.youtube.com/watch%3Fv%3DuR1Q4M7DaRQ&amp;amp;ei=Dc30Sei7Ho6WMbfwocgP&amp;amp;sa=X&amp;amp;oi=video_result&amp;amp;resnum=2&amp;amp;ct=thumbnail&amp;amp;usg=AFQjCNHL0FuyE7RRweA9wbAv_kpOO0xmpw" target=_blank mce_href="http://www.google.com/url?q=http://www.youtube.com/watch%3Fv%3DuR1Q4M7DaRQ&amp;amp;ei=Dc30Sei7Ho6WMbfwocgP&amp;amp;sa=X&amp;amp;oi=video_result&amp;amp;resnum=2&amp;amp;ct=thumbnail&amp;amp;usg=AFQjCNHL0FuyE7RRweA9wbAv_kpOO0xmpw"&gt;Vera&lt;/A&gt; of guns (see the &lt;A href="http://en.wikipedia.org/wiki/Firefly_(TV_series)" target=_blank mce_href="http://en.wikipedia.org/wiki/Firefly_(TV_series)"&gt;Firefly&lt;/A&gt; episode &lt;A href="http://en.wikipedia.org/wiki/Our_Mrs._Reynolds" target=_blank mce_href="http://en.wikipedia.org/wiki/Our_Mrs._Reynolds"&gt;Our Mrs. Reynolds&lt;/A&gt; to divine that reference).&lt;/P&gt;
&lt;P&gt;In a previous &lt;A href="http://blogs.msdn.com/jimmymay/archive/2009/04/26/wait-stats-introductory-references.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2009/04/26/wait-stats-introductory-references.aspx"&gt;post&lt;/A&gt; I stated the importance of wait stats &amp;amp; cited several references.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/joesack" target=_blank mce_href="http://blogs.msdn.com/joesack"&gt;Joe Sack&lt;/A&gt; has recently published the best deck on the topic I’ve seen to date:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Presentation Deck for "Performance Tuning with Wait Statistics"&lt;/EM&gt; &lt;BR&gt;&lt;A title=http://blogs.msdn.com/joesack/archive/2009/04/22/presentation-deck-for-performance-tuning-with-wait-statistics.aspx href="http://blogs.msdn.com/joesack/archive/2009/04/22/presentation-deck-for-performance-tuning-with-wait-statistics.aspx" mce_href="http://blogs.msdn.com/joesack/archive/2009/04/22/presentation-deck-for-performance-tuning-with-wait-statistics.aspx"&gt;http://blogs.msdn.com/joesack/archive/2009/04/22/presentation-deck-for-performance-tuning-with-wait-statistics.aspx&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Joe’s presentation includes:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;What are wait stats? &lt;/LI&gt;
&lt;LI&gt;What to collect?&amp;nbsp; How to collect? &lt;/LI&gt;
&lt;LI&gt;Where to look for wait stats info, what to collect, what to ignore, &amp;amp; what to pay attention to… &lt;/LI&gt;
&lt;LI&gt;Top 10 Patterns from the field 
&lt;UL&gt;
&lt;LI&gt;Parallelism: CXPACKET &lt;/LI&gt;
&lt;LI&gt;CPU pressure: SOS_SCHEDULER_YIELD &lt;/LI&gt;
&lt;LI&gt;Network I/O: ASYNC_NETWORK_IO &lt;/LI&gt;
&lt;LI&gt;Long term blocking: LCK_X, LCK_M_U, &amp;amp; LCK_M_X &lt;/LI&gt;
&lt;LI&gt;Buffer I/O latch: PAGEIOLATCH_X &lt;/LI&gt;
&lt;LI&gt;Buffer latch: PAGELATCH_X &lt;/LI&gt;
&lt;LI&gt;Non-buffer latch: LATCH_X &lt;/LI&gt;
&lt;LI&gt;Memory grants: RESOURCE_SEMAPHORE &lt;/LI&gt;
&lt;LI&gt;Tran log disk subsystem: WRITELOG &amp;amp; LOGBUFFER &lt;/LI&gt;
&lt;LI&gt;General I/O issues: ASYNC_IO_COMPLETION &amp;amp; IO_COMPLETION &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;EM&gt;But wait, there’s more!&lt;/EM&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;References &lt;/LI&gt;
&lt;LI&gt;Usage Scenarios &lt;/LI&gt;
&lt;LI&gt;Benefits &lt;/LI&gt;
&lt;LI&gt;Wait stats in a nutshell &lt;/LI&gt;
&lt;LI&gt;Execution model &lt;/LI&gt;
&lt;LI&gt;Query life cycle &lt;/LI&gt;
&lt;LI&gt;Why Waits-&amp;amp;-Queues &lt;/LI&gt;
&lt;LI&gt;sys.dm_os_wait_stats &amp;amp; sys.dm_os_waiting_tasks &lt;/LI&gt;
&lt;LI&gt;Reporting made simple, Performance Dashboard, &amp;amp; the Management Data Warehouse &amp;amp; Data Collector &lt;/LI&gt;
&lt;LI&gt;Extended events introduction &lt;/LI&gt;
&lt;LI&gt;Interpretation: Resource, Queue, &amp;amp; External &lt;/LI&gt;
&lt;LI&gt;Runnable vs. Running &lt;/LI&gt;
&lt;LI&gt;Preemptive waits &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I’ve transcribed &amp;amp; attached the code.&amp;nbsp; I invite you to download both &lt;A href="http://blogs.msdn.com/joesack/archive/2009/04/22/presentation-deck-for-performance-tuning-with-wait-statistics.aspx" target=_blank mce_href="http://blogs.msdn.com/joesack/archive/2009/04/22/presentation-deck-for-performance-tuning-with-wait-statistics.aspx"&gt;Joe’s deck&lt;/A&gt; &amp;amp; my transcript.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;There is no fate but what we make. &lt;BR&gt;&lt;/EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; —John Connor&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Administrivia&lt;/STRONG&gt; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693" mce_href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693"&gt;&lt;FONT size=1&gt;Jimmy May&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;&lt;B&gt;, &lt;/B&gt;MCDBA, MCSE, MCITP: DBA + DB Dev &lt;BR&gt;Senior Performance Consultant: SQL Server &lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/ace_team" mce_href="http://blogs.msdn.com/ace_team"&gt;&lt;FONT size=1&gt;A.C.E.&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;: Assessment, Consulting, &amp;amp; Engineering Services &lt;BR&gt;&lt;U&gt;&lt;A href="http://blogs.msdn.com/jimmymay" mce_href="http://blogs.msdn.com/jimmymay"&gt;http://blogs.msdn.com/jimmymay&lt;/A&gt;&lt;/U&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;This post was written with the &lt;/FONT&gt;&lt;A href="http://www.practicethis.com/" mce_href="http://www.practicethis.com/"&gt;&lt;FONT size=1&gt;PracticeThis.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;A href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer" mce_href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer"&gt;&lt;FONT size=1&gt;plugin for Windows Live Writer&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9570985" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/jimmymay/attachment/9570985.ashx" length="4508" type="application/octet-stream" /><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/_2F00_faster/default.aspx">/faster</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Wait+Stats/default.aspx">Wait Stats</category></item><item><title>Disk I/O Case Study: Classic Case of SAN Over-Subscription</title><link>http://blogs.msdn.com/jimmymay/archive/2009/03/15/case-study-classic-case-of-san-over-subscription.aspx</link><pubDate>Sun, 15 Mar 2009 16:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9478870</guid><dc:creator>Jimmy May</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9478870.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9478870</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;SAN Over-Subscription&lt;BR&gt;&lt;/STRONG&gt;There are a variety of challenges related to I/O performance.&amp;nbsp; One common problem is "SAN Over-Subscription", which is characterized by the the following symptoms:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;High disk latency &lt;EM&gt;and&lt;/EM&gt; 
&lt;LI&gt;Low IOPs &amp;amp; Throughput&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;As MS PFE &amp;amp; fellow perf engineer Shane Creamer describes it, think of sucking your favorite adult beverage through a pinched straw.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Preamble&lt;BR&gt;&lt;/B&gt;Recently I had the pleasure of working with my &lt;A href="http://blogs.msdn.com/ace_team" target=_blank mce_href="http://blogs.msdn.com/ace_team"&gt;A.C.E.&lt;/A&gt; colleague Jon Picariello &amp;amp; MS IT SAN Admin Russell Folsome on an internal Microsoft application.&amp;nbsp; This post describes that gig's big win.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;I/O Data: The Table&lt;/B&gt; &lt;BR&gt;The customer was experiencing significant I/O challenges. Jon compiled the following table from PerfMon logs he captured. 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ClassicCaseofSANOverSubscription_14C6C/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ClassicCaseofSANOverSubscription_14C6C/image_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=172 alt=image src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ClassicCaseofSANOverSubscription_14C6C/image_thumb.png" width=667 border=0 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ClassicCaseofSANOverSubscription_14C6C/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;B&gt;I/O Data: The Chart&lt;/B&gt; &lt;BR&gt;I used his information to generate the following chart.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ClassicCaseofSANOverSubscription_14C6C/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ClassicCaseofSANOverSubscription_14C6C/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=537 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ClassicCaseofSANOverSubscription_14C6C/clip_image002_thumb.jpg" width=613 border=0 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ClassicCaseofSANOverSubscription_14C6C/clip_image002_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Let's examine the chart, which displays the following five dimensions: 
&lt;UL&gt;
&lt;LI&gt;Lower Right Axis 
&lt;UL&gt;
&lt;LI&gt;Drive letter: H:, I:, &amp;amp; X: 
&lt;LI&gt;Disk latency counter: Disk sec/Read &amp;amp; Disk sec/Write&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Lower Left Axis 
&lt;UL&gt;
&lt;LI&gt;FA count: 2, 4, &amp;amp; 6 
&lt;LI&gt;Disk Latency metric: Avg &amp;amp; Max&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Left Vertical Axis 
&lt;UL&gt;
&lt;LI&gt;Disk Latency in seconds (yes, &lt;EM&gt;whole seconds &lt;/EM&gt;not &lt;EM&gt;milliseconds&lt;/EM&gt;!)&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The columns are divided into four quadrants 
&lt;UL&gt;
&lt;LI&gt;Max latency values for Disk sec/Read 
&lt;LI&gt;Max latency values for Disk sec/Write 
&lt;LI&gt;Avg latency values for Disk sec/Read 
&lt;LI&gt;Avg latency values for Disk sec/Write&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;It doesn’t take pattern recognition skills commensurate with membership in &lt;A href="http://www.us.mensa.org//AM/Template.cfm?Section=Home" mce_href="http://www.us.mensa.org//AM/Template.cfm?Section=Home"&gt;Mensa&lt;/A&gt; to see the trends. Max &amp;amp; Avg Read &amp;amp; Write latency for all three drives improved dramatically with the each addition of Fiber Adapter pairs. 
&lt;P&gt;&lt;B&gt;I/O Data: The Discussion&lt;/B&gt; 
&lt;P&gt;&lt;B&gt;&lt;I&gt;Thresholds&lt;/I&gt;&lt;/B&gt; &lt;BR&gt;For systems from which high performance is expected, average disk latency should be no more than 5 – 10ms for OLTP db data files. Occasional spikes may be acceptable, but extended plateaus are not. Values for log files should not exceed 0 – 2ms&lt;/P&gt;
&lt;P&gt;I'll spare you the screen scrapes, yet were I less merciful you’d see that the IOPs consumed by H:, I:, &amp;amp; X: ought to require only 3 disks, 9 disks, &amp;amp; 6 disks respectively—a total of 18 disks—to handle the maximum loads with ease.&amp;nbsp; Instead, as you see we have latency values out the wazooticles—orders of magnitude higher than acceptable. 
&lt;P&gt;The fact that this isn’t happening means either: 
&lt;UL&gt;
&lt;LI&gt;We don’t have enough disks 
&lt;LI&gt;The disks are too busy servicing other requests 
&lt;LI&gt;A bottleneck in the SAN&amp;nbsp; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;B&gt;&lt;I&gt;The Usual Suspects? No!&lt;/I&gt;&lt;/B&gt;&lt;BR&gt;High latency is a symptom. Jon nailed it. But we needed to know what was causing the latency. Jon confirmed that disk partition alignment had already been done. (Did you know that &lt;A href="http://blogs.msdn.com/jimmymay/archive/2008/10/14/disk-partition-alignment-for-sql-server-slide-deck.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2008/10/14/disk-partition-alignment-for-sql-server-slide-deck.aspx"&gt;disk partition alignment may be the best kept secret in SQL Server performance&lt;/A&gt;?)&amp;nbsp; Russ the SAN man confirmed that HBA queue depth had been elevated to 64.&amp;nbsp; Elevation of of this setting from the typical default of 32 to 64 (&amp;amp; sometimes more) is a best practice.&amp;nbsp; (See SQL CAT's Mike Ruthruff's &lt;A href="http://technet.microsoft.com/en-us/library/cc966412.aspx" target=_blank mce_href="http://technet.microsoft.com/en-us/library/cc966412.aspx"&gt;Predeployment I/O Best Practices&lt;/A&gt; for more details.)&amp;nbsp; Per best practice, file allocation unit size was 64KB. 
&lt;P&gt;&lt;B&gt;&lt;I&gt;Too Few Disks? No!&lt;/I&gt;&lt;/B&gt; &lt;BR&gt;We were told the SAN presented a total of 400 disks to us. Not taking RAID into account, even 10K disks should support at least 40,000 IOPs &amp;amp; 40,000 MB/s. (You might come up with somewhat different numbers; the point is the actual throughput is orders of magnitude lower than theoretical.)&amp;nbsp; 
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Too Busy Disks?&amp;nbsp; No!&lt;BR&gt;&lt;/EM&gt;&lt;/STRONG&gt;The disks aren’t too busy.&amp;nbsp; Examine the idle times in the table or the chart—virtually all above 50%. 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Note on % Idle Time&lt;BR&gt;&lt;/STRONG&gt;The % Idle Time counter is a bit controversial &amp;amp; misunderstood.&amp;nbsp; Like disk queue length, it can be &amp;amp; often is misused.&amp;nbsp; I will be publishing a series of posts in which I talk about these disk counters.&amp;nbsp; Be prudent in using &amp;amp; interpreting values from this counter!&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;B&gt;The Perpetrator Revealed: &lt;STRONG&gt;&lt;EM&gt;SAN Over-Subscription&lt;/EM&gt;&lt;/STRONG&gt;&lt;/B&gt; &lt;BR&gt;As described above, 18 disks could theoretically provide the observed performance, so 400 disks are plenty. The disks are largely idle.&amp;nbsp; That leaves only one other option: a bottleneck in the SAN. &lt;/P&gt;
&lt;P&gt;Why is the I/O that is being provided delivered at such high latency?&amp;nbsp; Why can’t 400 disks—disks which PerfMon reports are idle half the time—produce the throughput even of only 18? By the definition I shared in the opening paragraph, this describes a classic case of &lt;STRONG&gt;SAN Over-Subscription&lt;/STRONG&gt;. 
&lt;P&gt;&lt;B&gt;&lt;I&gt;Viola!&lt;/I&gt;&lt;/B&gt; &lt;BR&gt;It turns out that the number of Fiber Adapters was on the shy side. Thanks to the prompt &amp;amp; enthusiastic efforts of MSIT SAN Man Russell Folsome, the count was elevated from two to four &amp;amp; eventually to six. 
&lt;P&gt;The improvements are remarkable. Note that the vertical axis is logarithmic in order to display all data values which transcend &lt;EM&gt;five orders of magnitude&lt;/EM&gt;. Improvements exceeding two orders of magnitude were achieved in virtually every category. 
&lt;P&gt;Their world is now a different, much better place to be in. As my friend the cellist says, “&lt;I&gt;Viola!&lt;/I&gt;” &lt;/P&gt;&lt;STRONG&gt;Query Tuning&lt;BR&gt;&lt;/STRONG&gt;In addition, we counseled the application team that it was their responsibility to remediate the expensive queries we identified.&amp;nbsp; Doing so would provide compliance with best practices &amp;amp; provide head room. 
&lt;P&gt;&lt;STRONG&gt;Fundamental Troubleshooting&lt;BR&gt;&lt;/STRONG&gt;You might think, "Well, duh, Jimmy May, you threw more hardware at it, so of course it's going be faster".&amp;nbsp; Well, that's not necessarily so.&amp;nbsp; For example, if we'd've thrown more disks at the problem, or more memory, or more CPU, the numbers wouldn't've changed much.&amp;nbsp; By analyzing a simple PerfMon log, we were able to point to the SAN.&amp;nbsp; Fundamental performance troubleshooting definitively identified the area of the bottleneck.&amp;nbsp; By collaborating with a cooperative SAN admin, we were able to remediate the problem. 
&lt;P&gt;&lt;STRONG&gt;Related Posts&lt;/STRONG&gt; &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/jimmymay/archive/2008/10/15/perfmon-objects-counters-thresholds-utilities-for-sql-server.aspx" mce_href="http://blogs.msdn.com/jimmymay/archive/2008/10/15/perfmon-objects-counters-thresholds-utilities-for-sql-server.aspx"&gt;PerfMon Objects, Counters, Thresholds, &amp;amp; Utilities for SQL Server&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/jimmymay/archive/2009/03/01/disk-i-o-microsoft-sql-server-on-san-best-practices-from-sql-cat-s-mike-ruthruff-prem-mehra.aspx" mce_href="http://blogs.msdn.com/jimmymay/archive/2009/03/01/disk-i-o-microsoft-sql-server-on-san-best-practices-from-sql-cat-s-mike-ruthruff-prem-mehra.aspx"&gt;Disk I/O: Microsoft SQL Server on SAN Best Practices from SQL CAT's Mike Ruthruff (&amp;amp; Prem Mehra)&lt;/A&gt; 
&lt;LI&gt;Stay tuned for my series on Disk I/O counters.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Acknowledgements&lt;BR&gt;&lt;/STRONG&gt;In addition to A.C.E. colleague Jon Picariello &amp;amp; MS IT SAN Man Russell Folsome, thanks also to the internal team with whom we worked, especially Matt Eldridge without whose full cooperation we may not have been able to pull this off.&amp;nbsp; As always, I am grateful for the consistently excellent guidance from my fellow MS perf phreaks &lt;A href="http://blogs.technet.com/clint_huffman" mce_href="http://blogs.technet.com/clint_huffman"&gt;Clint Huffman&lt;/A&gt;, &lt;A href="http://blogs.technet.com/ken_brumfield" mce_href="http://blogs.technet.com/ken_brumfield"&gt;Ken Brumfield&lt;/A&gt;, Shane Creamer, &amp;amp; Robert Smith.&amp;nbsp; Thanks also &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Administrivia&lt;/STRONG&gt; 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693" mce_href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693"&gt;&lt;FONT size=1&gt;Jimmy May&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;&lt;B&gt;, &lt;/B&gt;MCDBA, MCSE, MCITP: DBA + DB Dev&lt;BR&gt;Senior Performance Consultant: SQL Server&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/ace_team" mce_href="http://blogs.msdn.com/ace_team"&gt;&lt;FONT size=1&gt;A.C.E.&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;: Assessment, Consulting, &amp;amp; Engineering Services&lt;BR&gt;&lt;A href="http://blogs.msdn.com/jimmymay" mce_href="http://blogs.msdn.com/jimmymay"&gt;http://blogs.msdn.com/jimmymay&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;I&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Segoe UI','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes"&gt;If it is fast and ugly, they will use it and curse you; if it is slow, they will not use it." &lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;—Computer science professor, billionaire, &amp;amp; entrepreneur David Cheriton &lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Segoe UI','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast; mso-no-proof: yes"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;
&lt;P&gt;&amp;nbsp;&lt;FONT size=1&gt;This post was written with the &lt;/FONT&gt;&lt;A href="http://www.practicethis.com/" mce_href="http://www.practicethis.com/"&gt;&lt;FONT size=1&gt;PracticeThis.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;A href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer" mce_href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer"&gt;&lt;FONT size=1&gt;plugin for Windows Live Writer&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9478870" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Disk+I_2F00_O/default.aspx">Disk I/O</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Engineering+Discipline/default.aspx">Engineering Discipline</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/_2F00_faster/default.aspx">/faster</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Architecture Journal: Green IT in Practice: SQL Server Consolidation in Microsoft IT</title><link>http://blogs.msdn.com/jimmymay/archive/2009/03/10/architecture-journal-green-it-in-practice-sql-server-consolidation-in-microsoft-it.aspx</link><pubDate>Tue, 10 Mar 2009 18:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9469169</guid><dc:creator>Jimmy May</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9469169.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9469169</wfw:commentRss><description>&lt;P&gt;I'm a lucky guy.&amp;nbsp; Besides the fact that I'm healthy, alive, &amp;amp; living on the planet earth "in interesting times" as the fortune cookie says, I had the opportunity to contribute to an article which appeared in the &lt;A href="http://msdn.microsoft.com/en-us/architecture/bb410935.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/architecture/bb410935.aspx"&gt;Green IT&lt;/A&gt; issue of &lt;EM&gt;The Architecture Journal:&lt;/EM&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Green IT in Practice: SQL Server Consolidation in Microsoft IT&lt;BR&gt;&lt;/EM&gt;&lt;A title=http://msdn.microsoft.com/en-us/architecture/dd393309.aspx href="http://msdn.microsoft.com/en-us/architecture/dd393309.aspx" mce_href="http://msdn.microsoft.com/en-us/architecture/dd393309.aspx"&gt;http://msdn.microsoft.com/en-us/architecture/dd393309.aspx&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Mark Pohto, &lt;FONT face="Lucida Console"&gt;α&lt;/FONT&gt;-Geek #1&lt;BR&gt;&lt;/STRONG&gt;The primary author is Mark Pohto, an engineer for MS IT responsible for architecting Microsoft's SQL Server consolidation solution.&amp;nbsp; He's taken the lessons learned &amp;amp; documented them to make the planet a better place on which to live—especially if it's your job to create such a solution.&amp;nbsp; Mark's work provides an excellent head start.&amp;nbsp; Remember, this ain't no theoretical mumbo-jumbo, &lt;EM&gt;this is how Microsoft actually gits-'er-done&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;The article demonstrates the convergence of the best interests of business, people, &amp;amp; the planet—which happens a lot more than some folks think—but that discussion is for a different forum...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Ward Pond, &lt;FONT face="Lucida Console"&gt;α&lt;/FONT&gt;-Geek #2&lt;/STRONG&gt;&lt;BR&gt;There's my name, there at the end of the article, along with &lt;A href="http://blogs.technet.com/wardpond" target=_blank mce_href="http://blogs.technet.com/wardpond"&gt;Ward Pond&lt;/A&gt;.&amp;nbsp; Ward is an Architect for Microsoft's IT Operations Excellence group.&amp;nbsp; Both Mark &amp;amp; Ward were instrumental in crafting the SQL Server Ranger program, part of the path to the &lt;A href="http://www.microsoft.com/learning/mcp/architect/default.mspx" target=_blank mce_href="http://www.microsoft.com/learning/mcp/architect/default.mspx"&gt;Microsoft Certified Architect&lt;/A&gt;: &lt;A href="http://www.microsoft.com/learning/mcp/architect/database/default.mspx" target=_blank mce_href="http://www.microsoft.com/learning/mcp/architect/database/default.mspx"&gt;Database&lt;/A&gt; certification.&amp;nbsp; To be associated with these folks in any capacity is quite an honor.&amp;nbsp; (See "lucky guy" comment above as well as &lt;A href="http://blogs.msdn.com/jimmymay/archive/2008/09/21/commencement-keynote-itt-technical-institute-indianapolis-9-20-2008.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2008/09/21/commencement-keynote-itt-technical-institute-indianapolis-9-20-2008.aspx"&gt;this&lt;/A&gt; &amp;amp; &lt;A href="http://blogs.msdn.com/jimmymay/archive/2008/12/30/celebrating-life-how-the-princess-pumpkin-puss-a-pain-in-my-neck-randy-pausch-lt-col-frank-slade-can-teach-us-about-living.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2008/12/30/celebrating-life-how-the-princess-pumpkin-puss-a-pain-in-my-neck-randy-pausch-lt-col-frank-slade-can-teach-us-about-living.aspx"&gt;this&lt;/A&gt;.)&lt;/P&gt;
&lt;P&gt;Ward, always a step or three ahead of me, already &lt;A href="http://blogs.technet.com/wardpond/archive/2009/01/14/issue-18-of-the-architecture-journal-now-available.aspx" target=_blank mce_href="http://blogs.technet.com/wardpond/archive/2009/01/14/issue-18-of-the-architecture-journal-now-available.aspx"&gt;cited the article on his blog&lt;/A&gt;.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;ADD&amp;gt;If you're not already a subscriber to the fine resource which is Ward's blog, &lt;A href="http://blogs.technet.com/wardpond/rss.xml" target=_blank mce_href="http://blogs.technet.com/wardpond/rss.xml"&gt;I invite you to do so&lt;/A&gt;.&amp;nbsp; His timely &amp;amp; entertaining prose—technical &amp;amp; personal—is always a welcome respite from the usual humdrum.&amp;lt;/ADD&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Critical Noteriety&lt;BR&gt;&lt;/STRONG&gt;The article has received critical noteriety, including the following:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://sqlskills.com/BLOGS/KIMBERLY/post/Server-consolidation-and-Green-IT-Computing.aspx" target=_blank mce_href="http://sqlskills.com/BLOGS/KIMBERLY/post/Server-consolidation-and-Green-IT-Computing.aspx"&gt;&lt;EM&gt;Server consolidation and Green IT Computing&lt;/EM&gt;&lt;/A&gt;&lt;BR&gt;&lt;A href="http://sqlskills.com/blogs/Kimberly" target=_blank mce_href="http://sqlskills.com/blogs/Kimberly"&gt;Kimberly L. Tripp&lt;/A&gt;, &lt;A href="http://sqlskills.com/" target=_blank mce_href="http://sqlskills.com/"&gt;SQL Skills&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.sqlmag.com/Article/ArticleID/101159/sql_server_101159.html" target=_blank mce_href="http://www.sqlmag.com/Article/ArticleID/101159/sql_server_101159.html"&gt;&lt;EM&gt;SQL Server Consolidation Initiative Under Way at Microsoft&lt;/EM&gt;&lt;/A&gt;&lt;BR&gt;&lt;A href="http://blogs.msdn.com/controlpanel/blogs/www.sqlmag.com" target=_blank mce_href="www.sqlmag.com"&gt;SQL Server Magazine&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Where's the Beef?&lt;BR&gt;&lt;/STRONG&gt;Enough fluff!&amp;nbsp; What does the article actually say?&amp;nbsp; &lt;EM&gt;OK, OK, alright, already, hold your equine beasties!&lt;/EM&gt;&amp;nbsp; Here's the ToC:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Data Center Energy Consumption Trends 
&lt;LI&gt;Opportunities 
&lt;LI&gt;Initial Situation 
&lt;LI&gt;Desired Situation 
&lt;LI&gt;Solution Mindset 
&lt;LI&gt;Solution Implementation 
&lt;LI&gt;Results 
&lt;LI&gt;General Benefits 
&lt;LI&gt;Conclusion 
&lt;LI&gt;Resources&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Getting it Right&lt;BR&gt;&lt;/STRONG&gt;Yesterday Mark shared the latest-&amp;amp;-greatest high-level diagram of our environment.&amp;nbsp; Mark's dedication to getting this "right" has been impressive, an exquisite example of the iterative process associated with the following:&amp;nbsp; &lt;A class="" title="Perception, Reality, &amp;amp; Incrementally Tuning World-Class Applications" href="http://blogs.msdn.com/jimmymay/archive/2009/01/07/perception-reality-tuning-world-class-applications.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2009/01/07/perception-reality-tuning-world-class-applications.aspx"&gt;&lt;EM&gt;Perception, Reality, &amp;amp; Incrementally Tuning World-Class Applications&lt;/EM&gt;&lt;/A&gt;.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ArchitectureJournalGreenITinPracticeSQLS_17AF/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ArchitectureJournalGreenITinPracticeSQLS_17AF/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=530 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ArchitectureJournalGreenITinPracticeSQLS_17AF/clip_image002_thumb.jpg" width=584 border=0 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/ArchitectureJournalGreenITinPracticeSQLS_17AF/clip_image002_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Normalizing Disparate Platforms: &lt;EM&gt;Compute Units&lt;/EM&gt; (CU)&lt;BR&gt;&lt;/STRONG&gt;Among others, one of the most interesting new concepts was normalizing disparate platforms through the use of &lt;EM&gt;Compute Units&lt;/EM&gt;, CU.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;A data-driven discussion. Microsoft IT developed the RightSizing initiative to ensure effective utilization of servers in the data center and in managed labs. Because significant underutilization occurs, one of the initiative’s first tasks was for Microsoft IT to identify underutilized servers that might be good candidates for virtualization...&lt;/P&gt;
&lt;P&gt;To accurately compare the performance of server platforms of varying architectures, Microsoft IT has developed a Compute Unit (CU) formula for each server platform that utilizes an industry standard, architecture-agnostic, benchmark suite from the Standard Performance Evaluation Corporation (SPEC). The SPEC benchmarks are developed in such a way to allow a repeatable test with strict result submission requirements. The Microsoft IT CU formula uses a baseline (not peak) benchmark that measures the rate of integer calculation work a server platform can perform in a given amount of time. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;According to the Technical Case Study, &lt;A href="http://technet.microsoft.com/en-us/library/cc700692.aspx" target=_blank mce_href="http://technet.microsoft.com/en-us/library/cc700692.aspx"&gt;&lt;EM&gt;Identifying Server Candidates for Virtualization&lt;/EM&gt;&lt;/A&gt;: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;The benchmarks that Microsoft originally used, the SPEC CPU2000 - CINT2006 Rates - Baseline Rates, have been retired. Microsoft IT is now using the SPEC CPU2006 - CINT2006 Rates - Base Results. For more information about the SPEC benchmarks and ratings for individual servers, visit the Standard Performance Evaluation Corporation Web site at &lt;A href="http://www.spec.org/" mce_href="http://www.spec.org/"&gt;http://www.spec.org&lt;/A&gt;.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;SQL Server 2008 &amp;amp; Windows Server 2008 Hyper-V Best Practices&lt;BR&gt;&lt;/STRONG&gt;For maximum benefits, couple the concepts from Mark's consolidation article with this one from the SQL Server Customer Advisory Team (&lt;A href="http://sqlcat.com/" target=_blank mce_href="http://sqlcat.com/"&gt;SQL&lt;/A&gt; &lt;A href="http://technet.microsoft.com/en-us/sqlserver/bb671430.aspx" target=_blank mce_href="http://technet.microsoft.com/en-us/sqlserver/bb671430.aspx"&gt;CAT&lt;/A&gt;):&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://sqlcat.com/whitepapers/archive/2008/10/03/running-sql-server-2008-in-a-hyper-v-environment-best-practices-and-performance-recommendations.aspx" target=_blank mce_href="http://sqlcat.com/whitepapers/archive/2008/10/03/running-sql-server-2008-in-a-hyper-v-environment-best-practices-and-performance-recommendations.aspx"&gt;&lt;EM&gt;Running SQL Server 2008 in a Hyper-V Environment - Best Practices and Performance Recommendations&lt;/EM&gt;&lt;/A&gt;&lt;BR&gt;Authors: Lindsey Allen, Mike Ruthruff, Prem Mehra&lt;BR&gt;Reviewers: &lt;A href="http://blogs.msdn.com/cindygross/default.aspx" target=_blank mce_href="http://blogs.msdn.com/cindygross/default.aspx"&gt;Cindy Gross&lt;/A&gt;, &lt;A href="http://blogs.msdn.com/mssqlisv" target=_blank mce_href="http://blogs.msdn.com/mssqlisv"&gt;Burzin Patel&lt;/A&gt;, Denny Lee, Michael Thomassy, Sanjay Mishra, Savitha Padmanabhan, Tony Voellm, &lt;A href="http://blogs.msdn.com/psssql" target=_blank mce_href="http://blogs.msdn.com/psssql"&gt;Bob Ward&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Administrivia&lt;/STRONG&gt; 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693" mce_href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693"&gt;&lt;FONT size=1&gt;Jimmy May&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;&lt;B&gt;, &lt;/B&gt;MCDBA, MCSE, MCITP: DBA + DB Dev&lt;BR&gt;Senior Performance Consultant: SQL Server&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/ace_team" mce_href="http://blogs.msdn.com/ace_team"&gt;&lt;FONT size=1&gt;A.C.E.&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;: Assessment, Consulting, &amp;amp; Engineering Services&lt;BR&gt;&lt;U&gt;&lt;A href="http://blogs.msdn.com/jimmymay" mce_href="http://blogs.msdn.com/jimmymay"&gt;http://blogs.msdn.com/jimmymay&lt;/A&gt;&lt;/U&gt;&lt;BR&gt;&lt;EM&gt;"If it is fast and ugly, they will use it and curse you; if it is slow, they will not use it." —Computer science professor, billionaire, &amp;amp; entrepreneur David Cheriton&lt;/EM&gt;&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT size=1&gt;This post was written with the &lt;/FONT&gt;&lt;A href="http://www.practicethis.com/" mce_href="http://www.practicethis.com/"&gt;&lt;FONT size=1&gt;PracticeThis.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;A href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer" mce_href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer"&gt;&lt;FONT size=1&gt;plugin for Windows Live Writer&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9469169" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/_2F00_faster/default.aspx">/faster</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+CAT/default.aspx">SQL CAT</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Scalability/default.aspx">Scalability</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>Disk I/O: Microsoft SQL Server on SAN Best Practices from SQL CAT's Mike Ruthruff (&amp; Prem Mehra)</title><link>http://blogs.msdn.com/jimmymay/archive/2009/03/01/disk-i-o-microsoft-sql-server-on-san-best-practices-from-sql-cat-s-mike-ruthruff-prem-mehra.aspx</link><pubDate>Sun, 01 Mar 2009 19:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9452765</guid><dc:creator>Jimmy May</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9452765.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9452765</wfw:commentRss><description>&lt;P&gt;While at the &lt;A href="http://sqlpass.org/" target=_blank mce_href="http://sqlpass.org"&gt;PASS&lt;/A&gt; &lt;A href="http://www.sqlpass.org/Events/PASSCommunitySummit.aspx" target=_blank mce_href="http://www.sqlpass.org/Events/PASSCommunitySummit.aspx"&gt;Community Summit&lt;/A&gt; in November 2008, I had the pleasure of attending a handful of excellent presentations.&amp;nbsp; One of the best was delivered by Mike Ruthruff (&amp;amp; not just because he shilled for &lt;A href="http://blogs.msdn.com/jimmymay/archive/2008/11/25/disk-partition-alignment-sector-alignment-for-sql-server-part-3-pass-2008.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2008/11/25/disk-partition-alignment-sector-alignment-for-sql-server-part-3-pass-2008.aspx"&gt;my presentation&lt;/A&gt; on &lt;A href="http://blogs.msdn.com/jimmymay/archive/2008/10/14/disk-partition-alignment-for-sql-server-slide-deck.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2008/10/14/disk-partition-alignment-for-sql-server-slide-deck.aspx"&gt;disk partition alignment&lt;/A&gt; later that day—though I suspect he contributed to my session being SRO).&lt;/P&gt;
&lt;P&gt;Mike is a member of the SQL Server Customer Advisory Team (&lt;A href="http://www.sqlcat.com/" target=_blank mce_href="http://www.sqlcat.com"&gt;SQL&lt;/A&gt; &lt;A href="http://blogs.msdn.com/sqlcat" target=_blank mce_href="http://blogs.msdn.com/sqlcat"&gt;CAT&lt;/A&gt;).&amp;nbsp; He authored the deck with contributions from SQL CAT patriarch Prem Mehra.&lt;/P&gt;
&lt;P&gt;Most of you probably know Mike because he is the primary author of the landmark white paper we all know-&amp;amp;-love &amp;amp; have read over-&amp;amp;-over again because we know how unbelievably valuable it is:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;SQL Server Predeployment I/O Best Practices&lt;/EM&gt;&lt;BR&gt;&lt;A title=http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/pdpliobp.mspx href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/pdpliobp.mspx" mce_href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/pdpliobp.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/pdpliobp.mspx&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Mike&amp;nbsp;gave me&amp;nbsp;a copy of his latest-&amp;amp;-greatest deck for publication here: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Microsoft SQL Server on SAN Best Practices&lt;BR&gt;&lt;/EM&gt;&lt;A title=http://tinyurl.com/SQLonSAN href="http://tinyurl.com/SQLonSAN" mce_href="http://tinyurl.com/SQLonSAN"&gt;http://tinyurl.com/SQLonSAN&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The deck includes the following: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Characteristics of SQL Server I/O operations&lt;/LI&gt;
&lt;LI&gt;Best practices&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;SQL Server Design Practices &lt;/LI&gt;
&lt;LI&gt;Storage Configuration &lt;/LI&gt;
&lt;LI&gt;Common Pitfalls&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Monitoring performance of SQL Server on SAN&lt;/LI&gt;
&lt;LI&gt;Emerging Storage Technologies&lt;/LI&gt;
&lt;LI&gt;Additional Material In Appendix Section (not covered during session)&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;How to validate a configuration using I/O load generation tools &lt;/LI&gt;
&lt;LI&gt;General SQL Server I/O characteristics &lt;/LI&gt;
&lt;LI&gt;How to diagnose I/O bottlenecks&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;Sample Configurations &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;I think you'll enjoy this presentation—one of the best, perhaps &lt;EM&gt;the&lt;/EM&gt; best of its kind ever assembled.&amp;nbsp; &lt;EM&gt;¡Yo!&lt;/EM&gt;&amp;nbsp; Only first-rate decks on this blog.&amp;nbsp; Besides which, SQL CAT does nothing but the best.&amp;nbsp; Get ready to be wowed by 50 slides of geekly goodness.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Administrivia&lt;/STRONG&gt; 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693" mce_href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693"&gt;Jimmy May&lt;/A&gt;&lt;B&gt;, &lt;/B&gt;MCDBA, MCSE, MCITP: DBA + DB Dev&lt;BR&gt;Senior Performance Consultant: SQL Server&lt;BR&gt;&lt;A href="http://blogs.msdn.com/ace_team" mce_href="http://blogs.msdn.com/ace_team"&gt;A.C.E.&lt;/A&gt;: Assessment Consulting &amp;amp; Engineering Services&lt;BR&gt;&lt;U&gt;&lt;A href="http://blogs.msdn.com/jimmymay" mce_href="http://blogs.msdn.com/jimmymay"&gt;http://blogs.msdn.com/jimmymay&lt;/A&gt;&lt;/U&gt;&lt;BR&gt;&lt;EM&gt;Microsoft: Change the world or go home.&lt;/EM&gt; 
&lt;P&gt;This post was written with the &lt;A href="http://www.practicethis.com/" mce_href="http://www.practicethis.com"&gt;PracticeThis.com&lt;/A&gt; &lt;A href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer" mce_href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer"&gt;plugin for Windows Live Writer&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9452765" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/jimmymay/attachment/9452765.ashx" length="1394400" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Disk+I_2F00_O/default.aspx">Disk I/O</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/_2F00_faster/default.aspx">/faster</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+CAT/default.aspx">SQL CAT</category></item><item><title>SSMS Query Results: “Include column headers when copying or saving the results"</title><link>http://blogs.msdn.com/jimmymay/archive/2009/02/22/ssms-query-results-include-column-headers-when-copying-or-saving-the-results.aspx</link><pubDate>Sun, 22 Feb 2009 18:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9440466</guid><dc:creator>Jimmy May</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9440466.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9440466</wfw:commentRss><description>&lt;P&gt;In my work with external customers, I collaborate with some&amp;nbsp;excellent DBAs &amp;amp; Architects.&amp;nbsp; But I've noticed many of them are not aware that you can capture column headers from query results to grid in SSMS.&lt;/P&gt;
&lt;P&gt;When a very bright engineer I work with—not a SQL SME yet one of the smartest guys I know—told me he didn't know about it either, I decided to document the simple protocol.&amp;nbsp; I'm not the first person to post this topic,&amp;nbsp;but I wouldn't need to do so if everyone already knew about it.&lt;/P&gt;
&lt;P&gt;There are two ways to get the column headers from SSMS into, say, Excel. 
&lt;P&gt;&lt;STRONG&gt;The&amp;nbsp;Hard Way&lt;/STRONG&gt;&amp;nbsp; 
&lt;P&gt;You can simply type out the column names by hand. 
&lt;P&gt;&lt;STRONG&gt;The Right Way&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Make it the SSMS default:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Open SSMS 
&lt;LI&gt;Click Tools &amp;gt; Options 
&lt;LI&gt;In the Options dialog, expand Query Results &amp;gt; SQL Server &amp;gt; Results to Grid, then check “Include column headers when copying or saving the results” 
&lt;LI&gt;Click OK 
&lt;LI&gt;Close &amp;amp; restart SSMS&lt;/LI&gt;&lt;/UL&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SSMSQueryResultsIncludecolumnheaderswhen_F874/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SSMSQueryResultsIncludecolumnheaderswhen_F874/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=324 alt=image src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SSMSQueryResultsIncludecolumnheaderswhen_F874/image_thumb_1.png" width=558 border=0 mce_src="http://blogs.msdn.com/blogfiles/jimmymay/WindowsLiveWriter/SSMSQueryResultsIncludecolumnheaderswhen_F874/image_thumb_1.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;As my friend the cellist says, "&lt;EM&gt;Viola!&lt;/EM&gt;"&lt;/P&gt;
&lt;P&gt;The steps are the same for SQL Server 2005 &amp;amp; 2008.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Additional Resources&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Explore these topics for additional information on SSMS options &amp;amp; increase your SSMS productivity.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ms190078(SQL.90).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms190078(SQL.90).aspx"&gt;Options (Query Results/SQL Server/Results to Grid Page)&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ms188487(SQL.90).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms188487(SQL.90).aspx"&gt;Options Dialog Boxes F1 Help&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Administrivia&lt;/STRONG&gt; 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693" target=_blank mce_href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693"&gt;&lt;FONT size=1&gt;Jimmy May&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;&lt;B&gt;, &lt;/B&gt;MCDBA, MCSE, MCITP: DBA + DB Dev | Senior Performance Consultant: SQL Server&lt;BR&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/ace_team" target=_blank mce_href="http://blogs.msdn.com/ace_team"&gt;&lt;FONT color=#555555 size=1&gt;A.C.E.&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;: Assessment Consulting &amp;amp; Engineering Services&lt;BR&gt;&lt;/FONT&gt;&lt;U&gt;&lt;A href="http://blogs.msdn.com/jimmymay" mce_href="http://blogs.msdn.com/jimmymay"&gt;&lt;FONT color=#555555 size=1&gt;http://blogs.msdn.com/jimmymay&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;EM&gt;&lt;FONT size=1&gt;Oh, the weather outside is frightful, but SQL Server is delightful! —&lt;/FONT&gt;&lt;A href="http://www.sqlmag.com/Article/ArticleID/16315/sql_server_16315.html" target=_blank mce_href="http://www.sqlmag.com/Article/ArticleID/16315/sql_server_16315.html"&gt;&lt;FONT size=1&gt;Brian Moran&lt;/FONT&gt;&lt;/A&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;This post was written with the &lt;/FONT&gt;&lt;A href="http://www.practicethis.com/" target=_blank mce_href="http://www.practicethis.com"&gt;&lt;FONT size=1&gt;PracticeThis.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt; &lt;/FONT&gt;&lt;A href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer" target=_blank mce_href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer"&gt;&lt;FONT size=1&gt;plugin for Windows Live Writer&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9440466" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Productivity/default.aspx">Productivity</category></item><item><title>sp_reset_connection Does NOT Reset TRANSACTION ISOLATION LEVEL: Unexpected Behavior By Design</title><link>http://blogs.msdn.com/jimmymay/archive/2009/02/02/sp-reset-connection-does-not-reset-transaction-isolation-level-unexpected-behavior-by-design.aspx</link><pubDate>Mon, 02 Feb 2009 20:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9390972</guid><dc:creator>Jimmy May</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9390972.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9390972</wfw:commentRss><description>&lt;P&gt;I've long been an advocate of the best practice of explicitly setting the &lt;A href="http://msdn.microsoft.com/en-us/library/ms173763.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms173763.aspx"&gt;transaction isolation level&lt;/A&gt; in my scripts.&lt;/P&gt;
&lt;P&gt;At my old day job as an enterprise architect I mandated that along with &lt;FONT face="Lucida Console" color=#0000ff&gt;SET NOCOUNT ON&lt;/FONT&gt;, the preamble for all SProcs explicitly must declare the appropriate transaction isolation level.&lt;/P&gt;
&lt;P&gt;In addition, all ad hoc queries by DBAs had to be prefaced with a read uncommitted declaration.&amp;nbsp; To save time &amp;amp; promote compliance, I distributed a SQL template for quick access (&lt;FONT face="Lucida Console"&gt;set_tx_iso_level.tql&lt;/FONT&gt;) which contains two lines:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT face="Lucida Console"&gt;SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED&lt;BR&gt;&lt;FONT color=#008000&gt;-- DBCC UserOptions&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Lucida Console"&gt;&amp;lt;ADD&amp;gt;&lt;/FONT&gt; We'll save the dirty reads &amp;amp; data integrity debate for another day, eh? &lt;FONT face="Lucida Console"&gt;&amp;lt;/ADD&amp;gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Many customer applications exercise connection pooling.&amp;nbsp; Doing so enhances performance &amp;amp; preserves system resources.&amp;nbsp; For more information, see this MSDN article:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/8xx3tyca(VS.80).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/8xx3tyca(VS.80).aspx"&gt;Using Connection Pooling with SQL Server&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The system SProc &lt;FONT face="Lucida Console"&gt;sp_reset_connection&lt;/FONT&gt; facilitates the re-use of connections from the connection pool.&amp;nbsp; The SProc is so ubiquitous that I typically filter it from SQL Trace output.&lt;/P&gt;
&lt;P&gt;My friend, buddy, pal PFE Gennady "Dr. G" Kostinsky brought to my attention that &lt;FONT face="Lucida Console"&gt;sp_reset_connection&lt;/FONT&gt; does &lt;EM&gt;NOT&lt;/EM&gt; reset the transaction isolation level to the server default from the previous connection's setting.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;To my surprise, this unexpected behavior is by design.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;O the humanity!&amp;nbsp; See for yourself on Connect:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A title=http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=243527 href="http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=243527" mce_href="http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=243527"&gt;http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=243527&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This has profound implications.&amp;nbsp; Imagine the havoc wrought to applications by everything from intended declarations to developer abuse to vendor apps—the list goes on-&amp;amp;-on...&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;In light of &lt;FONT face="Lucida Console"&gt;sp_reset_connection&lt;/FONT&gt;'s behavior, the explicit declaration of the isolation level is not merely a best practice but is a mandatory practice.&amp;nbsp; &lt;/EM&gt;&lt;/STRONG&gt;Engineering discipline demands it.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9390972" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Engineering+Discipline/default.aspx">Engineering Discipline</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/_2F00_faster/default.aspx">/faster</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Perception, Reality, &amp; Incrementally Tuning World-Class Applications</title><link>http://blogs.msdn.com/jimmymay/archive/2009/01/07/perception-reality-tuning-world-class-applications.aspx</link><pubDate>Wed, 07 Jan 2009 15:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9287334</guid><dc:creator>Jimmy May</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/jimmymay/comments/9287334.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jimmymay/commentrss.aspx?PostID=9287334</wfw:commentRss><description>&lt;P&gt;&lt;B&gt;Performance &amp;amp; the 20% Rule&lt;/B&gt; 
&lt;P&gt;I was reading the post from &lt;A href="http://blogs.msdn.com/edglas/archive/2009/01/02/make-your-performance-work-count-the-20-rule.aspx" target=_blank mce_href="http://blogs.msdn.com/edglas/archive/2009/01/02/make-your-performance-work-count-the-20-rule.aspx"&gt;Ed Glas&lt;/A&gt;, &lt;A href="http://blogs.msdn.com/edglas/archive/2009/01/02/make-your-performance-work-count-the-20-rule.aspx" target=_blank mce_href="http://blogs.msdn.com/edglas/archive/2009/01/02/make-your-performance-work-count-the-20-rule.aspx"&gt;Make Your Performance Work Count: The 20% Rule&lt;/A&gt;.&amp;nbsp; 
&lt;P&gt;He shared the words of computer science professor &amp;amp; billionaire entrepreneur David Cheriton: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;If it is fast and ugly, they will use it and curse you; &lt;BR&gt;if it is slow, they will not use it.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Indeed. 
&lt;P&gt;Ed provided this quote in the context of the book &lt;EM&gt;&lt;A href="http://www.amazon.com/Designing-Engineering-Time-Psychology-Perception/dp/0321509188" target=_blank mce_href="http://www.amazon.com/Designing-Engineering-Time-Psychology-Perception/dp/0321509188"&gt;Designing and Engineering Time: The Psychology of Time Perception in Software&lt;/A&gt;&lt;/EM&gt; by Steve Seow.&amp;nbsp; Steve is an expert on performance engineering at Microsoft and has a deep understanding of the human element and psychology behind software performance.&amp;nbsp; An intriguing take-away is that users do not notice changes in performance below a certain threshold.&amp;nbsp; Research has shown that for durations under 30 seconds, users do not detect differences up to 18%.&amp;nbsp; Steve's rule of thumb is that users really won't notice performance changes of +/- 20%. 
&lt;P&gt;Ed Glas is a big-time test manager for Microsoft. He relates that when setting goals for performance improvement, or considering performance against a competitive product, the threshold for success should be to gain at least 20% over the baseline measurement.&amp;nbsp; Likewise when considering whether to fix a performance regression, users likely won't detect the degradation less than 20%.&amp;nbsp; He suggests we’re better off spending effort elsewhere if the 20% threshold seems out of reach for a given area of testing. 
&lt;P&gt;&lt;B&gt;Perception is Reality&lt;/B&gt; 
&lt;P&gt;I was struck by the (not uncommon) idea that &lt;I&gt;Perception is Reality&lt;/I&gt;.&amp;nbsp; (This has been reinforced by my holiday reading of &lt;A href="http://www.amazon.com/Stumbling-Happiness-Daniel-Gilbert/dp/1400077427" target=_blank mce_href="http://www.amazon.com/Stumbling-Happiness-Daniel-Gilbert/dp/1400077427"&gt;&lt;EM&gt;Stumbling on Happiness&lt;/EM&gt;&lt;/A&gt; by Daniel Gilbert.)&amp;nbsp; So, to get &lt;I&gt;ooh&lt;/I&gt;’s &amp;amp; &lt;I&gt;ah&lt;/I&gt;’s from our users or customers—especially before we’ve gained their trust—we must either provide the 20% enhancements Mssrs. Glas &amp;amp; Seow discuss, or set the expectations low (which is sometimes appropriate but hard to do), &lt;I&gt;&amp;amp;/or&lt;/I&gt; when incremental changes smaller than the 20% perception threshold we must provide appropriate metrics to document what we did. 
&lt;P&gt;My Microsoft Assessment, Consulting, &amp;amp; Engineering (&lt;A href="http://blogs.msdn.com/ace_team" target=_blank mce_href="http://blogs.msdn.com/ace_team"&gt;A.C.E.&lt;/A&gt;) team &amp;amp; I often provide performance enhancements substantially larger than 20% in terms of all manner of metrics including duration. 
&lt;P&gt;&lt;B&gt;World-Class Applications Are the Result of Incremental Improvements&lt;/B&gt; 
&lt;P&gt;Yet let’s not neglect that like many aspects of development, performance &amp;amp; scalability enhancements are incremental. Dittos for those changes which are significant in magnitude, yet don’t result in a significant performance enhancement visible to the user. For example, I recently documented how a simple configuration change resulted in an &lt;A href="http://blogs.msdn.com/jimmymay/archive/2008/12/02/case-study-part-2-cxpacket-wait-stats-max-degree-of-parallelism-option-suppressing-query-parallelism-eliminated-cxpacket-waits-liberated-30-of-cpu.aspx" target=_blank mce_href="http://blogs.msdn.com/jimmymay/archive/2008/12/02/case-study-part-2-cxpacket-wait-stats-max-degree-of-parallelism-option-suppressing-query-parallelism-eliminated-cxpacket-waits-liberated-30-of-cpu.aspx"&gt;immediate, persistent 30% CPU enhancement and reduction in SQL Server wait stats of 78%&lt;/A&gt;. The customer was thrilled—yet the user experience was scarcely affected. 
&lt;P&gt;In addition, best practices often demand many things the transition to which may not in-&amp;amp;-of-themselves show obvious immediate benefits.&amp;nbsp; &lt;STRONG&gt;&lt;EM&gt;It is my position that incremental improvements in performance &amp;amp; scalability made possible by compliance with best practices provide a foundation fundamentally critical for success.&lt;/EM&gt;&lt;/STRONG&gt; 
&lt;P&gt;An analogy would be the forces binding the DNA helix.&amp;nbsp; Hydrogen bonding is one of the weakest molecular bonds in biology, any individual one of which can be cleaved quite easily.&amp;nbsp; However, billions of discrete H-bonds result in a virtually indivisible unit the cleavage of which requires specific enzymatic action.&amp;nbsp; 
&lt;P&gt;Likewise the result of multiple tuning iterations will result eventually in only incremental changes beyond the ability of humanoids to appreciate, yet the aggregate effect can be vital to an applications &amp;amp; organization’s success. 
&lt;P&gt;&lt;STRONG&gt;Why World-Class Applications Seek Incremental Improvement&lt;/STRONG&gt; 
&lt;P&gt;A deck&amp;nbsp;from &lt;A href="http://cs193h.stevesouders.com/" target=_blank mce_href="http://cs193h.stevesouders.com/"&gt;CS193H High Performance Web Sites&lt;/A&gt; by Stanford Professor Steve Souders contains this information:&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width=400 border=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=133&gt;&lt;STRONG&gt;Company&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=133&gt;&lt;STRONG&gt;Delay&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=133&gt;&lt;STRONG&gt;Business Loss&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=133&gt;Google&lt;/TD&gt;
&lt;TD class="" vAlign=top width=133&gt;500ms&lt;/TD&gt;
&lt;TD class="" vAlign=top width=133&gt;20% traffic&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=133&gt;Amazon&lt;/TD&gt;
&lt;TD class="" vAlign=top width=133&gt;100ms&lt;/TD&gt;
&lt;TD class="" vAlign=top width=133&gt;1% sales&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Of course, we go initially for the most bang for our buck, &amp;amp; pick off the low hanging fruit first (&amp;amp; other clichéd metaphors). 
&lt;P&gt;This data demonstrates that incremental improvements translate to big bucks in mature, world-class applications. 
&lt;P&gt;As an architect out in the real-world, I constantly strived to introduce best practices into our applications.&amp;nbsp; After several years on the job, incremental improvements were all we had left, yet it still made business sense to pursue them. 
&lt;P&gt;A proper, disciplined amalgamation of best practices can result in scalable, robust, performant, world-class applications—a classic example of the whole being greater than the sum of its parts (there's another one of those darned clichés). 
&lt;P&gt;&lt;B&gt;Perception Problems are People Problems&lt;/B&gt; 
&lt;P&gt;So, it’s great to produce 20% &amp;amp; greater performance enhancements, yet such improvements can’t be sustained round after round after round of tuning.&amp;nbsp; 
&lt;P&gt;It is important—isn’t it always?—to perform appropriate expectations setting when only incremental changes are possible.&amp;nbsp; As &lt;A href="http://www.practicethis.com/" target=_blank mce_href="http://www.practicethis.com"&gt;Alik Levin&lt;/A&gt; shares with us, "&lt;A href="http://blogs.msdn.com/alikl/archive/2008/11/12/three-laws-of-consulting-by-gerald-m-weinberg.aspx" target=_blank mce_href="http://blogs.msdn.com/alikl/archive/2008/11/12/three-laws-of-consulting-by-gerald-m-weinberg.aspx"&gt;No matter how it looks at first, it's always a people problem&lt;/A&gt;". 
&lt;P&gt;What’s your perception of implementing best practices?&lt;BR&gt;What’s your perception of performance?&lt;BR&gt;Tell me. 
&lt;P&gt;&lt;B&gt;Administrivia&lt;/B&gt;&lt;B&gt;&lt;/B&gt; 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693" target=_blank mce_href="http://blogs.msdn.com/user/Profile.aspx?UserID=28693"&gt;Jimmy May&lt;/A&gt;&lt;FONT size=1&gt;&lt;B&gt;, &lt;/B&gt;MCDBA, MCSE, MCITP: DBA + DB Dev Senior Performance Consultant: SQL Server&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;A href="http://blogs.msdn.com/ace_team" target=_blank mce_href="http://blogs.msdn.com/ace_team"&gt;A.C.E.&lt;/A&gt;: Assessment Consulting &amp;amp; Engineering Services&lt;BR&gt;&lt;A href="http://blogs.msdn.com/jimmymay" target=_blank mce_href="http://blogs.msdn.com/jimmymay"&gt;http://blogs.msdn.com/jimmymay&lt;/A&gt; &lt;/FONT&gt;&lt;FONT size=1&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;I&gt;Performance is paramount: Asking users to wait is like asking them to leave.&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;This post was written with the &lt;/STRONG&gt;&lt;STRONG&gt;&lt;A href="http://www.practicethis.com/" target=_blank mce_href="http://www.practicethis.com"&gt;PracticeThis.com&lt;/A&gt;&lt;/STRONG&gt;&lt;STRONG&gt; &lt;/STRONG&gt;&lt;STRONG&gt;&lt;A href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer" target=_blank mce_href="http://practicethis.com/blog-post-template-plugin-for-windows-live-writer"&gt;plugin for Windows Live Writer&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9287334" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jimmymay/archive/tags/News/default.aspx">News</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Geekly/default.aspx">Geekly</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Fundamentals/default.aspx">Fundamentals</category><category domain="http://blogs.msdn.com/jimmymay/archive/tags/Architecture/default.aspx">Architecture</category></item></channel></rss>