<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Ak4DQXc-eSp7ImA9WhBWF0w.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225</id><updated>2013-04-11T18:22:50.951-04:00</updated><category term="Analysis Services" /><category term="Key Lookups" /><category term="SSAS Memory" /><category term="Query Plan Analysis" /><category term="Windows File Cache" /><category term="Immersion Training" /><category term="SQL Server Training" /><category term="Qure" /><category term="Execution Plans" /><category term="SharePoint" /><category term="Release Updates" /><category term="SQLSaturday" /><category term="v7" /><category term="CPU Performance" /><category term="Fusion-io" /><category term="Performance Advisor" /><category term="SQL Sentry" /><category term="PASS Summit" /><category term="SQLCruise" /><category term="Event Manager" /><category term="Defrag" /><category term="Memory Limits" /><category term="Plan Explorer" /><title>SQLsensei</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://greg.blogs.sqlsentry.net/" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/GregGonzalez" /><feedburner:info uri="greggonzalez" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUIASHs6eyp7ImA9WhBQF0Q.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-2204786952299339428</id><published>2013-03-08T17:57:00.001-05:00</published><updated>2013-03-20T12:39:09.513-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-20T12:39:09.513-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Query Plan Analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="Plan Explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="Release Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="Execution Plans" /><title>Plan Explorer PRO 2.5: Query plans your way</title><content type="html">&lt;p&gt;Have you ever worked with a query plan that was so large and unwieldy that it was next to impossible to make any sense of it? It can be a frustrating endeavor, for sure. &lt;a href="http://www.sqlsentry.net/plan-explorer/" target="_blank"&gt;Plan Explorer&lt;/a&gt; has always done some things that can help with these plans, such as color-scaling costs and vertically compressing subtrees. Even so, when you're zoomed out to 10% and still only fitting a quarter of the plan on screen, color-scaling won't buy you much.&lt;/p&gt;  &lt;p&gt;The new version of Plan Explorer PRO 2.5 is focused on making these big plans easier to manage, and it does so using a variety of techniques that &lt;em&gt;you&lt;/em&gt; have been asking for, which I will cover below. All of these new features are managed by this new toolbar at bottom of the plan diagram:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-Q6KiHuxespY/UTpvPlzTmhI/AAAAAAAAA1A/gbm9sf7g5eU/s1600-h/LayoutEditor%25255B4%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="LayoutEditor" border="0" alt="LayoutEditor" src="http://lh6.ggpht.com/-eISfoULkkbc/UTpvP1vInvI/AAAAAAAAA1I/lspkiLpm5WE/LayoutEditor_thumb%25255B2%25255D.png?imgmax=800" width="865" height="38" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Operation Filtering&lt;/h4&gt;  &lt;p&gt;The quickest way to shrink most plans is to apply a cost filter using the &lt;b&gt;Filter&lt;/b&gt; slider. This is just as it sounds – if an operator's (aka, iterator's) cost is less than the specified filter value, it will disappear from view. There is a caveat: any operators &amp;quot;upstream&amp;quot; in the same subtree as an unfiltered operator (one that exceeds the filter value) will still be shown, in an effort to avoid changing the meaning of the plan too dramatically. The net effect is that as you increase the filter value, op nodes will start dropping off at the leaf levels, working up towards the root node.&lt;/p&gt;  &lt;p&gt;Here's a nice example using a plan Jonathan Kehayias (&lt;a href="http://www.sqlskills.com/blogs/jonathan/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="https://twitter.com/SQLPoolBoy" target="_blank"&gt;twitter&lt;/a&gt;) shared with me a while back, aptly named &amp;quot;ReallyBadPlan.sqlplan&amp;quot;:&lt;/p&gt;  &lt;p&gt;Here is the original, with no filter:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-iT6gVNuxZT0/UTpt9M2oalI/AAAAAAAAA0w/z8fLtKwO0mc/s1600-h/BigPlan-Unfiltered2%25255B8%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="BigPlan-Unfiltered2" border="0" alt="BigPlan-Unfiltered2" src="http://lh6.ggpht.com/-EaCQnoDuSeg/UTpt9i2tpZI/AAAAAAAAA04/efkw9S1ECBc/BigPlan-Unfiltered2_thumb%25255B4%25255D.jpg?imgmax=800" width="488" height="214" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;... and with a .1% filter applied:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-5i2HvgNSayg/UTpsP0toQ4I/AAAAAAAAAyQ/TBMF3pnlces/s1600-h/BigPlan-Point1Pct%25255B1%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="BigPlan-Point1Pct" border="0" alt="BigPlan-Point1Pct" src="http://lh5.ggpht.com/-E-YU_zWQfug/UTpsQJgqKdI/AAAAAAAAAyY/2Djez7wxgcQ/BigPlan-Point1Pct_thumb.jpg?imgmax=800" width="488" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;...and with a 2.3% filter applied:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-taYpLBGftkU/UTpsQouCDVI/AAAAAAAAAyg/ox_xRc7ptik/s1600-h/BigPlan-2Point3%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="BigPlan-2Point3" border="0" alt="BigPlan-2Point3" src="http://lh5.ggpht.com/-YM5mRVUw_DQ/UTpsQkAE04I/AAAAAAAAAyo/RT7T3cq99Aw/BigPlan-2Point3_thumb%25255B1%25255D.jpg?imgmax=800" width="487" height="143" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As you can see, with big plans a little filtering can go a long way. The zoom level is reduced significantly, and the whole (filtered) plan is in view. The more op nodes, the lower the average cost per node, so this makes sense.&lt;/p&gt;  &lt;h4&gt;Collapsible Subtrees&lt;/h4&gt;  &lt;p&gt;Another way to quickly reduce a plan is by collapsing subtrees that aren't of interest. You do this via the new expander element on the head node of each subtree:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-mq9w1FGNxNE/UTpsQ8aNNPI/AAAAAAAAAyw/duK4kyhcW5o/s1600-h/Expander3.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Expander" border="0" alt="Expander" src="http://lh3.ggpht.com/-SamWY3oXVxw/UTpsRYl73FI/AAAAAAAAAy4/s7NRznMKpHQ/Expander_thumb1.jpg?imgmax=800" width="545" height="207" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The expander's primary function here is to collapse, but &amp;quot;collapser&amp;quot; just doesn't have the same ring to it ;-)&lt;/p&gt;  &lt;h4&gt;Multiple Layout Modes&lt;/h4&gt;  &lt;p&gt;Some plan types simply don't fit well on screen, and this is where using a different layout mode can be helpful. It'll be easiest to illustrate this with a couple of common examples.&lt;/p&gt;  &lt;p&gt;First, let me say that these &amp;quot;non-standard&amp;quot; plan layouts may be unsettling for some. If for whatever reason you are only willing or able to process plans using the traditional layout, my recommendation is this: don't use this feature, and skip to the next section now, lest you may have these images permanently seared into your brain!&lt;/p&gt;  &lt;h5&gt;Stair Step Plans&lt;/h5&gt;  &lt;p&gt;First up is a fairly extreme example of a &amp;quot;stair step&amp;quot; type plan, which I see most often with data warehouse queries against star schemas:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-ZBLyZOSs2fI/UTpsRmItXtI/AAAAAAAAAzA/F4CXogFLv1U/s1600-h/StairStep4.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="StairStep" border="0" alt="StairStep" src="http://lh5.ggpht.com/-rmhOslrYFVE/UTpsSKhumKI/AAAAAAAAAzI/cDVk6UHKc4Q/StairStep_thumb2.jpg?imgmax=800" width="404" height="318" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The plan is so vertically intensive that there is no way to get the entire thing in view and still have it be usable. By usable I mean in a state where I can clearly see the costs, colorization, line widths, operator glyphs, and other visual cues necessary for troubleshooting.&lt;/p&gt;  &lt;p&gt;By changing to &lt;strong&gt;Alt-1&lt;/strong&gt; mode we can vertically compress this plan in dramatic fashion:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-dF6GxAAKBIs/UTpsSTJ1svI/AAAAAAAAAzQ/F1U_vZJKZVA/s1600-h/StairStep-Alt13.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="StairStep-Alt1" border="0" alt="StairStep-Alt1" src="http://lh5.ggpht.com/-znhDqxGjMJc/UTpsSs4UOZI/AAAAAAAAAzY/Js91FYtoLxo/StairStep-Alt1_thumb1.jpg?imgmax=800" width="831" height="94" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I haven't applied any filters, or changed any other settings, and as you can see it's already much more usable. The trick is being able to do a little neural rewiring such that the non-standard orientation of some of the nodes with respect to each other doesn't interfere too much with your interpreting the plan.&lt;/p&gt;  &lt;h5&gt;UNION Query Plans&lt;/h5&gt;  &lt;p&gt;With UNION queries you effectively have multiple individual plans in all their glory stacked on top of each other. This can make them quite tall due to the potentially large subtrees off of the concatenation operators, as in this plan:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/--5BAOf43S5w/UTpsS6PUWjI/AAAAAAAAAzg/HnyOHCFme2g/s1600-h/Union3.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Union" border="0" alt="Union" src="http://lh4.ggpht.com/-pSgedVAE8d4/UTpsTcVw_DI/AAAAAAAAAzo/KxuSjugMOxc/Union_thumb1.jpg?imgmax=800" width="136" height="387" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Bus&lt;/strong&gt; mode can sometimes help with this, like so:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-0WVo-OL_WE4/UTpsTkN0JGI/AAAAAAAAAzw/fVPodZWgly0/s1600-h/Union-Bus%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Union-Bus" border="0" alt="Union-Bus" src="http://lh5.ggpht.com/-dApFwKfm2RE/UTpsaPLua1I/AAAAAAAAAz0/UvUHUOq13yo/Union-Bus_thumb%25255B1%25255D.jpg?imgmax=800" width="659" height="225" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;With Bus, subtrees can be centered and staggered, taking better advantage of the horizontal screen real estate, typically a less precious commodity on modern displays.&lt;/p&gt;  &lt;p&gt;Be warned, not every layout mode will work well with every plan. For example, Bus mode applied to the &amp;quot;Really Bad Plan&amp;quot; above will create something far nastier and far less usable than the original. Every plan is different, so you may need to experiment to find which layout works best.&lt;/p&gt;  &lt;h4&gt;Rotation&lt;/h4&gt;  &lt;p&gt;As Paul White (&lt;a href="http://sqlblog.com/blogs/paul_white/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="https://twitter.com/SQL_Kiwi" target="_blank"&gt;twitter&lt;/a&gt;) describes in his post &lt;a href="http://sqlblog.com/blogs/paul_white/archive/2010/08/05/iterators-query-plans-and-why-they-run-backwards.aspx" target="_blank"&gt;Iterators, Query Plans, and Why They Run Backwards&lt;/a&gt;, plan execution order flows left-to-right, which is likely why Microsoft decided to put the root node on the left. He also covers how data flows in the opposite direction, right-to-left. So if you are concerned about IOs, you may commonly start on the right, as I do. Since this is opposite of normal reading direction for many of us, a mirrored view may be easier to process. This can be accomplished by clicking either rotate arrow twice to get to 180 degrees:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-K0RdBF41wFQ/UTpsaS82slI/AAAAAAAAAz8/ql3xelKjejM/s1600-h/Mirrored%25255B6%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Mirrored" border="0" alt="Mirrored" src="http://lh5.ggpht.com/-EoCMnBr0e_I/UTpsanmI8FI/AAAAAAAAA0E/OmU1-UFioDk/Mirrored_thumb%25255B4%25255D.jpg?imgmax=800" width="666" height="207" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you change to &lt;strong&gt;Centered&lt;/strong&gt; mode and click the right rotation arrow once to 90 degrees, the plan starts to look like an org chart, which may work better for those who read top-to-bottom (or who work in HR):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-4DHhnZM_A1E/UTpscmyce2I/AAAAAAAAA0M/DKVI6an-XWU/s1600-h/OrgChart%25255B6%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="OrgChart" border="0" alt="OrgChart" src="http://lh5.ggpht.com/-IR2rueIkjwo/UTpsgFCKpzI/AAAAAAAAA0U/MxMdVmWE9ZY/OrgChart_thumb%25255B4%25255D.jpg?imgmax=800" width="338" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Dynamic Auto-fit&lt;/h4&gt;  &lt;p&gt;Your wrist will appreciate this feature – it automatically resizes new layouts to fit the screen, so you don't have to continually change the zoom level after applying filters or otherwise changing the plan layout. (Astute readers may notice that this checkbox is shown in some of the shots and not others – that's because it was added while I was writing this, and I didn't feel like redoing a bunch of shots ;-)&lt;/p&gt;  &lt;h4&gt;Persisting and Sharing Custom Layouts&lt;/h4&gt;  &lt;p&gt;Custom layouts are automatically persisted when saving a plan with Plan Explorer as a .queryanalysis or .pesession file, and these files can be easily shared by clicking the &lt;strong&gt;Post to &lt;/strong&gt;&lt;a href="http://answers.sqlperformance.com" target="_blank"&gt;&lt;strong&gt;SQLPerformance.com&lt;/strong&gt;&lt;/a&gt; toolbar button, emailing, etc. Note that manually repositioned nodes are not currently persisted, but we're working on that.&lt;/p&gt;  &lt;p&gt;Did I mention that you can now easily &lt;strong&gt;upload your plans&lt;/strong&gt; to &lt;a href="http://answers.sqlperformance.com" target="_blank"&gt;Answers.SQLPerformance.com&lt;/a&gt; from all versions of Plan Explorer, and receive input from some of the world's foremost experts on query plans, including Paul White (&lt;a href="http://sqlblog.com/blogs/paul_white/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="https://twitter.com/SQL_Kiwi" target="_blank"&gt;twitter&lt;/a&gt;)? Aaron Bertand (&lt;a href="http://sqlblog.com/blogs/aaron_bertrand/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="https://twitter.com/AaronBertrand" target="_blank"&gt;twitter&lt;/a&gt;) covers this feature in detail &lt;a href="http://www.sqlperformance.com/2013/02/t-sql-queries/plan-explorer-upload-feature" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Plan Explorer PRO users who don't want to use the custom layout in a shared plan can hit the &lt;strong&gt;Defaults&lt;/strong&gt; button to reset everything. Plan Explorer FREE users can view, but cannot modify, Plan Explorer PRO custom layouts via the &lt;strong&gt;Apply Embedded Layout Options&lt;/strong&gt; checkbox at bottom left of the diagram:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-S8yHwe6K_m4/UTpsh5vFDvI/AAAAAAAAA0Y/CNG8gWmpYt4/s1600-h/ApplyLayoutOptions%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ApplyLayoutOptions" border="0" alt="ApplyLayoutOptions" src="http://lh6.ggpht.com/-pSPYcDUUcLU/UTps9EA_WqI/AAAAAAAAA0o/KEc1T0yFBTI/ApplyLayoutOptions_thumb%25255B1%25255D.jpg?imgmax=800" width="309" height="209" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Closing&lt;/h4&gt;  &lt;p&gt;There are probably as many different optimal layouts as there are big plans. Our goal with this release was to provide more control over how plans are presented, so you can view them in ways that work best for &lt;em&gt;you&lt;/em&gt;. You'll need to experiment to see which combinations of modes and settings work best for each plan. I've personally had a lot of fun playing around... even the really bad layouts can provide some entertainment value ;-)&lt;/p&gt;  &lt;p&gt;Kudos to the dev team led by Brooke Philpott (&lt;a href="http://brooke.blogs.sqlsentry.net/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="https://twitter.com/Macromullet" target="_blank"&gt;twitter&lt;/a&gt;) and QA team lead by Steve Wright (&lt;a href="http://steve.blogs.sqlsentry.net/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="https://twitter.com/SQL_Steve" target="_blank"&gt;twitter&lt;/a&gt;) for their great work here. Thanks also to those of you who have shared your ideas with us... this release is a direct result of that feedback.&lt;/p&gt;  &lt;p&gt;Oh, and if you find settings that work particularly well for certain plan shapes, please do let me know: ggonzalez at sqlsentry.net. Enjoy!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/MacLYZ56E7A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/2204786952299339428/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2013/03/plan-explorer-pro-query-plans-your-way.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/2204786952299339428?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/2204786952299339428?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/MacLYZ56E7A/plan-explorer-pro-query-plans-your-way.html" title="Plan Explorer PRO 2.5: Query plans your way" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-eISfoULkkbc/UTpvP1vInvI/AAAAAAAAA1I/lspkiLpm5WE/s72-c/LayoutEditor_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2013/03/plan-explorer-pro-query-plans-your-way.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YHQHc6eCp7ImA9WhNSFU4.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-3942577363830515954</id><published>2012-10-26T17:16:00.001-04:00</published><updated>2012-10-29T13:18:51.910-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-29T13:18:51.910-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event Manager" /><category scheme="http://www.blogger.com/atom/ns#" term="v7" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="CPU Performance" /><category scheme="http://www.blogger.com/atom/ns#" term="Query Plan Analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="Plan Explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="Release Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="PASS Summit" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><title>SQL Sentry v7.2 does Windows (and a whole lot more)</title><content type="html">&lt;p&gt;Since releasing &lt;a href="http://greg.blogs.sqlsentry.net/2012/05/sql-sentry-v7-goes-gold.html" target="_blank"&gt;SQL Sentry v7&lt;/a&gt; with &lt;a href="http://sqlsentry.net/fragmentation-manager/" target="_blank"&gt;Fragmentation Manager&lt;/a&gt; in May, we've been hard at work on v7.2. Development ran concurrently with &lt;a href="http://sqlsentry.net/plan-explorer/" target="_blank"&gt;Plan Explorer PRO&lt;/a&gt;, which was released last week. v7.2 includes two exciting new products: &lt;strong&gt;Performance Advisor for Windows&lt;/strong&gt; and &lt;strong&gt;Event Manager for Windows&lt;/strong&gt;. The release candidate was recently published, and you can download it from our &lt;a href="https://www.sqlsentry.net/Login.aspx" target="_blank"&gt;customer portal&lt;/a&gt;. (Existing customers please &lt;a href="http://sqlsentry.net/ContactUsPopup.aspx" target="_blank"&gt;contact us&lt;/a&gt; for eval licenses.)&lt;/p&gt;  &lt;p&gt;The new features fall into three main categories: &lt;a href="http://greg.blogs.sqlsentry.net/2012/10/sql-sentry-v72-does-windows-and-whole.html#queryplan"&gt;Query Plan Analysis&lt;/a&gt;, &lt;a href="http://greg.blogs.sqlsentry.net/2012/10/sql-sentry-v72-does-windows-and-whole.html#winmon"&gt;Windows Monitoring&lt;/a&gt;, and &lt;a href="http://greg.blogs.sqlsentry.net/2012/10/sql-sentry-v72-does-windows-and-whole.html#filtering"&gt;History/Alert Filtering&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Query Plan Analysis&lt;/h4&gt;  &lt;p&gt;As you may have guessed, the new version of &lt;a href="http://www.sqlsentry.net/performance-advisor/sql-server-performance.asp" target="_blank"&gt;Performance Advisor for SQL Server&lt;/a&gt; includes all Plan Explorer PRO features! Read about those &lt;a href="http://greg.blogs.sqlsentry.net/2012/10/it-time-to-go-pro.html" target="_blank"&gt;in my last post&lt;/a&gt;.&lt;/p&gt;  &lt;h4 id="winmon"&gt;Windows Monitoring&lt;/h4&gt;  &lt;p&gt;One of the most common requests we've received over the years has been for the ability to monitor &lt;em&gt;any&lt;/em&gt; Windows computer, such as one running &lt;strong&gt;SharePoint&lt;/strong&gt;, &lt;strong&gt;IIS&lt;/strong&gt;, &lt;strong&gt;SSRS&lt;/strong&gt;, or &lt;strong&gt;SSIS&lt;/strong&gt; services, but no SQL Server or SSAS services. Performance Advisor for SQL Server has actually always had Windows monitoring built in – it's effectively the left-hand side of the dashboard – the problem was, you only got it if you also had SQL Server or SSAS installed on the machine.&lt;/p&gt;  &lt;p&gt;I'm happy to say that not only has this restriction been removed in the new &lt;strong&gt;Performance Advisor for Windows&lt;/strong&gt;, but when combined with the new &lt;strong&gt;Event Manager for Windows&lt;/strong&gt; you now have truly unprecedented capabilities for monitoring Windows performance. Keep reading for a rundown.&lt;/p&gt;  &lt;h5&gt;Service &amp;amp; Process-level Metrics&lt;/h5&gt;  &lt;div&gt;To date, probably the most common way to find out what's happening with Windows processes has been via Windows Task Manager. Process Explorer is a more robust tool that is also used, however, both tools suffer from some critical shortcomings:&lt;/div&gt;  &lt;ol&gt;   &lt;li&gt;It's not easy to tell which Windows services are associated with which processes. Task Manager now has &amp;quot;Go to Service|Process&amp;quot; context menus, but in practical use they are not very helpful. Process Explorer requires a few clicks to view associated services. Most importantly, both tools are &amp;quot;one-process-at-a-time&amp;quot;. &lt;/li&gt;    &lt;li&gt;Lack of historical data. Process Explorer has some limited charting, but neither tool can show which process(es) brought a server to its knees 3 hours ago, let alone view the data in context with what was happening with SQL Server or other key metrics at the time. &lt;/li&gt;    &lt;li&gt;No way to easily get performance metrics for individual Windows services, or combined metrics for multiple related processes/services. SharePoint and IIS in particular utilize several processes and services, and the problem may actually be the cumulative impact. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Performance Advisor for Windows addresses all of these issues by:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Auto-correlating processes with services. &lt;/li&gt;    &lt;li&gt;Providing historical performance data for processes and services. &lt;/li&gt;    &lt;li&gt;Organizing related processes into friendly groups, with individual and group level metrics. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;In the dashboard shot below, the tannish series represents &lt;strong&gt;all SharePoint processes and services&lt;/strong&gt;, and by hovering over it I can instantly see that two SharePoint search processes together were mostly responsible for the CPU spike:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-mMQMssFM7Mw/UIr9gqk55rI/AAAAAAAAAvQ/w2oezZpGe3g/s1600-h/cpu_processes_sample%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="cpu_processes_sample" border="0" alt="cpu_processes_sample" src="http://lh4.ggpht.com/-7nuenM0gGa4/UIr9g5YmDpI/AAAAAAAAAvY/BMo3Mdoov4k/cpu_processes_sample_thumb%25255B2%25255D.jpg?imgmax=800" width="683" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If I want full details, I can simply select the range and then &lt;strong&gt;Jump To &amp;gt; Processes&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-5L3f5MCQiRg/UIr9h5afo1I/AAAAAAAAAvg/Pe0b4_6nu70/s1600-h/cpu_jumptoprocesses%25255B9%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="cpu_jumptoprocesses" border="0" alt="cpu_jumptoprocesses" src="http://lh4.ggpht.com/-2sFBGlNTeFU/UIr9irULJWI/AAAAAAAAAvo/HQXn8XkYxu8/cpu_jumptoprocesses_thumb%25255B5%25255D.jpg?imgmax=800" width="599" height="228" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;...which takes me directly to the new &lt;strong&gt;Processes tab&lt;/strong&gt;, where I have a full list of all active processes and metrics for the range, organized by service and group:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-7TrP6_DliIE/UIr9jesGVMI/AAAAAAAAAvw/zgS9DU0LYI8/s1600-h/processes_tab%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="processes_tab" border="0" alt="processes_tab" src="http://lh3.ggpht.com/-isyW71eXli8/UIr9kMwIo6I/AAAAAAAAAv4/zKM7qF-Ja70/processes_tab_thumb%25255B2%25255D.jpg?imgmax=800" width="695" height="302" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;font size="1"&gt;(click to enlarge)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It's just as easy to find the largest memory consumers – here there are several IIS worker processes consuming over 1GB of RAM, and causing memory pressure for a SQL Server instance on the same machine (not a recommended configuration!):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-von8TyZCiOE/UIr9ksH_jrI/AAAAAAAAAwA/eBeWnYXPQSE/s1600-h/memory_processes%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="memory_processes" border="0" alt="memory_processes" src="http://lh4.ggpht.com/-b-SDbBwsfyA/UIr9lSlsiFI/AAAAAAAAAwI/0k6USjrVlSc/memory_processes_thumb%25255B1%25255D.jpg?imgmax=800" width="646" height="346" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Several groups come preconfigured, including SharePoint, IIS, SSIS, SSRS, and SQL Sentry, and we'll be expanding this list as time goes on. You can also easily add new groups yourself – more on that in a future post.&lt;/p&gt;  &lt;p&gt;If, like me, you've spent way too much time using the &amp;quot;old school&amp;quot; ways of troubleshooting process/service-related performance issues, these new features should be a godsend.&lt;/p&gt;  &lt;h5&gt;Processor Groups + NUMA Support&lt;/h5&gt;  &lt;p&gt;With Windows Server 2008 R2, Microsoft introduced &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs.85).aspx" target="_blank"&gt;processor groups&lt;/a&gt; as part of support for more than 64 processors on a single computer. Lately we've been seeing more and more of these systems come online for both multi-instance SQL Server environments, as well as VMWare or Hyper-V hosts running tens or hundreds of VMs.&lt;/p&gt;  &lt;p&gt;Previously the PA dashboard maxed out at 40 processors due to limitations in how perflib reported instance level data. Now the dashboard will show utilization across all processors on a system. Here's a shot of an 80-processor system (4 x 10 cores, hyperthreaded):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/--DhK40AW08s/UIr9ltCJQqI/AAAAAAAAAwQ/C3ZLJ6f_W0c/s1600-h/cpu_numa_pgs%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="cpu_numa_pgs" border="0" alt="cpu_numa_pgs" src="http://lh4.ggpht.com/-Hm7-KCLfFIw/UIr9mBG94eI/AAAAAAAAAwY/2eTrxD4-g8M/cpu_numa_pgs_thumb%25255B1%25255D.jpg?imgmax=800" width="709" height="171" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;font size="1"&gt;(click to enlarge)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you look closely, you'll see that the NUMA node associated with each processor is indicated using the format &lt;em&gt;&amp;lt;NUMA Node ID&amp;gt;:&amp;lt;Processor ID&amp;gt;&lt;/em&gt;. This system has 4 NUMA nodes, and here only nodes 1 and 3 are active. This information can be invaluable for evaluating how your NUMA resources are being utilized, and for judging the effectiveness of &lt;a href="http://msdn.microsoft.com/en-us/library/ms345345(v=sql.105).aspx" target="_blank"&gt;configured affinity settings&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;Windows Event Log Monitoring&lt;/h5&gt;  &lt;p&gt;We've rolled the former Event Manager for Task Scheduler into the new &lt;strong&gt;Event Manager for Windows&lt;/strong&gt; product, and &lt;strong&gt;added Windows event log monitoring&lt;/strong&gt;, another hugely popular request!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-dbCjjRBNGN0/UIr9miMThBI/AAAAAAAAAxQ/y2ffREX_3LY/s1600-h/eventlogs%25255B8%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="eventlogs" border="0" alt="eventlogs" src="http://lh6.ggpht.com/-2UysjxLDux8/UIr9nPmn6GI/AAAAAAAAAxU/Df2MztXReU4/eventlogs_thumb%25255B4%25255D.jpg?imgmax=800" width="713" height="218" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can selectively enable/disable monitoring for the Application, Security and System logs individually. Once enabled, events will show up on the calendar and become available for alerting via the new &lt;strong&gt;Windows Event Log: Event&lt;/strong&gt; condition. By default, only the Application and System logs are watched by SQL Sentry, and only events from SQL Server or SQL Sentry services are collected using the new history filters.&lt;/p&gt;  &lt;h4 id="filtering"&gt;History and Alert Filtering&lt;/h4&gt;  &lt;p&gt;Which leads me to our next topic: filtering. There are two types of filters – history (or source) filters and alert (or condition) filters. They're both configured the exact same way.&lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;History Filtering&lt;/strong&gt;&lt;/h5&gt;  &lt;p&gt;Many &lt;a href="http://sqlsentry.net/help/ug/webframe.html?Event_Sources_Overview.html" target="_blank"&gt;event sources&lt;/a&gt; now have a configurable filter which allows you to tell SQL Sentry exactly which events you want to collect and store from that source, giving you much greater control over associated storage requirements, which events will show up on the calendar, and which are available for alerting. You'll find this under &lt;strong&gt;Settings &amp;gt; History Filter&lt;/strong&gt; for each source. This shot shows the new Windows Event Logs Source filter:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-8XudAXpDNR0/UIr9nq-Vu4I/AAAAAAAAAww/Vq-dPOS2VW4/s1600-h/source_filter%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="source_filter" border="0" alt="source_filter" src="http://lh6.ggpht.com/--tXO2bl4N9A/UIr9oev6DRI/AAAAAAAAAw4/5TmotA4jpGc/source_filter_thumb%25255B2%25255D.jpg?imgmax=800" width="377" height="418" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is the default filter (as mentioned above) which collects only events for the SQL Sentry and SQL Server applications, and only non-backup events (since you'll often already have the associated job and Top SQL events on the calendar). We've made this pretty restrictive to start since the Windows logs can get flooded with events from various sources, and we didn't want to overload you with stuff you may not want to see. That said, you are free to modify these filters to your heart's content ;-)&lt;/p&gt;  &lt;h5&gt;&lt;strong&gt;Alert Filtering&lt;/strong&gt;&lt;/h5&gt;  &lt;p&gt;You can think of alert filtering as a layer on top of history filtering. For example, using the history filter you may want to collect all SQL Server related events from the Windows logs and see them on the calendar, but you only want to be alerted for errors. This is trivial to configure by selecting the &lt;strong&gt;Condition&lt;/strong&gt; &lt;strong&gt;Settings tab&lt;/strong&gt; for the &lt;em&gt;Windows Event Log: Event&lt;/em&gt; condition:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-CrcQrtIxjRI/UIr9o5zsceI/AAAAAAAAAxY/I-l4vfCOzGw/s1600-h/condition_filter%25255B8%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="condition_filter" border="0" alt="condition_filter" src="http://lh5.ggpht.com/-hh8-j7i3nYo/UIr9poeUp9I/AAAAAAAAAxc/c4kRb8VRnD8/condition_filter_thumb%25255B4%25255D.jpg?imgmax=800" width="350" height="393" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A really cool aspect of filter configuration is that you pick from a list of filterable fields applicable to that particular source, and if the possible values are known, you pick from those too. Here are some other common use cases:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Only send an email for deadlocks NOT caused by a particular application (ahem, SharePoint ;-) &lt;/li&gt;    &lt;li&gt;Only send an SNMP trap to SCOM for SQL Agent job failures for jobs in a certain category &lt;/li&gt;    &lt;li&gt;Only alert for Top SQL failures coming from a specific host machine &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These examples are only scratching the surface of what's possible with the new filtering. I'm always interested in hearing how new features like this are put to use, so please let me know about your favorite filters.&lt;/p&gt;  &lt;h4&gt;More than Windows?&lt;/h4&gt;  &lt;p&gt;Although I've been using &amp;quot;Windows monitoring&amp;quot; as a general term, these new features are especially applicable to some specific scenarios such as &lt;strong&gt;managing a SharePoint Server farm where you have different services split across many servers&lt;/strong&gt;. You'll still have one or more SQL Servers playing a large role in farm performance, of course, but your visibility won't be limited to those servers... for the first time you can have a &lt;strong&gt;complete picture of performance across the entire farm&lt;/strong&gt;!&lt;/p&gt;  &lt;p&gt;We've published pricing for Performance Advisor for Windows, Event Manager for Windows, and the combined Power Suite for Windows &lt;a href="http://sqlsentry.net/Pricing.aspx" target="_blank"&gt;here&lt;/a&gt;. The full product pages should be live by early next week.&lt;/p&gt;  &lt;p&gt;We'll be showing off v7.2 in person over the next two weeks at &lt;a href="http://www.devconnections.com/shows/fall2012/default.aspx?s=191" target="_blank"&gt;DevConnections&lt;/a&gt; and then the &lt;a href="http://www.sqlpass.org/summit/2012/" target="_blank"&gt;PASS Summit&lt;/a&gt;, so please stop by our booth for a full tour!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/vNt77mdYoPw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/3942577363830515954/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2012/10/sql-sentry-v72-does-windows-and-whole.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3942577363830515954?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3942577363830515954?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/vNt77mdYoPw/sql-sentry-v72-does-windows-and-whole.html" title="SQL Sentry v7.2 does Windows (and a whole lot more)" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-7nuenM0gGa4/UIr9g5YmDpI/AAAAAAAAAvY/BMo3Mdoov4k/s72-c/cpu_processes_sample_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2012/10/sql-sentry-v72-does-windows-and-whole.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAMSHo9fCp7ImA9WhNXGE0.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-2201905045630142008</id><published>2012-10-11T16:33:00.001-04:00</published><updated>2012-12-06T09:23:09.464-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-06T09:23:09.464-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="v7" /><category scheme="http://www.blogger.com/atom/ns#" term="Query Plan Analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="Plan Explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="Release Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><category scheme="http://www.blogger.com/atom/ns#" term="Execution Plans" /><title>It's Time to Go PRO!</title><content type="html">&lt;p&gt;It's hard to believe that we released the first version of &lt;a href="http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp#features" target="_blank"&gt;Plan Explorer&lt;/a&gt; almost two years ago! The acceptance it has seen by the SQL Server community during that time has been amazing, and tremendously gratifying for all of us here at &lt;a href="http://www.sqlsentry.net/" target="_blank"&gt;SQL Sentry&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;From the start we've had many requests for additional features and functionality. Many of those went directly into the free tool (for a full list go &lt;a href="http://downloads.sqlsentry.net/downloads/sqlsentryplanexplorer/PEChange_List.html" target="_blank"&gt;here&lt;/a&gt;). For others, it was obvious that some serious heavy lifting and/or an increase in the support requirements would be involved, making them not well-suited for a free tool.&lt;/p&gt;  &lt;p&gt;Before I get into PRO, let me clarify something up front:&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;* The FREE version of Plan Explorer is not going anywhere *&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We are simply rebranding it &amp;quot;Plan Explorer FREE&amp;quot;, and it will continue to be enhanced, as it has been in this release.&lt;/p&gt;  &lt;h4&gt;PRO Features&lt;/h4&gt;  &lt;p&gt;Plan Explorer PRO is the result of many months of building out several of those high effort/high value features you've been asking for. Initially we've targeted the features that we believe will have the greatest impact on efficiency and information sharing. Here are the top 5 major features in PRO:&lt;/p&gt;  &lt;h5&gt;1) Multi-tab Interface&lt;/h5&gt;  &lt;p&gt;This is just as it sounds. You no longer need to launch a new version of the app for each query tuning session, you just open a new tab!&lt;/p&gt;  &lt;h5&gt;2) Session History Tracking&lt;/h5&gt;  &lt;p&gt;Multi-tab is great, but after using PRO daily for some time now, &lt;strong&gt;I cannot understate the value of history tracking.&lt;/strong&gt; PRO tracks every new plan that's generated and auto-assigns it a version. With a single click you can go back to any version of a query to see how well your T-SQL optimizations or indexing changes are working:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-avUd3OUotmE/UHctAwB0KEI/AAAAAAAAAuE/3MLIpE2333A/s1600-h/history_tracking%25255B5%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="history_tracking" border="0" alt="history_tracking" src="http://lh4.ggpht.com/-UY-2beAanWw/UHctBeLLVrI/AAAAAAAAAuM/tLI7R2r-LXQ/history_tracking_thumb%25255B3%25255D.png?imgmax=800" width="509" height="301" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can easily add comments to each version via the dropdown or Comments pane. You also have the option of tracking only when the query text changes, which can reduce the number of versions created. I prefer to keep full tracking on, since generally when I generate a new plan and haven't changed the query text it's because I've made an indexing change, and I want to see the impact. I know I can always delete unwanted versions by right-clicking and selecting &lt;strong&gt;Delete&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;You can save a query tuning session as a .pesession file for archiving or sharing. For example, if you're a consultant doing query tuning work, you can send the client the .pesession file to show all of the work you did to improve query performance, step-by-step. I've found that this is great for educational purposes as well, as I'm often trying to teach someone how to use Plan Explorer... now they're able to use .pesession files as a reference for future query optimizations.&lt;/p&gt;  &lt;p&gt;History tracking not only saves the last statement selected in each version, but also &lt;strong&gt;saves the exact position and zoom level of the plan diagram for each statement!&lt;/strong&gt; This is extremely helpful when you're dealing with large plans that require scrolling to a specific point – you can maintain that position and flip back and forth between versions for comparison, without any scrolling/zooming. All of this information is persisted in .pesession files.&lt;/p&gt;  &lt;p&gt;Plan Explorer FREE is able to open .pesession files, but it can only view one plan version at a time, and will prompt you to select one upon opening.&lt;/p&gt;  &lt;h5&gt;3) Wait Statistics&lt;/h5&gt;  &lt;p&gt;For SQL Server 2008 and above, when generating an actual plan you'll see a new Wait Stats tab appear with the cumulative waits for that execution:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-KGewExDdTPQ/UHctBuJYWXI/AAAAAAAAAuU/T79_lKhC4Y8/s1600-h/wait_stats%25255B4%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="wait_stats" border="0" alt="wait_stats" src="http://lh5.ggpht.com/-bhI_hNlnsx0/UHctCM-NZTI/AAAAAAAAAuc/2YWOj0AB6Tg/wait_stats_thumb%25255B2%25255D.png?imgmax=800" width="300" height="165" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There is a lot of information out there on wait stats analysis, including this &lt;a href="http://www.sqlskills.com/blogs/paul/post/Wait-statistics-or-please-tell-me-where-it-hurts.aspx" target="_blank"&gt;great post&lt;/a&gt; by Paul Randal (&lt;a href="http://www.sqlskills.com/blogs/paul/" target="_blank"&gt;b&lt;/a&gt;|&lt;a href="https://twitter.com/PaulRandal" target="_blank"&gt;t&lt;/a&gt;), so I'm not going to delve further into that here.&lt;/p&gt;  &lt;h5&gt;4) Full Query Call Stack&lt;/h5&gt;  &lt;p&gt;This has been one of the true power features in &lt;a href="http://www.sqlsentry.net/performance-advisor/" target="_blank"&gt;SQL Sentry Performance Advisor&lt;/a&gt; for some time – I blogged about it &lt;a href="http://greg.blogs.sqlsentry.net/2011/02/sql-sentry-v6-plan-analysis-features.html#callstack" target="_blank"&gt;here&lt;/a&gt;. Now it's available in Plan Explorer PRO at a fraction of the price.&lt;/p&gt;  &lt;p&gt;Previously, when generating an actual plan with Plan Explorer the Statements Tree was effectively a flat list of statements, similar to how SSMS does it. In PRO you will see the full hierarchy of all statements with conditional logic and looping, and even statements called via dynamic SQL!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-28FVh_dHUm4/UHctCUpxO2I/AAAAAAAAAuk/uJAIuBf_sUE/s1600-h/call_stack%25255B6%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="call_stack" border="0" alt="call_stack" src="http://lh3.ggpht.com/-DcTAZA9Fusw/UHctDETfnFI/AAAAAAAAAus/hY4QxJemw1c/call_stack_thumb%25255B4%25255D.png?imgmax=800" width="621" height="262" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;5) Deadlocks&lt;/h5&gt;  &lt;p&gt;PRO contains another power feature from Performance Advisor: it can open deadlocks (.xdl files). You see the same awesome deadlocks view as in Performance Advisor – an optimized, sequenced deadlock graph synced with a grid with details for each node, including the query text:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-jGPOHwO4QSM/UHctDU8nk3I/AAAAAAAAAu0/-6e2A6tLBak/s1600-h/deadlocks%25255B9%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="deadlocks" border="0" alt="deadlocks" src="http://lh4.ggpht.com/-BlV0MJzgEzs/UHctEAwMZeI/AAAAAAAAAu8/Kh_Vk1B9-vU/deadlocks_thumb%25255B5%25255D.png?imgmax=800" width="462" height="363" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is also great for information sharing – if you're a DBA and use Performance Advisor, you can easily export deadlocks it captures and send them to the development team for analysis, without providing access to the full SQL Sentry Client. All they need is Plan Explorer PRO.&lt;/p&gt;  &lt;h5&gt;Other Features Shared with Plan Explorer FREE&lt;/h5&gt;  &lt;p&gt;There are quite a few fixes and minor features shared between PRO and FREE, including:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The new &lt;strong&gt;Status Bar&lt;/strong&gt; at bottom which shows various connection details, query compilation and execution times, and actual rows affected. &lt;/li&gt;    &lt;li&gt;The &lt;strong&gt;Command Text&lt;/strong&gt; pane is now full screen! If you are a heavy user, you probably know how annoying it was to continually resize this pane as query changes were made. &lt;/li&gt;    &lt;li&gt;Persistent connections. This is another big one. Previously, every time you hit the Estimated or Actual Plan buttons you'd be prompted for the connection. Now it works more like SSMS: it only prompts when needed, the connection details are shown in the status bar, and you can change the active connection at any time using &lt;strong&gt;Edit &amp;gt; Connection&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;New &lt;strong&gt;Show Estimated Plan&lt;/strong&gt; toolbar button. I kid ;-) This function has been there since we added the ability to generate actual plans, it was just well hidden behind a tiny little button... which was a shame since many people missed it, and the ability to toggle between actual and estimated plans is an invaluable feature when query tuning. It's now much more prominent on the toolbar. If you haven't used it before I encourage you to try it, as it can make inaccurate estimates at the operation level really jump out. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As you can see, Plan Explorer FREE is already benefitting from the increased effort we've put into making Plan Explorer truly more of a professional application... versus what we had before, which was effectively a big chunk of code extracted from Performance Advisor, with some &amp;quot;wrapper&amp;quot; code added to make it function as a standalone app.&lt;/p&gt;  &lt;h4&gt;Setup, Licensing, etc.&lt;/h4&gt;  &lt;p&gt;Both Plan Explorer FREE and PRO use the same codebase and setup. When you first launch Plan Explorer after install, you'll be prompted whether to go directly into FREE mode, or evaluate PRO for 15 days. This is not a persistent nag screen, you will only see it once after the initial install. However, if you decide to use FREE, you can always go back and start the PRO eval at any time using the Help menu.&lt;/p&gt;  &lt;p&gt;For PRO, we've opted against charging annual software maintenance (ASM), and instead charge only a &lt;a href="http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp#pricing" target="_blank"&gt;per seat license fee of $295&lt;/a&gt; (volume discounts apply). This covers support, and any incremental releases for that major version. When the major version changes, e.g., when we release Plan Explorer PRO v2, there will be an optional discounted upgrade fee. This keeps things simpler for everyone. We won't be bothering you every year for ASM, and you decide whether or not it's worth it to upgrade. This also helps to ensure that we continue to add high value features to PRO ;-)&lt;/p&gt;  &lt;p&gt;Please give the new &lt;a href="http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp#features" target="_blank"&gt;Plan Explorer&lt;/a&gt; a try, and let us know what you think!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/JCt8P4vdQ9E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/2201905045630142008/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2012/10/it-time-to-go-pro.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/2201905045630142008?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/2201905045630142008?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/JCt8P4vdQ9E/it-time-to-go-pro.html" title="It&amp;#39;s Time to Go PRO!" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-UY-2beAanWw/UHctBeLLVrI/AAAAAAAAAuM/tLI7R2r-LXQ/s72-c/history_tracking_thumb%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2012/10/it-time-to-go-pro.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUHSHszcCp7ImA9WhNTEEg.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-4533129978353770622</id><published>2012-07-16T10:53:00.001-04:00</published><updated>2012-10-12T12:10:39.588-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-12T12:10:39.588-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Sentry" /><title>Kevin Kline joins the SQL Sentry Team!</title><content type="html">&lt;p&gt;Almost 10 years ago, SQL Sentry software was in its infancy, and was still used exclusively by our hosting business (now &lt;a href="http://peak10.com/" target="_blank"&gt;Peak 10&lt;/a&gt;). I remember clearly bringing the entire hosting team together one afternoon to watch a webcast on query tuning... a webcast put on by none other than Kevin Kline (&lt;a href="http://kevinekline.com/" target="_blank"&gt;b&lt;/a&gt;|&lt;a href="https://twitter.com/kekline" target="_blank"&gt;t&lt;/a&gt;). At that point Kevin was already one of the most active and visible people in the SQL Server community, but I'd never heard him speak. I recall being impressed by the quality of technical content as well as Kevin's seasoned presentation skills... and this was back when webcasts of this type were not commonplace. Kevin was ahead of the curve. Several people in the room were more networking or hardware-focused, but Kevin was so good at distilling complex subject matter down to easily digestible essentials that even they left with new query tuning skills.&lt;/p&gt;  &lt;p&gt;I didn't meet Kevin until a few years later when he came to Charlotte to present at a &lt;a href="http://charlotte-sql.org/" target="_blank"&gt;CSSUG&lt;/a&gt; meeting. I must admit I was a little nervous and maybe even a bit star struck going in. (Please don't tell Kevin ;-) I was half expecting someone arrogant, self-absorbed, and possibly even combative given that our companies were direct competitors by then. Boy, was I off the mark! Here was a guy that was friendly, humble and engaging, pretty much the opposite of what I'd anticipated... no sign whatsoever of any of the trappings common to years in the spotlight. (I'm sure that those of you that know Kevin are chuckling at my severe misreckoning)&lt;/p&gt;  &lt;p&gt;When reading &lt;a href="http://kevinekline.com/bio/" target="_blank"&gt;Kevin's bio&lt;/a&gt;, I can't help but feel humbled by the magnitude of his selfless efforts in the SQL Server community over the years. For a recap, I'd recommend checking out &lt;a href="http://www.sqlmag.com/article/sql-server/kevin-kline-unplugged" target="_blank"&gt;this SQLMag interview&lt;/a&gt;. If reading it makes you ask yourself, &amp;quot;What have I done lately to give back?&amp;quot;, you are not alone. Kevin is one of the good guys, and we are extremely fortunate to have him as part of our team.&lt;/p&gt;  &lt;p&gt;Not to worry, you won't be seeing any less of Kevin. I expect him to be just as engaged in the SQL Server community as he's always been, perhaps more so. Our goal is to tap into Kevin's unique abilities to the greatest extent possible, and enable him to get back to his roots in some respects. He's certainly going to be involved in some exciting community-focused initiatives here at SQL Sentry.&lt;/p&gt;  &lt;p&gt;It's tempting to draw correlations with LeBron's move to the Heat – the initial shock felt by many, and the eventual benefit to both the individual and the team – but I will refrain ;-)&lt;/p&gt;  &lt;p&gt;One thing is sure: although the uniform will be changing, it'll be the same Kevin you know and love underneath.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/l0lyY5QmBQs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/4533129978353770622/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2012/07/kevin-kline-joins-sql-sentry-team.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/4533129978353770622?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/4533129978353770622?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/l0lyY5QmBQs/kevin-kline-joins-sql-sentry-team.html" title="Kevin Kline joins the SQL Sentry Team!" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2012/07/kevin-kline-joins-sql-sentry-team.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UAR3Y8fip7ImA9WhNSEkU.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-1158912273978515715</id><published>2012-05-03T08:56:00.001-04:00</published><updated>2012-10-26T18:07:26.876-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-26T18:07:26.876-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event Manager" /><category scheme="http://www.blogger.com/atom/ns#" term="v7" /><category scheme="http://www.blogger.com/atom/ns#" term="Release Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="Defrag" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><title>SQL Sentry v7 goes Gold!</title><content type="html">&lt;p&gt;After what has been a relatively smooth beta, we're going gold with v7 today! Read more about v7 features in &lt;a href="http://greg.blogs.sqlsentry.net/2012/04/sql-sentry-v7-beta-first-look.html" target="_blank"&gt;my last post&lt;/a&gt;. I've also got some exciting news regarding &lt;strong&gt;new fragmentation-related features included in the base software&lt;/strong&gt;, and how to get &lt;strong&gt;FREE licenses of both Performance Advisor and Fragmentation Manager&lt;/strong&gt;.&lt;/p&gt;  &lt;h4&gt;New Base Software Features&lt;/h4&gt;  &lt;p&gt;Originally &lt;a href="http://sqlsentry.net/fragmentation-manager/sql-server-index-analysis-and-defrag.asp" target="_blank"&gt;Fragmentation Manager&lt;/a&gt; was designed to be either ON or OFF, there was no in between. When it was OFF for a server, no table and index size or fragmentation-related data whatsoever was made available inside either &lt;a href="http://sqlsentry.net/performance-advisor/sql-server-performance.asp" target="_blank"&gt;Performance Advisor&lt;/a&gt; or &lt;a href="http://sqlsentry.net/event-manager/sql-server-enterprise.asp" target="_blank"&gt;Event Manager&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;We've changed this, in a big way. A significant portion of the new features previously found only in Fragmentation Manager are now ON by default, whether or not you've purchased a license for it. Here's what you now get out of the box with v7, for both new installs and upgrades:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;New &amp;quot;Indexes&amp;quot; tab in Performance Advisor, with table/index size and other details &lt;/li&gt;    &lt;li&gt;Scheduled and manual fragmentation analysis with adjustable scan mode, from the SQL Server instance down to partition level &lt;/li&gt;    &lt;li&gt;Table/index size and other details on the Performance Advisor Disk Space tab, organized by data file &lt;/li&gt;    &lt;li&gt;Calendar display of all historical and future fragmentation analysis events, with drag-and-drop support &lt;/li&gt;    &lt;li&gt;New &amp;quot;Databases&amp;quot; node for each SQL Server instance in the Navigator pane, listing all table and indexes &lt;/li&gt;    &lt;li&gt;Partitioning sliding window support for fragmentation analysis (defrag only max partition, or all others)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These are some significant capabilities which should add value for most any environment.&lt;/p&gt;  &lt;p&gt;If you purchase and enable Fragmentation Manager, here are the additional features that become available:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Automated Defragmentation      &lt;ul&gt;       &lt;li&gt;Scheduled and manual rebuilds &amp;amp; reorgs, from the SQL Server instance down to partition level &lt;/li&gt;        &lt;li&gt;Support for multiple concurrent defrag operations, which can dramatically reduce overall defrag time &lt;/li&gt;        &lt;li&gt;Adjustable rebuild/reorg thresholds, scan mode and many other options&amp;#160; &lt;/li&gt;        &lt;li&gt;Post-defrag analysis capability, so you can instantly see gains from defrag &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Calendar display of all historical and future defrag events, with drag-and-drop support &lt;/li&gt;    &lt;li&gt;Alerting for defrag success, failure, and completion &lt;/li&gt;    &lt;li&gt;Partitioning sliding window support for defrag (defrag only max partition, or all others)&lt;/li&gt;    &lt;li&gt;Historical trending via multiple charts on the Indexes tab:      &lt;ul&gt;       &lt;li&gt;Total server fragmentation, by fragmented % range &lt;/li&gt;        &lt;li&gt;Total server disk space used, and wasted by fragmentation &lt;/li&gt;        &lt;li&gt;Total server buffer space used, and wasted by fragmentation &lt;/li&gt;        &lt;li&gt;Index fragmentation &lt;/li&gt;        &lt;li&gt;Index disk/buffer space used/wasted &lt;/li&gt;        &lt;li&gt;Index activity &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In a nutshell, the base v7 software provides dramatically increased visibility into table/index size and fragmentation information, and Fragmentation Manager gets you automated defragmentation and many associated options, as well as historical trending.&lt;/p&gt;  &lt;h4 id="v7free"&gt;FREE Licenses of Performance Advisor and Fragmentation Manager!&lt;/h4&gt;  &lt;p&gt;If the above included features weren't enough, we've introduced 2 new ways for you to get FREE software licenses:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;If you own five (5) licenses of Performance Advisor and five (5) licenses of Event Manager, you will automatically get:      &lt;ul&gt;       &lt;li&gt;One (1) Performance Advisor license, for monitoring the SQL Server instance where your SQLSentry database is located ($1495 value) &lt;/li&gt;        &lt;li&gt;One (1) Fragmentation Manager license, for defragmenting the SQL Server instance where your SQLSentry database is located ($795 value) &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Regardless of the number of licenses you own, if you monitor the SQL Server instance where your SQLSentry database is located with a paid license of Performance Advisor, you will automatically get:      &lt;ul&gt;       &lt;li&gt;One (1) Fragmentation Manager license, for defragmenting this instance only ($795 value) &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Some important points:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;These free licenses won't show up in your license counts, they are just &amp;quot;there&amp;quot; ;-) &lt;/li&gt;    &lt;li&gt;If you meet the criteria for #1 above and are already monitoring the SQL Server instance holding your SQLSentry database with a paid Performance Advisor license, then you're effectively getting a 6th PA license for free, which you can use to monitor any server. &lt;/li&gt;    &lt;li&gt;There are no ASM (annual software maintenance) costs for these free licenses, and they are perpetual. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Thanks again to all who participated in the beta, and we hope you like what you see in SQL Sentry v7!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Download SQL Sentry v7 here:&lt;/strong&gt; &lt;a href="http://www.sqlsentry.net/download-trial/trial.asp" target="_blank"&gt;New Users&lt;/a&gt; | &lt;a href="https://www.sqlsentry.net/Login.aspx" target="_blank"&gt;Existing Users&lt;/a&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/EbLf_fjSfJY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/1158912273978515715/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2012/05/sql-sentry-v7-goes-gold.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/1158912273978515715?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/1158912273978515715?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/EbLf_fjSfJY/sql-sentry-v7-goes-gold.html" title="SQL Sentry v7 goes Gold!" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2012/05/sql-sentry-v7-goes-gold.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UAR3YzeSp7ImA9WhNSEkU.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-3574717265302575276</id><published>2012-04-10T02:35:00.001-04:00</published><updated>2012-10-26T18:07:26.881-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-26T18:07:26.881-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event Manager" /><category scheme="http://www.blogger.com/atom/ns#" term="v7" /><category scheme="http://www.blogger.com/atom/ns#" term="Release Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="Defrag" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><title>SQL Sentry v7 Beta: First Look</title><content type="html">&lt;p&gt;It's been a while since my last post. Yes, we're still here (as you well know if you follow us on &lt;a href="http://www.facebook.com/SQLSentry" target="_blank"&gt;Facebook&lt;/a&gt; or &lt;a href="https://twitter.com/#!/SQL_Sentry" target="_blank"&gt;Twitter&lt;/a&gt;), we've just been heads down since the PASS Summit getting v7 ready to ship. It's been a long road, but we're releasing the public beta today!&lt;/p&gt;  &lt;p&gt;v7 represents the culmination of almost a year of effort, and ideas going back much, much further than that. We've completely redone several aspects of the software such as alerting (condition and action) configuration, and we've added some awesome new features like &lt;strong&gt;automated defrag, computer groups,&lt;/strong&gt; and &lt;strong&gt;CMS support&lt;/strong&gt; to boot. Did I mention SQL Server 2012? ;-)&lt;/p&gt;  &lt;h4&gt;Terminology Changes&lt;/h4&gt;  &lt;p&gt;We've made some long overdue changes to the SQL Sentry lexicon in the interest of making things clearer, and since I'll be using these new terms I wanted to get this out of the way first:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A &lt;strong&gt;Device&lt;/strong&gt; is now a &lt;strong&gt;Computer&lt;/strong&gt; (pretty sure I just heard a collective &lt;em&gt;HOORAY!&lt;/em&gt; – trust me, we had our reasons for devices, but we won't get into that here ;-) &lt;/li&gt;    &lt;li&gt;The former &lt;strong&gt;Global&lt;/strong&gt; node is now the &lt;strong&gt;Shared Groups&lt;/strong&gt; node &lt;/li&gt;    &lt;li&gt;The SQL Sentry &lt;strong&gt;Console&lt;/strong&gt; is now the SQL Sentry &lt;strong&gt;Client&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;The SQL Sentry &lt;strong&gt;Server&lt;/strong&gt; Service is now the SQL Sentry &lt;strong&gt;Monitoring&lt;/strong&gt; Service &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Computer Groups&lt;/h4&gt;  &lt;p&gt;The first thing existing users will notice when they open the client is the new &lt;strong&gt;Shared Groups&lt;/strong&gt; node at the very top of the Navigator. This node represents your entire SQL Sentry environment organized by Site. It is called &amp;quot;shared&amp;quot; because every SQL Sentry user sees exactly the same view here. The user-specific device registrations and groups (formerly Global) has been moved and renamed to &lt;strong&gt;Local Groups&lt;/strong&gt; to better reflect what they actually are. You can still configure server-specific settings and below here, but not global settings – those are now set at the Shared Groups root node only.&lt;/p&gt;  &lt;p&gt;Sites have always been there to enable logical partitioning of servers and monitoring services. For example, if your HQ is in Atlanta, but you have 100 SQL Servers in Miami and 200 SQL Servers in New York, you might install one monitoring service in Miami, and two in New York. You would create a site for each location, and place the monitoring services in the appropriate site so that they only monitor the servers in their location.&lt;/p&gt;  &lt;p&gt;In v7, you can now easily apply special alerting rules to the servers in Miami and New York, versus having to touch each server in order to override global alerting settings:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-xV2uETCaAxw/T4PUm1SYeTI/AAAAAAAAAr4/HoG0m_xCavo/s1600-h/ComputerGroups4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ComputerGroups" border="0" alt="ComputerGroups" src="http://lh5.ggpht.com/-xE8nYY28j7I/T4PUnVuIdSI/AAAAAAAAAsA/T1KM1-wjGaE/ComputerGroups_thumb2.png?imgmax=800" width="748" height="312" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In addition, you can create unlimited nested child groups in each site, and – you guessed it – apply specialized rules to those groups as well. The inheritance works exactly as it always has in SQL Sentry, you start at the highest level (Shared Groups), then override those global settings as needed at lower levels. Previously alerting &amp;amp; setting configuration looked like this:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Global      &lt;ul&gt;       &lt;li&gt;Computer          &lt;ul&gt;           &lt;li&gt;SQL Server              &lt;ul&gt;               &lt;li&gt;Object (job, report, etc.) &lt;/li&gt;             &lt;/ul&gt;           &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now it looks like this:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Shared Groups      &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;&lt;em&gt;Site&lt;/em&gt; &lt;/strong&gt;          &lt;ul&gt;           &lt;li&gt;&lt;em&gt;&lt;strong&gt;[Child Group] [,...n]&lt;/strong&gt;&lt;/em&gt;&amp;#160; &lt;ul&gt;               &lt;li&gt;Computer                  &lt;ul&gt;                   &lt;li&gt;SQL Server                      &lt;ul&gt;                       &lt;li&gt;Object &lt;/li&gt;                     &lt;/ul&gt;                   &lt;/li&gt;                 &lt;/ul&gt;               &lt;/li&gt;             &lt;/ul&gt;           &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As you can see, the ability to group servers can dramatically reduce the alerting configuration required for many environments.&lt;/p&gt;  &lt;h4&gt;Custom Object Groups&lt;/h4&gt;  &lt;p&gt;Being able to click on a group node in the Navigator and easily change settings for a bunch of servers at once is great, but it's inherently limited by the fact that a computer node can only exist in one group at a time in the navigator. What if you want to have another set of rules for servers that effectively &amp;quot;cuts across&amp;quot; navigator groups? For example, &amp;quot;All QA Servers&amp;quot; in both Miami and New York?&lt;/p&gt;  &lt;p&gt;This is easy to do with custom groups. You simply create a new group by double-clicking the &lt;strong&gt;Object Groups&lt;/strong&gt; node in the navigator, add the QA servers to it, then adjust the settings:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-a3EdtBy1hIY/T4PUoV12P3I/AAAAAAAAAsI/XbBE-ZLq4nM/s1600-h/ObjectGroups3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ObjectGroups" border="0" alt="ObjectGroups" src="http://lh6.ggpht.com/-qu1us2FlnQY/T4PUoyFDjHI/AAAAAAAAAsQ/gCgMYhmi5pI/ObjectGroups_thumb1.png?imgmax=800" width="752" height="313" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Similarly, if you wanted to disable Runtime Threshold alerts for all transaction log backup jobs, you can easily search on the jobs using a name pattern, use Shift + left click to highlight and add several at once, add the Runtime Max condition, then select &amp;quot;Disable&amp;quot;.&lt;/p&gt;  &lt;h4 id="fragman"&gt;Automated Defragmentation&lt;/h4&gt;  &lt;p&gt;Your first thought here may be, &amp;quot;I already have scripts that perform automated defragmentation, why do I need a tool?&amp;quot; Good question! Here are three compelling reasons:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Manageability &lt;/li&gt;    &lt;li&gt;Visibility &lt;/li&gt;    &lt;li&gt;Defrag Speed &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Manageability&lt;/h5&gt;  &lt;p&gt;There are several great scripts out there that many use to perform automated defrag. They can get the job done, but the main issue is that they are all, well, scripts. Configuring exactly which databases and indexes are defragmented and when can be a challenging and time-consuming task, especially if you are talking about 10s or 100s of SQL Servers. Manual script changes and multiple jobs on each server are typically required.&lt;/p&gt;  &lt;p&gt;With our new &lt;strong&gt;Fragmentation Manager&lt;/strong&gt; module, just like everything else in SQL Sentry, you can start at the top and work your way down. For example, if you have 20 SQL Servers, you can set a default global defrag schedule of 2am for all servers at once by enabling it at the Shared Groups level:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-pjrgaIO-P8M/T4PUpWSUGAI/AAAAAAAAAsY/FbYbEP_Zt8k/s1600-h/GlobalDefrag7.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="GlobalDefrag" border="0" alt="GlobalDefrag" src="http://lh4.ggpht.com/-W3SFZWPvj-M/T4PUpw0VY5I/AAAAAAAAAsg/3nG_J0MH_jM/GlobalDefrag_thumb3.png?imgmax=800" width="412" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So in 30 seconds or less, you've configured enterprise-wide defrag!&lt;/p&gt;  &lt;p&gt;&lt;em&gt;DISCLAIMER: I am NOT recommending that you do this, as every environment is different, and you'd of course want to disable any existing defrag jobs first. I'm just letting you know what is possible ;-)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Typically you'll want to enable Fragmentation Manager at the SQL Server instance level by right-clicking the instance in the navigator pane, or clicking the Enable button on the new Indexes tab inside Performance Advisor.&lt;/p&gt;  &lt;p&gt;Once you've enabled one or more defrag schedules, if you view the &amp;quot;Defragmentation Schedule&amp;quot; sample event view, or the calendars for any of those servers, you'll see defrag instances show up alongside other events:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-O8OSe8XVIpE/T4PUqlVBoOI/AAAAAAAAAso/aWjNDDqcr0Q/s1600-h/DefragSchedule5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="DefragSchedule" border="0" alt="DefragSchedule" src="http://lh3.ggpht.com/-oW52nt-VI4g/T4PUrP9TR1I/AAAAAAAAAsw/1prnBprvCQA/DefragSchedule_thumb3.png?imgmax=800" width="740" height="348" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can of course drag-and-drop to move them. But what if you have a 100GB index on one of the servers that really needs to be analyzed and defragged separately? You simply select the index and override the inherited schedule:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-2dZUyEJCLw4/T4PUr_Ps0tI/AAAAAAAAAs4/i8XU1DhIg4Q/s1600-h/IndexSchedule6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="IndexSchedule" border="0" alt="IndexSchedule" src="http://lh3.ggpht.com/-Mc3i0wMdckg/T4PUs2No38I/AAAAAAAAAtA/QttMDdJA-iA/IndexSchedule_thumb4.png?imgmax=800" width="743" height="320" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It's that easy. Everything is point-and-click, and since the SQL Sentry monitoring service manages all of the defrag tasks, there are no scripts or jobs required.&lt;/p&gt;  &lt;h5&gt;Visibility&lt;/h5&gt;  &lt;p&gt;Once you've enabled the Fragmentation Management Module on a SQL Server, you'll see a new &lt;strong&gt;Fragmentation&lt;/strong&gt; tab appear inside Performance Advisor:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-vOpSx7OQQkw/T4PUtWusPuI/AAAAAAAAAtI/PaLbnQkM7XI/s1600-h/FragTab4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="FragTab" border="0" alt="FragTab" src="http://lh3.ggpht.com/-h56b4bVpQr0/T4PUuE5_x2I/AAAAAAAAAtQ/7w-olp8rT0k/FragTab_thumb2.png?imgmax=800" width="758" height="432" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This tab has tons of good information about your indexes, including 6 charts showing disk and buffer space, used and wasted, both total and at the index level. The purpose of this tab is not only let you know the state of fragmentation on a server, but help you make good decisions about how and when to defrag your indexes, adjust fill factors, or even change index definitions. One of the coolest charts on this tab is &lt;strong&gt;Index Space Usage&lt;/strong&gt; (center bottom) – it shows you exactly how much of an index is on disk and in buffer over time, and how much disk and buffer space is wasted due to non-full pages.&lt;/p&gt;  &lt;p&gt;There are also 3 new alerting conditions:&lt;strong&gt; Defrag Started, Completed,&lt;/strong&gt; and &lt;strong&gt;Failure&lt;/strong&gt;, so you can be as informed as you want to be regarding the status of your SQL Sentry defrag operations.&lt;/p&gt;  &lt;h5&gt;Speed&lt;/h5&gt;  &lt;p&gt;No, we haven't invented some magical new higher performance technology for analyzing and defragging your indexes... however, we have come up with a unique approach for potentially dramatically speeding up your regular defrag process, thereby reducing the maintenance window required for defrag – &lt;strong&gt;by allowing more than one concurrent defrag operation:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-EvEDo5mTAfo/T4PUuk2v3EI/AAAAAAAAAtY/H-X1UIZ1BEw/s1600-h/MaxOps7.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="MaxOps" border="0" alt="MaxOps" src="http://lh4.ggpht.com/-aZgdNPUHOUI/T4PUvdgTsUI/AAAAAAAAAtg/1trdctiP4i0/MaxOps_thumb3.png?imgmax=800" width="409" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If your disk system can handle it, why not run multiple analysis or defrag tasks in tandem? Most systems we've tested have no problem running 2 or 3 concurrent defrag ops, especially when indexes are split across multiple data files and disks. An op can be an analysis, reorg, or rebuild. Currently this setting is capped at 5 for safety. I recommend starting with 2 concurrent ops on a test server, and see how it performs. With the Performance Advisor dashboard and Disk Activity views, you can easily assess the performance impact of increasing the concurrent defrag ops.&lt;/p&gt;  &lt;h4 id="v7alerting"&gt;Alerting Enhancements&lt;/h4&gt;  &lt;p&gt;In addition to group-based alerting configuration, many other major improvements have been made in the area of alerting:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You can now configure multiple actions of the same type for the same condition! For example, you can have 3 different &lt;strong&gt;Send Email&lt;/strong&gt; actions for the &lt;strong&gt;Job Failure&lt;/strong&gt; condition, each with different alert targets (users or groups), different rulesets, and different alert windows. &lt;/li&gt;    &lt;li&gt;What's this, &amp;quot;windows&amp;quot;? Yes, that's right, you can now set exactly when contacts should be alerted using configurable ranges of time, for example &amp;quot;Business Hours&amp;quot; or &amp;quot;Weekends&amp;quot;. You can even create compound windows which combine multiple windows together. &lt;/li&gt;    &lt;li&gt;We no longer list all conditions by default, only those that are in effect. This can dramatically reduce the noise when viewing and configuring alerts. &lt;/li&gt;    &lt;li&gt;Inherited conditions/actions are displayed in one pane, and conditions/actions set at the current level are in another (Explicit). &lt;/li&gt;    &lt;li&gt;Since there can now be multiple levels of inheritance with groups, we show you exactly where the inherited settings are coming from via the Object column. &lt;/li&gt;    &lt;li&gt;You can choose to &lt;strong&gt;Disable, Override,&lt;/strong&gt; or &lt;strong&gt;Combine&lt;/strong&gt; with an inherited condition action. Combine works just as it sounds – you can set the same action again at the current level, but leave the inherited action in effect. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Together, I think you'll find that these changes make for the most flexible and robust alerting system we've ever had.&lt;/p&gt;  &lt;h4&gt;Performance Advisor Dashboard Enhancements&lt;/h4&gt;  &lt;p&gt;Aside from various cosmetic improvements, the two primary new features on the dashboard are NUMA support and mirroring queue monitoring. When monitoring a NUMA system, you'll notice that both the Windows and SQL Server memory charts are now split to show exactly how much memory is allocated to and used by each NUMA node. In addition, page life expectancy history is also shown for each node. When monitoring a system acting as a primary, mirror, or both, the Send and/or Redo Queues are shown on the same chart previously used to show backup/restore activity.&lt;/p&gt;  &lt;h4&gt;Beta Download&lt;/h4&gt;  &lt;p&gt;For a full list of all changes in v7 &lt;a href="http://downloads.sqlsentry.net/downloads/beta/SSChange_List.html" target="_blank"&gt;click here&lt;/a&gt;. I've really only scratched the surface. Please take the beta for a spin, and let us know what you think – we want your feedback!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sqlsentry.net/download-trial/trial.asp" target="_blank"&gt;New Users&lt;/a&gt;     &lt;br /&gt;&lt;a href="https://www.sqlsentry.net/Login.aspx" target="_blank"&gt;Existing Users&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As always, upgrading your existing SQL Sentry environment to the beta, and from the beta to v7 RTM is fully supported. Be sure to take a backup of your current SQL Sentry database first. Rolling back for any reason is easy – uninstall the beta, restore the database backup, then reinstall the previous version and point it to the database. No settings will be lost.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/PQXdf81HWjg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/3574717265302575276/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2012/04/sql-sentry-v7-beta-first-look.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3574717265302575276?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3574717265302575276?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/PQXdf81HWjg/sql-sentry-v7-beta-first-look.html" title="SQL Sentry v7 Beta: First Look" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-xE8nYY28j7I/T4PUnVuIdSI/AAAAAAAAAsA/T1KM1-wjGaE/s72-c/ComputerGroups_thumb2.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2012/04/sql-sentry-v7-beta-first-look.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQMQHs8fCp7ImA9WhdaFEs.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-2828341744389239684</id><published>2011-10-07T17:40:00.001-04:00</published><updated>2011-10-24T09:19:41.574-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-24T09:19:41.574-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event Manager" /><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="Analysis Services" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Sentry" /><category scheme="http://www.blogger.com/atom/ns#" term="PASS Summit" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><title>SQL Sentry v6.2: SharePoint Timer Jobs, Oh My!</title><content type="html">&lt;p&gt;We recently released SQL Sentry v6.2, and it introduces an exciting new product: &lt;strong&gt;&lt;a href="http://sqlsentry.net/event-manager/sharepoint.asp" target="_blank"&gt;Event Manager for SharePoint&lt;/a&gt;&lt;/strong&gt;. v6.2 contains several other new features as well, including &lt;a href="http://greg.blogs.sqlsentry.net/2011/10/sql-sentry-v62-sharepoint-timer-jobs-oh.html#ssasusage"&gt;SSAS usage metrics&lt;/a&gt;, &lt;a href="http://greg.blogs.sqlsentry.net/2011/10/sql-sentry-v62-sharepoint-timer-jobs-oh.html#eventoverlayshot"&gt;performance dashboard event overlay&lt;/a&gt;, &lt;a href="http://greg.blogs.sqlsentry.net/2011/10/sql-sentry-v62-sharepoint-timer-jobs-oh.html#enhancedsecurity"&gt;enhanced console security&lt;/a&gt;, and a &lt;a href="http://greg.blogs.sqlsentry.net/2011/10/sql-sentry-v62-sharepoint-timer-jobs-oh.html#newsetup"&gt;streamlined setup process&lt;/a&gt;. SharePoint support and SSAS usage in particular have been heavily requested, so this release should make quite a few customers very happy!&lt;/p&gt;  &lt;h4&gt;SharePoint Timer Job Monitoring&lt;/h4&gt;  &lt;p&gt;If you already use SharePoint, you may be familiar with the concept of &lt;strong&gt;timer jobs&lt;/strong&gt;. SharePoint 2010 has its own scheduler service that carries out various background tasks on an ongoing basis – &lt;strong&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc678870.aspx" target="_blank"&gt;over 100 timer jobs out of the box&lt;/a&gt;&lt;/strong&gt;, ranging from health checks to data imports to history cleanup. These jobs can run on any server in the farm, and they can access resources on other servers. Most of the jobs are set to run on predefined recurring schedules, and the net result is a significant amount of timer job activity going on pretty much all day and night. Since much of this activity is touching SQL Server, it's critical for the database administrator to have visibility into exactly when the jobs are running, and to be able to ascertain the impact they are having on performance.&lt;/p&gt;  &lt;p&gt;Using the &lt;strong&gt;Event Manager for SharePoint&lt;/strong&gt; calendar, here's a shot of a typical SharePoint timer job schedule over two days:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-kxbw7BtEFm0/Tpxxjmrl5EI/AAAAAAAAAbQ/l81CTqP-umU/s1600-h/sharepoint_cal_2day_hist%25255B6%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sharepoint_cal_2day_hist" border="0" alt="sharepoint_cal_2day_hist" src="http://lh6.ggpht.com/-2oHUJeAfiCo/TpxxkpMTLYI/AAAAAAAAAbY/GbAo397bUP0/sharepoint_cal_2day_hist_thumb%25255B3%25255D.png?imgmax=800" width="582" height="432" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The instances in orange indicate a runtime overlap of at least 20 seconds, so it's apparent that many timer jobs run at the same time – that's right, the dreaded schedule collisions! One of the primary reasons for the existence of the Event Manager calendar is of course to be able to detect and resolve schedule collisions, so even if you've already cleaned up your SQL Agent schedules, you'll be able to put it to good use again for timer jobs ;-)&lt;/p&gt;  &lt;p&gt;Here's a shot of the 12am slot with timer jobs only:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-jXQpxtu2Qdg/To9xxRIcmAI/AAAAAAAAAZw/ltd7NOjw4Jw/s1600-h/sharepoint_cal_tmd_hilite_sm4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sharepoint_cal_tmd_hilite_sm" border="0" alt="sharepoint_cal_tmd_hilite_sm" src="http://lh5.ggpht.com/-iN3F3-B5Vag/To9xxnCbtdI/AAAAAAAAAZ0/q2n3MP971CA/sharepoint_cal_tmd_hilite_sm_thumb2.png?imgmax=800" width="616" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We have no less than 20 timer jobs running concurrently at midnight every night. The calendar view can be easily expanded to include other events to see if these jobs are colliding with SQL Agent jobs, for example.&lt;/p&gt;  &lt;p&gt;Here's a closer view of the 4pm slot, with SQL events from the timer jobs included. You can distinguish the timer jobs from the SQL events at a glance by the small glyphs in the upper left of each instance:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-8RD5mVtm6sA/To9xypLOMaI/AAAAAAAAAZ4/20sLpzHy2Wg/s1600-h/sharepoint_collision_raw.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sharepoint_collision_raw" border="0" alt="sharepoint_collision_raw" src="http://lh6.ggpht.com/-hMO-y4-o9tY/To9xzNh6VqI/AAAAAAAAAZ8/A7t3odnqlKY/sharepoint_collision_raw_thumb.png?imgmax=800" width="579" height="431" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I know, this is pretty ugly, so I'll apply a quick filter to show only events with duration &amp;gt;3 seconds:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-Hacex-f6a4U/To9xz30rM5I/AAAAAAAAAaA/lE5WsrthjCU/s1600-h/sharepoint_collision_3sec.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sharepoint_collision_3sec" border="0" alt="sharepoint_collision_3sec" src="http://lh5.ggpht.com/-AXoEHgLuY_w/To9x0RXkPsI/AAAAAAAAAaE/1sq62b1B8Ow/sharepoint_collision_3sec_thumb.png?imgmax=800" width="579" height="431" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Again, these are all out of the box jobs and schedules! In multi-server farms, not all jobs may be running on the same server, so the server on which a job ran is shown in its tooltip along with many other details.&lt;/p&gt;  &lt;p&gt;Timer job schedules can work quite differently than SQL Agent, Windows Scheduler, or other schedulers you may have seen. They can use the concept of &amp;quot;ranges&amp;quot; – you set possible start and end times, and the job can run any time during that range. Supposedly the randomness will help avoid job collisions... but note the &amp;quot;SharePoint BI Maintenance&amp;quot; job in the middle of this shot with odd start time of &amp;quot;12:00:40 PM&amp;quot;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-ycyXCM8xQrc/To9x0lzyXpI/AAAAAAAAAaI/mDYBJPuOaGk/s1600-h/sharepoint_collision%25255B2%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sharepoint_collision" border="0" alt="sharepoint_collision" src="http://lh5.ggpht.com/-PlxY1Va-vA8/To9x08oWVoI/AAAAAAAAAaM/o4Kle9dl_Pg/sharepoint_collision_thumb%25255B1%25255D.png?imgmax=800" width="759" height="123" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Yep, you guessed it, it's using a range! If I right-click the job and select &lt;strong&gt;Properties&lt;/strong&gt;, I'm launched into the job schedule in the SharePoint Central Administration web interface:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-JvIlUTD9fLQ/To9x1Elr5JI/AAAAAAAAAaQ/Y1MB8Jnqt_U/s1600-h/image6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-qKnX4am6ywc/To9x1gsDnHI/AAAAAAAAAaU/QVsFKK156dI/image_thumb4.png?imgmax=800" width="603" height="370" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We can see that this job is set to run hourly, &lt;strong&gt;at any time during the hour.&lt;/strong&gt; So the randomness didn't help much here – it ended up running concurrently with 4 other jobs. Personally, I like to control exactly when my jobs run and not to leave that up to chance, so I changed both range values to 30, which effectively tells the job to run only at 30 minutes past the hour. (NOTE: You need to be setup as a farm administrator to access the schedule properties.)&lt;/p&gt;  &lt;p id="eventoverlayshot"&gt;Can timer jobs impact SQL Server performance? You'd better believe it! I'll demonstrate using another new feature, &lt;strong&gt;Dashboard Event Overlay&lt;/strong&gt; (more on this &lt;a href="http://greg.blogs.sqlsentry.net/2011/10/sql-sentry-v62-sharepoint-timer-jobs-oh.html#eventoverlay"&gt;below&lt;/a&gt;). By right-clicking a longer running timer job and selecting &lt;strong&gt;Jump To &amp;gt; Performance Advisor &amp;gt; Dashboard&lt;/strong&gt;...&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-6hL7mflGvwo/To9x12DCgnI/AAAAAAAAAaY/vYX2M-mq99s/s1600-h/sharepoint_jumpto_dashboard3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sharepoint_jumpto_dashboard" border="0" alt="sharepoint_jumpto_dashboard" src="http://lh5.ggpht.com/-xxNohr5AglI/To9x2NGZ6JI/AAAAAAAAAac/yPfOX18CLik/sharepoint_jumpto_dashboard_thumb1.png?imgmax=800" width="556" height="349" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;...I'm taken right into the &lt;a href="http://www.sqlsentry.com/performance-advisor/sql-server-performance.asp" target="_blank"&gt;Performance Advisor&lt;/a&gt; dashboard where the event duration is overlaid on the X-axis of each chart:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-7osjd2DGb-c/To9x21khxhI/AAAAAAAAAag/0vxPV4T6zmE/s1600-h/sharepoint_dashboard4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sharepoint_dashboard" border="0" alt="sharepoint_dashboard" src="http://lh3.ggpht.com/--TUApFQsyTk/To9x3R76FcI/AAAAAAAAAak/im1BpMUhuB8/sharepoint_dashboard_thumb2.png?imgmax=800" width="557" height="414" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We can see that there is a strong correlation with this job and several metrics, including:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Network inbound &lt;/li&gt;    &lt;li&gt;CPU &lt;/li&gt;    &lt;li&gt;Windows hard faults &lt;/li&gt;    &lt;li&gt;Disk latency &lt;/li&gt;    &lt;li&gt;Transactions and batches &lt;/li&gt;    &lt;li&gt;Bookmark lookups &lt;/li&gt;    &lt;li&gt;Disk waits &lt;/li&gt;    &lt;li&gt;Log flushes &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Since this particular job runs every 30 minutes, the real question becomes, how will it impact user activity against SharePoint databases on the same server throughout the day? More on this in a future post. &lt;/p&gt;  &lt;h4 id="ssasusage"&gt;SSAS Usage Totals&lt;/h4&gt;  &lt;p&gt;The next major new feature is the &lt;strong&gt;SSAS Usage Totals&lt;/strong&gt; tab, which is part of &lt;a href="http://sqlsentry.net/performance-advisor/sql-server-analysis-services.asp" target="_blank"&gt;&lt;strong&gt;Performance Advisor for SSAS&lt;/strong&gt;&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-ocCmNTjlHE8/To9x3gde3lI/AAAAAAAAAao/w7xWIJ2SDeU/s1600-h/ssas_usage_totals3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ssas_usage_totals" border="0" alt="ssas_usage_totals" src="http://lh6.ggpht.com/-dEHTE-48Q7I/To9x4Mi2qEI/AAAAAAAAAas/Jvznfb2iv4s/ssas_usage_totals_thumb1.png?imgmax=800" width="567" height="344" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Previously, SSAS usage information was only available at the query level, and you were unable to see the actual attribute members requested. This made it difficult to get a server-wide perspective on data access patterns. You can now see this server-level data aggregated three ways – by &lt;strong&gt;attribute&lt;/strong&gt;, &lt;strong&gt;aggregation&lt;/strong&gt;, or &lt;strong&gt;partition&lt;/strong&gt; – over any date range. If you spot a particular attribute combination that is heavily requested by many queries, you can right-click the row and copy the attribute vector to the clipboard, then paste it into &lt;a href="http://msftasprodsamples.codeplex.com/" target="_blank"&gt;Agg Manager&lt;/a&gt; to create the aggregation. (Look for this capability to be fully integrated in a future release.)&lt;/p&gt;  &lt;h4 id="enhancedsecurity"&gt;Enhanced Console Security&lt;/h4&gt;  &lt;p&gt;A common need, especially in larger, more segmented environments, is the ability to restrict visibility and access to certain servers to specific users. Previously, in the SQL Sentry Console you could use groups to effectively hide servers from unauthorized users, and we've always leveraged native security to ensure that there are no escalation of privileges risks – just because someone could &amp;quot;see&amp;quot; a server didn't mean they could do anything with it. Although this was fine for many environments, in others, unauthorized users aren't even allowed to know that certain servers exist! This was a problem.&lt;/p&gt;  &lt;p&gt;Hence the need for this new capability, which allows a SQL Sentry administrator to truly restrict SQL Sentry users to specific SQL Servers via their Windows login:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-5HGvV4z_oLE/To9x4TNSLTI/AAAAAAAAAaw/twtMZgbozHM/s1600-h/security_props4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="security_props" border="0" alt="security_props" src="http://lh5.ggpht.com/-5YcPdP1LjPc/To9x4omj9iI/AAAAAAAAAa0/mGB1_E2bD9w/security_props_thumb2.png?imgmax=800" width="429" height="345" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once associated, you simply select the servers that the user can access:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-t6cUUjzn4s4/To9x400HqSI/AAAAAAAAAa4/0O671B4Fljk/s1600-h/security_rights4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="security_rights" border="0" alt="security_rights" src="http://lh3.ggpht.com/-FRIULen0BPg/To9x5MaLS1I/AAAAAAAAAa8/AWmYD3-1ACE/security_rights_thumb2.png?imgmax=800" width="431" height="263" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For existing environments, nothing changes automatically when upgrading to v6.2. However, once a user has been associated with at least one SQL Server, from that point forward they can no longer access any other SQL Servers monitored by SQL Sentry in any way. This goes for any new servers that may be added later – the user must be explicitly associated with those servers before they are accessible via the console.&lt;/p&gt;  &lt;h4 id="eventoverlay"&gt;Dashboard Event Overlay&lt;/h4&gt;  &lt;p&gt;A powerful new feature is the ability to overlay events across the &lt;a href="http://www.sqlsentry.com/performance-advisor/sql-server-performance.asp" target="_blank"&gt;Performance Advisor&lt;/a&gt; dashboard charts (see &lt;a href="http://greg.blogs.sqlsentry.net/2011/10/sql-sentry-v62-sharepoint-timer-jobs-oh.html#eventoverlayshot"&gt;screenshots above&lt;/a&gt;). Previously, you might know that a SQL statement ran between X time and Y time, and you suspected that it was impacting performance, but when you flipped over to the dashboard there were no visual cues as to exactly when the event ran – you had to perform the correlation in your head. Now, if you use the &lt;strong&gt;Jump to Dashboard&lt;/strong&gt; context menu from either the Event Manager calendar or the Top SQL tab, you'll notice new horizontal indicators on the X-axes representing the selected event(s). When coming from the calendar, any event highlighted using the new enhanced highlighting options will have a corresponding indicator on the dashboard. This means that you can easily see what impact a particular user, application, or even SPID, is having on performance!&lt;/p&gt;  &lt;h4 id="newsetup"&gt;Streamlined Setup&lt;/h4&gt;  &lt;p&gt;Last but not least, we took a hard look at the installation process and initial setup wizard. Several screens were eliminated and/or consolidated, and the process was simplified overall. In addition, we've added a new &lt;strong&gt;Start Page&lt;/strong&gt; which gives you quick access to some of the more commonly used functions, every time you launch the console:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-WNNOUuCUHNw/To9x5uFL05I/AAAAAAAAAbA/RWNUfg7qdmM/s1600-h/start_page3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="start_page" border="0" alt="start_page" src="http://lh6.ggpht.com/-sguTJhmJmLQ/To9x5w1PQfI/AAAAAAAAAbE/JN5IL0CMe1I/start_page_thumb1.png?imgmax=800" width="434" height="468" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We'll be adding more to this page as time goes on.&lt;/p&gt;  &lt;p&gt;Take v6.2 for a spin and let us know what you think: &lt;a href="http://sqlsentry.net/download-trial/trial.asp" target="_blank"&gt;new users&lt;/a&gt; | &lt;a href="https://www.sqlsentry.net/Login.aspx" target="_blank"&gt;current users&lt;/a&gt;. I'm at the &lt;a href="http://www.sqlpass.org/summit/2011/" target="_blank"&gt;PASS Summit&lt;/a&gt; this week, so stop by for an in person demonstration, as well as a sneak peak at some exciting new features coming in v6.5!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/AFbLxPCd69c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/2828341744389239684/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2011/10/sql-sentry-v62-sharepoint-timer-jobs-oh.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/2828341744389239684?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/2828341744389239684?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/AFbLxPCd69c/sql-sentry-v62-sharepoint-timer-jobs-oh.html" title="SQL Sentry v6.2: SharePoint Timer Jobs, Oh My!" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-2oHUJeAfiCo/TpxxkpMTLYI/AAAAAAAAAbY/GbAo397bUP0/s72-c/sharepoint_cal_2day_hist_thumb%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2011/10/sql-sentry-v62-sharepoint-timer-jobs-oh.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUHRXc4eip7ImA9WhdbGEo.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-1444973464458219415</id><published>2011-05-18T16:32:00.001-04:00</published><updated>2011-10-17T14:47:14.932-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-17T14:47:14.932-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLSaturday" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server Training" /><category scheme="http://www.blogger.com/atom/ns#" term="PASS Summit" /><title>The 2013 PASS Summit in Charlotte – Good Call!</title><content type="html">&lt;p&gt;We woke up today to the great news that the Summit is &lt;a href="http://www.sqlpass.org/Community/PASSBlog/entryid/334/Announcing-PASS-Summit-2013-in-Charlotte.aspx" target="_blank"&gt;coming to Charlotte in 2013&lt;/a&gt;! This is something that we'd hoped would happen eventually, but with all of the back and forth on this topic over the past couple of years, we honestly weren't holding our collective breath. Although Charlotte appeared to be on pretty much everyone's Top 10 list of possible future Summit locations, for good reason, there just didn't seem to be any kind of critical mass. There is a huge group that would be happy if the Summit never left Seattle... and, like us, pretty much everyone else wants the Summit in their city. ;-)&lt;/p&gt;  &lt;p&gt;As a SQL Server ISV based in the Charlotte area, we've advocated bringing the Summit to Charlotte at times, whenever folks would listen... but we aren't the loudest bunch, and we're also not ones to get too wrapped up in the political side of things. We keep a fairly low profile, we'll state our case and leave it at that... we're just not going to try too hard to sway anyone in any particular direction, for better or worse.&lt;/p&gt;  &lt;p&gt;That said, our partner liaison, Peter Shire (&lt;a href="http://petershire.blogspot.com/" target="_blank"&gt;b&lt;/a&gt;|&lt;a href="http://twitter.com/#!/peter_shire" target="_blank"&gt;t&lt;/a&gt;), has worked tirelessly for several years on the &lt;a href="http://charlotte-sql.org/" target="_blank"&gt;Charlotte PASS Chapter&lt;/a&gt; to foster a vibrant SQL Server community here, with the help of our local Microsoft offices. (The #2 SQL Server support operation behind Dallas is located here in Charlotte.) In addition, last year volunteers from SQL Sentry and Microsoft helped to pull off a highly successful &lt;a href="http://sqlsaturday.com/33/eventhome.aspx" target="_blank"&gt;SQLSaturday&lt;/a&gt; event, which I'd like to think helped to put us on the map. It did appear to leave many with a positive impression of our city and its ability to support something like a Summit.&lt;/p&gt;  &lt;p&gt;Ultimately, the folks on the PASS Board performed the necessary diligence to find the best possible location, and looking at the &lt;a href="http://thomaslarock.com/2011/01/pass-summit-2013/" target="_blank"&gt;criteria board members like Tom LaRock used&lt;/a&gt;, they made the right call. Every city has its pros and cons, and although Charlotte may not be the strongest in all areas, overall it's just a tough city to beat – I'd call it &amp;quot;well-rounded.&amp;quot; I've lived here since the early '80s, and I've spent time in most major cities around the U.S. and Europe, and without a doubt, Charlotte holds its own against any of them.&lt;/p&gt;  &lt;p&gt;As many will find out, Charlotte is not only a great city, it's truly an optimal location to hold a PASS Summit. Will there be bumps in the road? Of course – it's not going to be perfect. There will be gripes about various things, there always are. But on balance I think it's the right move. Bring the Summit to a well-rounded East coast location with a strong Microsoft presence, and expose many database professionals that won't normally make it to Seattle to this great educational and community event.&lt;/p&gt;  &lt;p&gt;For me, 2013 can't come soon enough!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/ws_7LDpz5jI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/1444973464458219415/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2011/05/2013-pass-summit-in-charlotte-good-call.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/1444973464458219415?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/1444973464458219415?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/ws_7LDpz5jI/2013-pass-summit-in-charlotte-good-call.html" title="The 2013 PASS Summit in Charlotte – Good Call!" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2011/05/2013-pass-summit-in-charlotte-good-call.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4ASXk4cCp7ImA9WhZQGE4.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-3954307278634715815</id><published>2011-04-26T11:20:00.001-04:00</published><updated>2011-04-26T12:05:48.738-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-26T12:05:48.738-04:00</app:edited><title>Don't Fear the Trace</title><content type="html">&lt;p&gt;Not a week goes by that I don't run across either a comparison of server-side (file) and Profiler (rowset) trace performance, with rowset ending up with the short end of the stick; and/or someone who's afraid (or not allowed) to run traces against a production server because it will undoubtedly kill SQL Server performance. The amount of misinformation out there on this topic is mind-boggling – IMO it's one of the most misrepresented aspects of SQL Server. Unfortunately, it seems many have taken the misinformation at face value, and have perpetuated it without performing sufficient diligence.&lt;/p&gt;  &lt;p&gt;There are a some key points that always should be, but rarely seem to be, considered when discussing the performance impact of tracing:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Disk speed matters for server-side traces. &lt;/strong&gt;File traces are &amp;quot;lossless&amp;quot;, so can and will block SQL Server activity if the disk where the trace file is being written is not keeping up. A nice overview by Adam Machanic (&lt;a href="http://sqlblog.com/blogs/adam_machanic/" target="_blank"&gt;b&lt;/a&gt;|&lt;a href="http://twitter.com/#!/adammachanic" target="_blank"&gt;t&lt;/a&gt;) is here: &lt;a href="http://technet.microsoft.com/en-us/library/cc293610.aspx" target="_blank"&gt;http://technet.microsoft.com/en-us/library/cc293610.aspx&lt;/a&gt;. This means that if you are writing too many events to a busy or otherwise slow disk, it can bring SQL Server to a screeching halt. This is easy to repro – try writing a heavy file trace to a USB thumb drive. This may sound extreme, but it's probably not far off many SQL Server disk systems I see where busy data and log files are mixed on the same set of spindles, causing severe contention. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Rowset traces will drop events to avoid stopping SQL Server activity&lt;/strong&gt;. The longest a rowset trace will wait before dropping events is 20 seconds. This is less than the commonly used application query timeout of 30 seconds. This can be a bit harder to repro with Profiler, but we've done it in our lab by creating a .NET-based rowset trace consumer with artificial delays in code to slow trace event consumption. In this sense, rowset traces can be considered &amp;quot;safer&amp;quot; than file traces, since although they can slow SQL Server, they won't stop it completely. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Filters matter, for both trace types.&lt;/strong&gt; Although the above points are important to understand, they only come into play in extreme scenarios that most of us should never see. You should almost never need to run an unfiltered trace, or use &amp;quot;Starting&amp;quot; or other events that aren't filterable. For example, if you use only RPC:Completed and SQL:BatchCompleted events and restrict the rows returned using selective filter thresholds against integer-based columns like Duration, CPU, etc., and avoid text filters, especially with wildcards, you can minimize the impact to performance of either trace type. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Profiler &amp;lt;&amp;gt; Rowset&lt;/strong&gt;. Profiler uses a rowset trace, and so frequently when Profiler is knocked, rowset is condemned by extension. They are not one and the same. &lt;a href="http://www.sqlsentry.net/performance-advisor/sql-server-performance-overview.asp" target="_blank"&gt;SQL Sentry Performance Advisor&lt;/a&gt; (and some other tools) also use a rowset trace. We stream the trace binary data back and decode it, as described at the bottom of this page: &lt;a title="http://technet.microsoft.com/en-us/library/cc293613.aspx" href="http://technet.microsoft.com/en-us/library/cc293613.aspx" target="_blank"&gt;http://technet.microsoft.com/en-us/library/cc293613.aspx&lt;/a&gt;. While Profiler has a relatively heavy interface for working with trace data, our trace server, a Windows service, does not. It uses a highly optimized multi-threaded scheme for consuming trace rows as quickly as possible, and efficiently storing the trace data for later retrieval. So although the network overhead may be roughly equivalent for the same trace run by Profiler (remotely) or our trace server, that's where any similarity ends. If the trace uses smart filtering, the overhead should be a non-issue anyway – by default we use a conservative filter of Duration&amp;gt;=5000ms, with a floor of 100ms for safety if no other CPU or I/O filters have been applied. &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;A Simple Test&lt;/h4&gt;  &lt;p&gt;We recently conducted some cursory tests, primarily to confirm the blocking/non-blocking behavior described above. We simulated high activity via a lightweight T-SQL statement in a 1 million cycle loop, and used a trace with only &amp;quot;Completed&amp;quot; events and &lt;strong&gt;no filters&lt;/strong&gt;. The goal was to generate 1 million trace events as quickly as possible, and assess the impact consuming those events by each trace type had on the total load run time. I want to emphasize that this is an isolated test scenario, and &lt;strong&gt;the results should not be over-generalized&lt;/strong&gt;. We plan on conducting much more comprehensive testing in the near future. Nonetheless, the results are interesting:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Both server-side and rowset traces always caused the load to run slower than when there were no traces. &lt;/li&gt;    &lt;li&gt;A server-side trace writing to slow local disk caused the load to run much slower than a rowset trace consumed locally. &lt;/li&gt;    &lt;li&gt;A server-side trace writing to a fast local disk caused the load to run slightly faster than a rowset trace being consumed remotely over a 1000Mbps network. &lt;/li&gt;    &lt;li&gt;After factoring in the additional overhead required to copy the trace file over the network and load it into Profiler, the overall time for the server-side trace from the last test was greater. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It seems that with remote tracing, you can pay me now with rowset, or pay me later with server-side. Although the results were repeatable, I'm not publishing test details at this point because these tests were not strictly controlled. The point here is that &lt;strong&gt;trace impact on performance is always an &amp;quot;it depends&amp;quot; scenario&lt;/strong&gt;. Unfortunately it rarely seems to be presented as such – blanket statements such as &amp;quot;Profiler is dangerous&amp;quot; and &amp;quot;server-side traces are always faster&amp;quot; are commonplace. Sure, consumer type and location, network speed, etc., can certainly affect the performance impact of rowset traces, but so can writing a server-side trace file to the same spindles as a busy transaction log... and the impact can potentially be much more detrimental to your SQL Server.&lt;/p&gt;  &lt;h4&gt;The Source&lt;/h4&gt;  &lt;p&gt;Many thousands of SQL Servers are monitored 24/7 by our rowset-based trace server and we haven't had a single report where its impact on the target was even noticeable, so we're always puzzled by the anti-rowset sentiments. I've tried to assess how the confusion and fear started, and much of it seems to have a common source: &lt;strong&gt;the &amp;quot;Standard&amp;quot; Profiler trace:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/TbbivIJ0H-I/AAAAAAAAAZI/belGM5pEcco/s1600-h/std_trace_props%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="std_trace_props" border="0" alt="std_trace_props" src="http://lh5.ggpht.com/_0vL9rwa06l4/Tbbivs7IdlI/AAAAAAAAAZM/NR6hLaPohBs/std_trace_props_thumb%5B5%5D.png?imgmax=800" width="547" height="361" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It's been with us forever, and I'm not sure who created it as the default trace... but best case it is of little to no value, and worst case it is dangerous to your SQL Server. Presenting this trace as the default to a SQL Server newcomer is analogous to putting a loaded weapon in front of a toddler. There are no filters applied, and it includes Audit Login and SQL:BatchStarting events, neither of which are filterable by any performance metrics (Duration, CPU, Reads, Writes), meaning you will be capturing &lt;em&gt;all of them&lt;/em&gt;. It also includes Audit Logout, which is effectively not filterable by Reads or Writes when connection pooling is in use, since those metrics are cumulative. On a busy OLTP system this trace is bad, very bad!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TbbiwZGOT-I/AAAAAAAAAZQ/iNtUSVUFFL4/s1600-h/std_trace_filters%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="std_trace_filters" border="0" alt="std_trace_filters" src="http://lh4.ggpht.com/_0vL9rwa06l4/TbbiwiKvSxI/AAAAAAAAAZU/FlEn4tT18Fw/std_trace_filters_thumb%5B2%5D.png?imgmax=800" width="572" height="377" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So unless you've changed the default trace (easy to do via &lt;strong&gt;Edit Template&lt;/strong&gt;), every time you open Profiler you've got a very high overhead trace as the starting point. As a result, this trace is referenced in books, trace performance benchmarks have been conducted and published using it, and countless users have naively run it as-is against busy servers. I'm convinced that this is a big reason that Profiler is so frequently kicked around, and why so many are now afraid to use it at all.&lt;/p&gt;  &lt;p&gt;Bottom line: Don't use this trace! Certainly don't use it alone for benchmarking the relative performance impact of the two trace types.&lt;/p&gt;  &lt;p&gt;A true comparative test should consider:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Events and columns used &lt;/li&gt;    &lt;li&gt;Trace consumer location (local or remote) &lt;/li&gt;    &lt;li&gt;Disk location (local or remote) &lt;/li&gt;    &lt;li&gt;Disk speed and type (shared or dedicated) &lt;/li&gt;    &lt;li&gt;Network speed &lt;/li&gt;    &lt;li&gt;Load type (T-SQL text size, DML mix, etc.) &lt;/li&gt;    &lt;li&gt;Transactions/Batches per second on the target &lt;/li&gt;    &lt;li&gt;CPU and memory resources available &lt;/li&gt;    &lt;li&gt;Filter types &lt;/li&gt;    &lt;li&gt;Filter thresholds &lt;/li&gt;    &lt;li&gt;... &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As I mentioned, we have more comprehensive testing coming which covers these factors, and we'll publish all of the details, with hopes of clearing up a lot of confusion and fear around tracing once and for all.&lt;/p&gt;  &lt;p&gt;In the meantime, don't fear the trace. If you target the specific events and columns you need, and use conservative integer-based filters to restrict the rows returned, the benefits gained through intelligent analysis of the data should far outweigh any performance impact on your SQL Servers.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/1-UjdzApwnA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/3954307278634715815/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2011/04/don-fear-trace.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3954307278634715815?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3954307278634715815?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/1-UjdzApwnA/don-fear-trace.html" title="Don&amp;#39;t Fear the Trace" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_0vL9rwa06l4/Tbbivs7IdlI/AAAAAAAAAZM/NR6hLaPohBs/s72-c/std_trace_props_thumb%5B5%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2011/04/don-fear-trace.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcGSH8yeip7ImA9WhZRF00.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-3340064687760146113</id><published>2011-04-08T16:03:00.001-04:00</published><updated>2011-04-13T11:03:49.192-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-13T11:03:49.192-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event Manager" /><category scheme="http://www.blogger.com/atom/ns#" term="Fusion-io" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Sentry" /><category scheme="http://www.blogger.com/atom/ns#" term="Qure" /><category scheme="http://www.blogger.com/atom/ns#" term="Query Plan Analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="Plan Explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="Release Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><category scheme="http://www.blogger.com/atom/ns#" term="Execution Plans" /><title>SQL Sentry v6.1: Something Old, Several Things New</title><content type="html">&lt;p&gt;Since releasing v6 a couple of months ago, we've been hard at work on some cool new features for v6.1. Our x.1 releases are usually comprised mostly of fixes for bugs not caught during the major release (x.0) beta, and a few new features. This x.1 release is different in that contains many exciting and high impact new features, and a higher feature:fix ratio than normal. This is likely due to the lengthy v6 beta, as well as some new QA processes we've put in place. Change list is &lt;a href="https://www.sqlsentry.net/downloads/beta/SSChange_List.html" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;We've just published the v6.1 Release Candidate to the website (&lt;a href="http://sqlsentry.net/download-trial/trial.asp" target="_blank"&gt;new users&lt;/a&gt;|&lt;a href="https://www.sqlsentry.net/Login.aspx" target="_blank"&gt;current users&lt;/a&gt;), and our team is showing it off now at &lt;a href="http://sqlbits.com/" target="_blank"&gt;SQLBits 8&lt;/a&gt; in Brighton, UK. Read on for an overview...&lt;/p&gt;  &lt;h4&gt;SNMP Support&lt;/h4&gt;  &lt;p&gt;I'm covering this one first, as it's been on the feature list the longest. Believe it or not, we obtained our SNMP &amp;quot;enterprise number&amp;quot; and started on our MIBs in 2004, not long after the original release of Event Manager v1! Our enterprise number is 20707, and the latest enterprise number issued as of this post was... gulp... 37722. (I think I'll filter this feature from our &amp;quot;average turnaround time&amp;quot; calculation ;-) We didn't actually start coding SNMP support until recently though – for a few reasons it kept getting prioritized down: high complexity, relatively low demand, and the fact that users have been able to work around it and get alerts into other monitoring systems via our &amp;quot;execute&amp;quot; actions (Execute Process and Execute SQL). SNMP is not a feature that everyone uses, but those that do really depend on it.&lt;/p&gt;  &lt;p&gt;Fortunately, earlier this year, the most knowledgeable and capable SNMP developer on the planet, Eric Eicke (&lt;a href="http://www.ericeicke.com/" target="_blank"&gt;b&lt;/a&gt;|&lt;a href="http://twitter.com/#!/eeicke" target="_blank"&gt;t&lt;/a&gt;), joined our development team. Eric developed the first .NET-based SNMP component several years ago, and it's used by many large organizations, including Microsoft and HP. Eric was also the one that helped us get started on SNMP back in 2004. There was no fumbling around with RFC's, Eric knew exactly what needed to be done and did it, including v3 support, authentication, and encryption!&lt;/p&gt;  &lt;p&gt;MIBs are installed as part of the new setup. Once you've loaded them into your enterprise monitoring system, activating SNMP in SQL Sentry is straightforward from the new &lt;strong&gt;SNMP Config&lt;/strong&gt; tab:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TZ9qDN6yJAI/AAAAAAAAAXg/I4pQwBn-dbI/s1600-h/snmp_settings%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="snmp_settings" border="0" alt="snmp_settings" src="http://lh6.ggpht.com/_0vL9rwa06l4/TZ9qDUjVdmI/AAAAAAAAAXk/XwlXKfvrzPE/snmp_settings_thumb%5B2%5D.png?imgmax=800" width="545" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once configured, simply tick the &lt;strong&gt;Send SNMP Trap&lt;/strong&gt; action for any condition (along with a ruleset if desired):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/TZ9qDhaRsEI/AAAAAAAAAXo/Eum6JxN9zmY/s1600-h/snmp_action4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="snmp_action" border="0" alt="snmp_action" src="http://lh6.ggpht.com/_0vL9rwa06l4/TZ9qD-iD20I/AAAAAAAAAXs/Nll2PPYYBC4/snmp_action_thumb2.png?imgmax=800" width="330" height="381" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;Qure Integration&lt;/h4&gt;  &lt;p&gt;This next feature is not quite as old, but is equally as exciting ;-) &lt;a href="http://sqlsentry.net/performance-advisor/sql-server-performance-overview.asp" target="_blank"&gt;Performance Advisor&lt;/a&gt; has always had &amp;quot;Top SQL&amp;quot; collection and normalization/aggregation, and this year we became the first to introduce integrated query plan capture and analysis. So we automatically catch your heaviest queries, and give you best-in-class features for making manual query analysis as quick and easy as possible. If your server has 5 or 10 &amp;quot;problem&amp;quot; queries, and you've got some experience dealing with execution plans and indexes, no problem, you can use Performance Advisor to straighten everything out in an afternoon. But what if you're dealing with 20, 50, 100, or more problem queries? Or what if it's not the individual query that's the problem, but rather the cumulative impact?&lt;/p&gt;  &lt;p&gt;For many systems, automated workload-level analysis may make more sense. That's where &lt;a href="http://dbsophic.com/product/" target="_blank"&gt;Qure&lt;/a&gt; comes in. Developed by &lt;a href="http://dbsophic.com/" target="_blank"&gt;DBSophic&lt;/a&gt;, Qure is the brainchild of MVP Ami Levin, and is the leading software available for SQL Server workload analysis. It uses a copy of your production database and makes index, schema, and/or query changes, then tests those changes with real workloads to see which work best, &lt;em&gt;before&lt;/em&gt; making any recommendations. Of course, we all trust the query optimizer to behave predictably and make good decisions &amp;lt;ahem&amp;gt;, but there's just no substitute for good, old-fashioned brute force validation.&lt;/p&gt;  &lt;p&gt;SQL Sentry and Qure provide complementary functionality with very little overlap, so &lt;a href="http://sqlsentry.net/news/20110407-sql-sentry-partners-w-dbsophic.asp" target="_blank"&gt;bringing the two together&lt;/a&gt; made a lot of sense for both companies. As such, DBSophic has just released a new version of Qure which only works with trace data from the SQL Sentry repository database (v6 or above), &lt;strong&gt;Qure for SQL Sentry&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/TZ9qEcEqOiI/AAAAAAAAAXw/-A1FW_YTEnA/s1600-h/qure_se%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="qure_se" border="0" alt="qure_se" src="http://lh5.ggpht.com/_0vL9rwa06l4/TZ9qEn-fmqI/AAAAAAAAAX0/FZ29YmkJVYg/qure_se_thumb%5B2%5D.png?imgmax=800" width="472" height="263" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here are my top 3 reasons to try Qure for SQL Sentry:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Faster Analysis&lt;/strong&gt;. With the new special edition of Qure, you don't have to deal with manual workload traces. You simply point Qure to your existing SQL Sentry repository database, select the SQL Server and database to optimize, and hit &amp;quot;Go&amp;quot;. Qure automatically pulls in all Top SQL trace and QuickTrace events previously captured by SQL Sentry, and uses it for the analysis. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Easier Validation&lt;/strong&gt;. With the Performance Advisor dashboard's history mode, the&lt;strong&gt; Performance Counter Date Range Comparison&lt;/strong&gt; report, query runtime graphs, and query plan history, with SQL Sentry you can easily validate the results of a Qure optimization from several angles. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Cost-effective&lt;/strong&gt;. The new combined sku, &lt;strong&gt;&lt;a href="http://sqlsentry.net/Pricing.aspx" target="_blank"&gt;Power Suite + Qure Quick Start Pack&lt;/a&gt;&lt;/strong&gt;, gives you 5 perpetual Performance Advisor and Event Manager licenses plus 5 full Qure optimizations, all at a significant discount over purchasing the products separately. If you're already a SQL Sentry customer, you can purchase the new Qure edition separately as well. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can run an unlimited number of sample analyses with the Qure for SQL Sentry trial software, and it will give you some good, actionable recommendations for FREE.&lt;/p&gt;  &lt;h4&gt;&amp;quot;Too Much Data&amp;quot; Begone!&lt;/h4&gt;  &lt;p&gt;Longtime &lt;a href="http://sqlsentry.net/event-manager/sql-server-enterprise-overview.asp" target="_blank"&gt;Event Manager&lt;/a&gt; users will really appreciate this feature. Prior to this release, if you had too many event instances in a range to render them on the calendar in a meaningful fashion, we would show a block like this for the entire range:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TZ9qFNjaC8I/AAAAAAAAAX4/tZr5cfNvQKc/s1600-h/too_much_data5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="too_much_data" border="0" alt="too_much_data" src="http://lh3.ggpht.com/_0vL9rwa06l4/TZ9qFecyhrI/AAAAAAAAAX8/qnGo88pB1NU/too_much_data_thumb3.png?imgmax=800" width="477" height="179" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When we introduced Performance Advisor and began showing performance events on the calendar, Top SQL in particular, these blocks became much more prevalent, and could really hamper visibility as well as increase time spent on filters.&lt;/p&gt;  &lt;p&gt;Now, instead of a big &amp;quot;too much data&amp;quot; block, you'll see a small hatched rectangle on the far right of the range:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0vL9rwa06l4/TZ9qFj3PKuI/AAAAAAAAAYA/Bf4ahWuU0nE/s1600-h/too_much_data_new5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="too_much_data_new" border="0" alt="too_much_data_new" src="http://lh6.ggpht.com/_0vL9rwa06l4/TZ9qGOyq9KI/AAAAAAAAAYE/kiIM8200_h0/too_much_data_new_thumb3.png?imgmax=800" width="476" height="200" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you hover over it the entire range is highlighted, and a tooltip is displayed which shows how many other events exist in the range. The events actually displayed in the range have been prioritized by status and runtime – failures and longer running events are shown first, the rest are filtered from view. Just like before, you can double-click to zoom into a smaller range and see the other events.&lt;/p&gt;  &lt;h4&gt;Custom Calendar Highlighting&lt;/h4&gt;  &lt;p&gt;Previously, when you selected an event instance on the calendar, we would highlight other related instances using basic logic. For jobs and tasks we used the server and job name, and for Top SQL we used the &amp;quot;Text Data&amp;quot;. So other Top SQL instances would only highlight if the SQL matched exactly. Depending on the scenario, this could be very limiting.&lt;/p&gt;  &lt;p&gt;Now, you can pick and choose exactly which attribute or combination of attributes to use for highlighting related instances. Here are some examples:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You want to see all SQL, blocks and deadlocks for a particular Application &lt;/li&gt;    &lt;li&gt;You want to see all SQL, blocks and deadlocks associated with a SQLAgent job &lt;/li&gt;    &lt;li&gt;You want to see all SQLAgent jobs that are part of the same chain &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;All of these scenarios and more are possible. You simply right-click a calendar event and select the common attribute(s) using the new &lt;strong&gt;Highlight&lt;/strong&gt; context menus:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TZ9qGED-ScI/AAAAAAAAAYI/3iBSoIGAkdY/s1600-h/calendar_highlighting9.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="calendar_highlighting" border="0" alt="calendar_highlighting" src="http://lh4.ggpht.com/_0vL9rwa06l4/TZ9qGpa2nMI/AAAAAAAAAYM/w2U2E0enmgg/calendar_highlighting_thumb5.png?imgmax=800" width="545" height="302" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;Tab Undocking / Multi-monitor Support&lt;/h4&gt;  &lt;p&gt;You now have the ability to drag any SQL Sentry main level tab outside of the Console. This is especially nice for multiple monitor setups. This shot shows a main tab being undocked:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/TZ9-KX8K5sI/AAAAAAAAAYw/OzqD3YbbXOc/s1600-h/tab_undocking%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="tab_undocking" border="0" alt="tab_undocking" src="http://lh4.ggpht.com/_0vL9rwa06l4/TZ9-LPT4taI/AAAAAAAAAY0/YbUKdt808S8/tab_undocking_thumb%5B1%5D.png?imgmax=800" width="469" height="298" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;Fusion-io Drive Support&lt;/h4&gt;  &lt;p&gt;SSDs are definitely on the upswing in the SQL Server world. Over the past couple of years we've seen much greater acceptance and adoption in mission critical SQL Server environments, and the company that's making the most waves here is &lt;a href="http://www.fusionio.com/" target="_blank"&gt;Fusion-io&lt;/a&gt;. Previously, none of their drives would show up in our Disk Activity view, however, due to their PCI-based architecture and the fact that they're represented differently in the Windows subsystems we use to gather drive data.&lt;/p&gt;  &lt;p&gt;We've addressed this in v6.1, so if you have any Fusion-io drives, single or duo, they'll be rendered on Disk Activity just like all other drive types. This gives you a great way to validate their performance – latency on these drives should be low enough that the flow lines are always green. If they are not, there is a problem.&lt;/p&gt;  &lt;p&gt;Here's a shot of a high volume OLTP system in the U.K. with lots of database files, running on a Fusion-io ioDrive and ioDrive Duo card with Windows RAID-0, courtesy of Christian Bolton (&lt;a href="http://sqlblogcasts.com/blogs/christian/" target="_blank"&gt;b&lt;/a&gt;|&lt;a href="http://twitter.com/#!/christianbolton" target="_blank"&gt;t&lt;/a&gt;) of &lt;a href="http://coeo.com/" target="_blank"&gt;Coeo&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TZ9qHbMBbMI/AAAAAAAAAYQ/I0So4mYTU-0/s1600-h/Fusion-DiskActivity%5B1%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Fusion-DiskActivity" border="0" alt="Fusion-DiskActivity" src="http://lh3.ggpht.com/_0vL9rwa06l4/TZ9qHw4Uv0I/AAAAAAAAAYU/Fn4kpIy5T_8/Fusion-DiskActivity_thumb.png?imgmax=800" width="566" height="310" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h4 id="planexplorer"&gt;New Plan Explorer Features&lt;/h4&gt;  &lt;p&gt;&lt;font style="font-weight: normal"&gt;The new version of &lt;a href="http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp" target="_blank"&gt;Plan Explorer&lt;/a&gt; is 1.2, and the features I'll cover below apply to &lt;font style="font-weight: bold"&gt;both the full SQL Sentry v6.1 and Plan Explorer v1.2&lt;/font&gt;. The codebase is the same between them, but there are additional capabilities that open up when you use the full software, as covered in my post on &lt;a href="http://greg.blogs.sqlsentry.net/2011/02/sql-sentry-v6-plan-analysis-features.html" target="_blank"&gt;SQL Sentry v6 Plan Analysis Features&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;  &lt;h5&gt;Actual Plan Retrieval&lt;/h5&gt;  &lt;p&gt;Previously you could retrieve the estimated plan from a server, but to view an actual plan you had to run the query in SSMS and copy the plan into Plan Explorer. Now you'll see an &lt;strong&gt;Actual Plan&lt;/strong&gt; toolbar button that allows you to retrieve the actual plan for any query:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TaRrpQNyYKI/AAAAAAAAAZA/_COJmjzgL64/s1600-h/actual_plan%5B8%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="actual_plan" border="0" alt="actual_plan" src="http://lh3.ggpht.com/_0vL9rwa06l4/TaRrpplgAbI/AAAAAAAAAZE/EtMrY91FC7k/actual_plan_thumb%5B4%5D.png?imgmax=800" width="413" height="164" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Just like SSMS, the query &lt;strong&gt;must be executed against the target&lt;/strong&gt; in order to get the actual plan. You will see a progress bar while the query is running, but you won't see any query results when it completes, only the actual plan info along with actual CPU and read IO metrics.&lt;/p&gt;  &lt;p&gt;Note the new &lt;strong&gt;Command Text&lt;/strong&gt; tab above. This is an editable view of the query text, and this is what gets executed. The &lt;strong&gt;Text Data&lt;/strong&gt; tab is no longer editable – that SQL comes directly from the plan, and there were several problems with making it executable that are beyond the scope of this post (and now water under the bridge ;-) I think you'll find the new design much simpler, and more robust.&lt;/p&gt;  &lt;p&gt;We've had some lively discussion on whether or not to go down the path of showing results, but where we ended up is that Plan Explorer is a plan analysis tool, not a query tool. More often than not, viewing results isn't required to make good plan optimization decisions. We of course already show the number of estimated and actual rows, and in most cases this is sufficient.&lt;/p&gt;  &lt;p&gt;One big advantage of not returning results is that you'll often get the actual plan back much faster than you would otherwise. For example, a query that returns 200,000 wide rows and takes 30 seconds to load in SSMS may take only 2-3 seconds in Plan Explorer.&lt;/p&gt;  &lt;h5&gt;Expressions Tab&lt;/h5&gt;  &lt;p&gt;Prior to this release, we've shown expressions only in operator tooltips. The higher you go up the plan tree, the more levels of nesting you can have, and tracing an expression all the way back to its source using tooltips could be daunting.&lt;/p&gt;  &lt;p&gt;This is why we've added a new dedicated tab for expressions. The tab only appears if expressions exist in the plan, and it shows standard and expanded views of all expressions, along with the entire references tree for each:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/TZ9qIgCFRfI/AAAAAAAAAYg/sDxb-M9t574/s1600-h/pe_expressions_tab%5B5%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="pe_expressions_tab" border="0" alt="pe_expressions_tab" src="http://lh4.ggpht.com/_0vL9rwa06l4/TZ9qI9nROLI/AAAAAAAAAYk/FXC5kNbLyDc/pe_expressions_tab_thumb%5B3%5D.png?imgmax=800" width="616" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I should warn you, there is a lot going on behind the scenes with expressions... the optimizer generates many expressions that you'd never normally see, and it can cause overload at first. More on this in a future post.&lt;/p&gt;  &lt;h5&gt;Join Diagram Tab&lt;/h5&gt;  &lt;p&gt;This tab only appears if the query has joins. It presents a view similar to the Query Designer diagram in SSMS, although only joined columns are shown for each table. Join information exists on the &lt;strong&gt;Plan Diagram&lt;/strong&gt; and &lt;strong&gt;Query Columns&lt;/strong&gt; tabs, but this is a different look at it which can be especially valuable if your query has views or nested views. The query optimizer flattens all views down to their base tables as part of the plan generation process, but in SSMS you see joins for the views, not the base tables. This can make it difficult to decipher which tables and columns are actually involved in a join. Fortunately, the plan contains this data, so we're able to reconstruct and show the base table joins from the plan XML. This can be very helpful for making good indexing decisions to support those joins.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TZ-PxIJ0UdI/AAAAAAAAAY4/xLAqUnkR2y4/s1600-h/pe_joins_tab%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="pe_joins_tab" border="0" alt="pe_joins_tab" src="http://lh6.ggpht.com/_0vL9rwa06l4/TZ-PxfRN_0I/AAAAAAAAAY8/wQ4GYxu6Mw4/pe_joins_tab_thumb%5B5%5D.png?imgmax=800" width="505" height="257" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is our first cut at joins, and getting it to this point has not been trivial. What looks like a simple join on the plan diagram can be oh so much more behind the scenes. We're still finding scenarios that we haven't seen before, but we think it's far enough along that it can provide value. If you run into anything weird, please do let us know about it – email the plan to support at sqlsentry.net.&lt;/p&gt;  &lt;p&gt;It's your feedback that enables us to continue to improve and evolve the software, so please keep it coming!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/mMZMw4cDd7I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/3340064687760146113/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2011/04/sql-sentry-v61-something-old-several.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3340064687760146113?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3340064687760146113?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/mMZMw4cDd7I/sql-sentry-v61-something-old-several.html" title="SQL Sentry v6.1: Something Old, Several Things New" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_0vL9rwa06l4/TZ9qDUjVdmI/AAAAAAAAAXk/XwlXKfvrzPE/s72-c/snmp_settings_thumb%5B2%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2011/04/sql-sentry-v61-something-old-several.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8CSXo_eyp7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-1174992473009790338</id><published>2011-03-04T17:51:00.001-05:00</published><updated>2011-03-28T11:07:48.443-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:07:48.443-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Plan Explorer" /><title>Reducing Plan Explorer Startup Time with NGen</title><content type="html">&lt;p&gt;Recently on Twitter I ran across a comment by Oscar Zamora (&lt;a href="http://ozamora.com/" target="_blank"&gt;b&lt;/a&gt;|&lt;a href="http://twitter.com/#!/ZamoraO" target="_blank"&gt;t&lt;/a&gt;) about some &amp;quot;slowness&amp;quot; with &lt;a href="http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp" target="_blank"&gt;Plan Explorer&lt;/a&gt;. We've gone to great lengths to ensure Plan Explorer is snappy and responsive, even when working with giant plans, so needless to say I was surprised to hear this (and perhaps a tiny bit incredulous ;) I contacted Oscar for more specifics about where exactly he was seeing the lag, and he was happy to help. As it turns out, it wasn't UI responsiveness he was referring to, it was the application startup time. Here are the startup times he was seeing on two different machines:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Desktop&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;First start: 22 seconds&lt;/li&gt;      &lt;li&gt;Warm start: 5 seconds&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Laptop&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;First start: 40 seconds&lt;/li&gt;      &lt;li&gt;Warm start: 10 seconds&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;Yikes! After a quick version check, we determined he was still on beta version .96. After upgrading to v1.1, his load times dropped a bit:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Desktop&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;First start: 16 seconds&lt;/li&gt;      &lt;li&gt;Warm start: 5 seconds&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Laptop&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;First start: 25 seconds&lt;/li&gt;      &lt;li&gt;Warm start: 9 seconds&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;Things were looking better, but still not ideal, especially on his laptop. On my desktop and laptop, both the initial and subsequent loads always run around 5 seconds. Next I took at look at his &lt;a href="http://twitpic.com/45fsv8" target="_blank"&gt;laptop specs&lt;/a&gt; and &lt;a href="http://twitpic.com/45fzpq" target="_blank"&gt;Windows Experience Index details&lt;/a&gt;. His graphics and disk performance were about 1 point lower than my laptop, but processor and RAM were about 2 points lower. This seemed to point directly to it being a jitting performance issue. JIT (&lt;a href="http://en.wikipedia.org/wiki/Just-in-time_compilation" target="_blank"&gt;just-in-time compilation&lt;/a&gt;) is standard behavior for .NET apps, so a startup delay is not unusual. Exactly how much of a delay depends on several factors, including timing of method calls, the amount of code being jitted, as well as CPU, memory, and, to some extent, disk speed.&lt;/p&gt;  &lt;p&gt;It's a safe bet that the slower CPU and memory on Oscar's laptop are causing jitting to take longer than normal, but what can we do about it? Since the Plan Explorer code itself is already well-optimized, there really was only one other option: using the &lt;a href="http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=VS.100).aspx" target="_blank"&gt;Native Image Generator&lt;/a&gt;, or NGen.&lt;/p&gt;  &lt;p&gt;NGen is a tool that effectively pre-compiles an entire .NET app before runtime, and caches an image of it on disk. We've known about NGen since its first release, but since prior versions suffered from various shortcomings, we had elected not to use it. However, in .NET 3.5 SP1 and &lt;a href="http://blogs.msdn.com/b/clrcodegeneration/archive/2009/05/03/improvements-to-ngen-in-.net-framework-4.aspx" target="_blank"&gt;in .NET 4.0 many improvements were made&lt;/a&gt;, and since we now require .NET 4.0 for both Plan Explorer and &lt;a href="http://www.sqlsentry.net/performance-advisor/sql-server-performance-overview.asp" target="_blank"&gt;SQL Sentry v6&lt;/a&gt;, it was time for another look.&lt;/p&gt;  &lt;p&gt;Using NGen is straightforward. You can easily create a pre-compiled image of Plan Explorer via these steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open a command prompt as an Administrator&lt;/li&gt;    &lt;li&gt;Change to the .NET 4.0 directory:     &lt;br /&gt;x86 systems:&amp;#160; &lt;font face="Courier New"&gt;cd %windir%\Microsoft.NET\Framework\v4.0.30319\       &lt;br /&gt;&lt;/font&gt;x64 systems:&amp;#160; &lt;font face="Courier New"&gt;cd %windir%\Microsoft.NET\Framework64\v4.0.30319\&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;Run the following command (assuming you've used the default install path – if not, change it accordingly):     &lt;br /&gt;&lt;font face="Courier New"&gt;ngen install &amp;quot;C:\Program Files\SQL Sentry\SQL Sentry Plan Explorer\SQL Sentry Plan Explorer.exe&amp;quot;&lt;/font&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;You should see a bunch of compilation-related messages fly by. If you don't, then something isn't right, perhaps an invalid path. When the messages complete, go ahead and open Plan Explorer.&lt;/p&gt;  &lt;p&gt;Or, if you'd prefer to forego the manual process above, you can download the &lt;a href="http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp" target="_blank"&gt;new Plan Explorer release with NGen compilation built-in&lt;/a&gt;. The compilation is deferred; it doesn't actually happen during setup. Rather, the NGen service performs the compilation behind the scenes after installation, the next time your computer is &amp;quot;idle&amp;quot;. For this reason, bear in mind it may not complete before you launch Plan Explorer for the first time. You can tell when it's done by looking at the &amp;quot;Microsoft .NET Framework NGEN v4.0.30319_x64&amp;quot; service status. It only starts when there are items queued for compilation, so if it's stopped that means it has finished its work.&lt;/p&gt;  &lt;p&gt;Either way you go, you should be pleased with the new load time. On every machine we've tested, startup is almost instant. If you're opening Plan Explorer regularly, this time savings can add up, leaving you more time for plan-hacking!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/sv_RycPgPpk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/1174992473009790338/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2011/03/reducing-plan-explorer-startup-time.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/1174992473009790338?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/1174992473009790338?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/sv_RycPgPpk/reducing-plan-explorer-startup-time.html" title="Reducing Plan Explorer Startup Time with NGen" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2011/03/reducing-plan-explorer-startup-time.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIFSHs9fCp7ImA9WhJaGUo.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-3577715989692207899</id><published>2011-02-16T16:01:00.001-05:00</published><updated>2012-10-11T12:55:19.564-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-11T12:55:19.564-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Sentry" /><category scheme="http://www.blogger.com/atom/ns#" term="Query Plan Analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="Plan Explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="Release Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><category scheme="http://www.blogger.com/atom/ns#" term="Execution Plans" /><title>SQL Sentry v6 Plan Analysis Features</title><content type="html">&lt;p&gt;Almost a year ago, we embarked on the journey to SQL Sentry v6. This was not long after we had decided that our release cycles were too long, and I had just boldly proclaimed that there would be no more year-long cycles – we were shifting to smaller, incremental releases! They're easier to test, they get new features in the hands of our users faster, they keep up momentum, morale, etc.&lt;/p&gt;  &lt;p&gt;All of this is true, but looking back it probably wasn't the right release to make that decision. ;-) At the time, our vision of plan analysis was hooking into SSMS – like we do in other parts of the app – in order to render the graphical plan diagram for statements captured via our &amp;quot;Top SQL&amp;quot; subsystem (a lightweight trace that runs continuously and catches &amp;quot;big hitter&amp;quot; queries). I'm not sure of the exact point at which we ditched that idea in favor of rolling our own plan analysis capability, but I remember it happened very quickly. It was probably right after our lead developer Brooke Philpott (&lt;a href="http://brooke.blogs.sqlsentry.net/" target="_blank"&gt;blog&lt;/a&gt;|&lt;a href="http://twitter.com/#!/macromullet" target="_blank"&gt;twitter&lt;/a&gt;), never one to shy away from a development challenge, threw together a quick prototype showing that we could indeed parse the plan XML and render a graphical tree, among other things. Next thing you know, what would have taken a few weeks took over 10 months!&lt;/p&gt;  &lt;p&gt;That said, I'm glad we made the decision to build our own plan analysis system, and would do it again. We've received tremendous feedback since releasing the &lt;a href="http://www.sqlsentry.net/plan-explorer/sql-server-query-view.asp" target="_blank"&gt;free Plan Explorer&lt;/a&gt;, and we're thrilled that it's making a real difference for SQL Server users.&lt;/p&gt;  &lt;h4&gt;FREE Plan Explorer vs. &lt;a href="http://www.sqlsentry.net/performance-advisor/sql-server-performance-features.asp" target="_blank"&gt;Performance Advisor v6&lt;/a&gt;&lt;/h4&gt;  &lt;p&gt;This is something we've been asked about a lot lately. Notice I didn't say &amp;quot;... vs. &lt;em&gt;FULL Plan Explorer&lt;/em&gt;&amp;quot;. That's because there is no &amp;quot;full&amp;quot; version of Plan Explorer per se; it's all the same code. Rather there is an &amp;quot;integrated&amp;quot; version that resides within the SQL Sentry Console, and it has additional capabilities that open up when you have a SQL Sentry Server service and database installed. There are also other plan analysis features included in v6 that exist completely outside of Plan Explorer.&lt;/p&gt;  &lt;p&gt;You may have noticed that there are some grayed out columns in the free Plan Explorer statements tree, and when you hover over them you get this message:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0vL9rwa06l4/TVw68I9AGUI/AAAAAAAAAWE/_DVQuS7-cRw/s1600-h/full_version_tooltip%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="full_version_tooltip" border="0" alt="full_version_tooltip" src="http://lh6.ggpht.com/_0vL9rwa06l4/TVw69CpNjzI/AAAAAAAAAWI/wc0PUdL20Is/full_version_tooltip_thumb%5B1%5D.png?imgmax=800" width="568" height="114" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;No, this isn't some cheap attempt by marketing to lure you in and then force you to buy the full software. Rather, this is the development team telling you that what you are trying to do isn't technically possible... unless you have a SQL Sentry service and database. Which, if you did, would mean that Plan Explorer was no longer a tiny download with simple installation and minimal footprint. Sure, we want you to see what you're missing in the full software, but it was easier and less invasive to just gray columns and/or throw up a message box than add new code paths to selectively show/hide features.&lt;/p&gt;  &lt;p&gt;When we unbolted Plan Explorer from the full software, anywhere there was something we just couldn't do, we added this note. Another place you'll see this is if you try to create or edit an index, since that would require SSMS integration, as well as the ability to determine the location of the server and database in question (since they aren't stored in a plan), and then authenticate. This would mean additional development and testing, new external dependencies, and opportunities for something to break.&lt;/p&gt;  &lt;p&gt;As an example of what we deal with when integrating with SSMS, in SQL Server 2008 R2 some of our code – which worked perfectly in 2008 – suddenly ceased to function, but only if the SSMS Object Explorer was unpinned!? It took us a while to figure that one out. So index management is something technically we &lt;em&gt;could&lt;/em&gt; pull off, and we may add to the free Plan Explorer at some point, but it's honestly not at the top of the list.&lt;/p&gt;  &lt;h4&gt;Active Plan Capture&lt;/h4&gt;  &lt;p&gt;When you install SQL Sentry v6, you gain what we call &lt;strong&gt;active plan capture&lt;/strong&gt;, and all of the new plan analysis features depend on this. The Server service continuously monitors running queries and completed trace events and, when appropriate, queries the plan cache for plan XML and/or other plan details, and automatically assembling all of the pieces together. This enables us to do several things that aren't possible with the free Plan Explorer, or any other available software for that matter:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Capture a query's plan at the time of query execution and associate it with the query. &lt;/li&gt;    &lt;li&gt;Assemble the entire call stack for a query, including any nested stored procedure and/or nested dynamic SQL calls.&lt;!--EndFragment--&gt; &lt;/li&gt;    &lt;li&gt;Show statement level metrics from the execution plan side-by-side with trace and DMV metrics. &lt;/li&gt;    &lt;li&gt;Keep a history of all plan versions used by a query over time, so you can see where plan changes impact performance. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I'll go into each of these in more detail below. &lt;strong&gt;If you want to know more about the graphical plan diagram and other shared Plan Explorer features first&lt;/strong&gt;, check out &lt;a href="http://greg.blogs.sqlsentry.net/2010/10/sql-sentry-plan-explorer-beta.html" target="_blank"&gt;this post&lt;/a&gt; or Aaron Bertrand's (&lt;a href="http://sqlblog.com/blogs/aaron_bertrand/" target="_blank"&gt;blog&lt;/a&gt;|&lt;a href="http://twitter.com/#!/AaronBertrand" target="_blank"&gt;twitter&lt;/a&gt;) &lt;a href="http://sqlblog.com/blogs/aaron_bertrand/archive/tags/Plan+Explorer/default.aspx" target="_blank"&gt;Plan Explorer posts&lt;/a&gt;.&lt;/p&gt;  &lt;h5&gt;The Query Plan at Query Execution&lt;/h5&gt;  &lt;p&gt;With the free Plan Explorer version, it's up to the user to identify problem queries, somehow capture the estimated or actual plans, and then manually load them in Plan Explorer. &lt;strong&gt;The full version of Performance Advisor does all of this for you.&lt;/strong&gt; Heavy queries (batches or RPCs) are continuously picked up by the Top SQL trace as normal, based upon the filter settings you provide (&amp;quot;Duration &amp;gt; 5 seconds&amp;quot; by default), and plan information is immediately captured and associated with the queries. The only thing you need to access the plan is click the &lt;strong&gt;View&lt;/strong&gt; button in the new &lt;strong&gt;Plan&lt;/strong&gt; column:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TVw69hE5yKI/AAAAAAAAAWM/wRLhoSAekU4/s1600-h/topsql_view_plan%5B5%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="topsql_view_plan" border="0" alt="topsql_view_plan" src="http://lh6.ggpht.com/_0vL9rwa06l4/TVw6-ePIDPI/AAAAAAAAAWQ/acZCC01FKZo/topsql_view_plan_thumb%5B3%5D.png?imgmax=800" width="596" height="303" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As you can see, this column exists for both completed and running queries... so yes, &lt;strong&gt;you can view the plan while a query is running! &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It's important to note that this is the &lt;em&gt;estimated plan at time of query execution&lt;/em&gt;, not the &lt;em&gt;actual plan&lt;/em&gt; including actual rows, executions and data for each plan operation. It is not currently possible to capture the &lt;em&gt;actual&lt;/em&gt; plan continuously in a low overhead fashion. (No, not even with Extended Events ;-) We pretty much knew this going in, but we spent a fair amount of time trying some different approaches to pull it off anyway, to no avail. There is some hope that this will be possible in a future version of SQL Server, however. That said, the estimated plan at query execution is certainly the next best thing, and even has some advantages which I'll delve into in a future post.&lt;/p&gt;  &lt;p&gt;I've manually added a couple of columns to the &lt;strong&gt;Completed Queries&lt;/strong&gt; grid above: &lt;strong&gt;Has Plan&lt;/strong&gt; and &lt;strong&gt;Has Statements&lt;/strong&gt;. These are hidden by default, but are handy for quickly identifying batches and RPCs for which we were able to capture a plan and/or statements, which will impact what you see when you click &amp;quot;View.&amp;quot; Depending on the type of query, timing, and other issues, it's not always possible to capture the plan. It's also possible to capture a batch or RPC with no statements, if none exceeded the trace filter thresholds (this has always been the case).&lt;/p&gt;  &lt;h5&gt;A Quick Aside: Other Top SQL Enhancements&lt;/h5&gt;  &lt;p&gt;Long-time Performance Advisor users will probably notice some other differences in the&lt;strong&gt; &lt;/strong&gt;above Top SQL shot, so I'll touch on them briefly:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The &lt;strong&gt;Running Queries&lt;/strong&gt; pane – we now show you heavy queries (again based upon your filter settings) while they are running, not just after they complete. &lt;/li&gt;    &lt;li&gt;The &lt;strong&gt;Filter&lt;/strong&gt; pane is hidden by default. &lt;/li&gt;    &lt;li&gt;Statement events (SQL:StmtCompleted or SP:StmtCompleted events) are no longer shown here, only SQL:BatchCompleted and RPC:Completed events. This is because they are now integrated into the Plan Explorer view. More on this later. &lt;/li&gt;    &lt;li&gt;Text Data (TSQL, MDX and XMLA) is now colorized. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Some additional changes to Top SQL that aren't apparent above:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Auto-growth&lt;/strong&gt; and &lt;strong&gt;Auto-shrink&lt;/strong&gt; events are now captured. Both can be a hidden performance killer and can bring activity to a screeching halt while file space is adjusted. &lt;/li&gt;    &lt;li&gt;New columns have been added:      &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;Error&lt;/strong&gt; - shows the general reason a query terminated prematurely. Rows with errors are also highlighted with a light red background. &lt;/li&gt;        &lt;li&gt;&lt;strong&gt;Information&lt;/strong&gt; - shows either &amp;quot;rows affected&amp;quot; or &amp;quot;auto-growth size&amp;quot; depending on the event. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Blocked spids are shown with a light orange background in the Running Queries pane. &lt;/li&gt; &lt;/ul&gt;  &lt;h5 id="callstack"&gt;The Query Call Stack&lt;/h5&gt;  &lt;p&gt;A Profiler trace presents a stream of trace events, and there is little to no sense of how the events are related to one another. Throw in nested procedure calls and dynamic SQL, and all bets are off.&lt;/p&gt;  &lt;p&gt;This is why one of the most significant features gained with the full software is the query call stack assembled in real time. This lets you see exactly how captured statements are related and where they fit into the query plan. Most importantly, it shows you which statements did the bulk of the work, and which are candidates for optimization.&lt;/p&gt;  &lt;p&gt;Below is the &lt;strong&gt;Statements Tree&lt;/strong&gt; pane for a stored procedure that calls some dynamic SQL via sp_executesql, which calls another stored procedure, which proceeds to call more dynamic SQL:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TVw6_HTDrtI/AAAAAAAAAWU/w4VQDxLLoNc/s1600-h/call_stack%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="call_stack" border="0" alt="call_stack" src="http://lh3.ggpht.com/_0vL9rwa06l4/TVw6_5zzuKI/AAAAAAAAAWY/j2H6RLCW_Sw/call_stack_thumb%5B1%5D.png?imgmax=800" width="618" height="252" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;&lt;font size="1"&gt;Plan Explorer Statements Tree – Fully Assembled Stack (Performance Advisor v6)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I've highlighted the dynamic SQL calls in yellow, the nested procedure calls in light blue, and the final dynamic SQL generated in pink. Note that the parent procedure itself in this case is effectively glue; it's the dynamic SQL that is doing the bulk of the work. If you were to look at the estimated plan in Plan Explorer, you'd see this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TVw7AtIr4rI/AAAAAAAAAWc/dutnRkiI0IA/s1600-h/call_stack_est%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="call_stack_est" border="0" alt="call_stack_est" src="http://lh4.ggpht.com/_0vL9rwa06l4/TVw7B_roYwI/AAAAAAAAAWg/TalN8Tx5IJc/call_stack_est_thumb%5B1%5D.png?imgmax=800" width="307" height="363" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;&lt;font size="1"&gt;Plan Explorer Statements Tree - Estimated Plan (free version)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you click to enlarge you'll see the initial dynamic SQL call in yellow at the very bottom. That's the same line that makes the three initial dynamic SQL calls in the full stack shot above! Problem is, the compiled estimated plan has no visibility into what that dynamic SQL will actually look like, let alone how it will perform.&lt;/p&gt;  &lt;p&gt;A big difference between the two views above is that the call stack shot is in &lt;strong&gt;Show Captured Statements Only&lt;/strong&gt; mode, which is the default whenever we have at least one statement for a batch or RPC. In this mode you see only statements that exceeded the trace filters along with any relevant control structures, in this case an IF block and a WHILE loop. This mode can be toggled off via context menu item, but for complex procedures like this one it's really invaluable, since it filters the &amp;quot;noise&amp;quot; and directs your attention to the heaviest parts of the query.&lt;/p&gt;  &lt;h5&gt;Correlated Metrics&lt;/h5&gt;  &lt;p&gt;You probably noticed another difference between the two views – one has Duration and CPU data and the other has those annoying gray columns. Here's another view of a full stack with many captured statements:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0vL9rwa06l4/TVw7CmiCzJI/AAAAAAAAAWk/cwj72m_I9CY/s1600-h/combined_metrics%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="combined_metrics" border="0" alt="combined_metrics" src="http://lh4.ggpht.com/_0vL9rwa06l4/TVw7DfG6CoI/AAAAAAAAAWo/2WUz4EXIMgU/combined_metrics_thumb%5B2%5D.png?imgmax=800" width="663" height="206" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When we have the actuals we're able to fill in those other columns, as well as compare the estimated and actual rows affected by each statement. When there's a significant discrepancy the cells are highlighted in orange, and if you hover over them you'll see a tooltip with more details.&lt;/p&gt;  &lt;h5&gt;Execution Plan History&lt;/h5&gt;  &lt;p&gt;On the new &lt;strong&gt;Query Plans&lt;/strong&gt; tab you'll see all plans captured during the specified date range: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0vL9rwa06l4/TVw7Dxy91yI/AAAAAAAAAXE/wigy7QCf9h8/s1600-h/queryplans-objectview%5B12%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="queryplans-objectview" border="0" alt="queryplans-objectview" src="http://lh6.ggpht.com/_0vL9rwa06l4/TVw7E3Sqr7I/AAAAAAAAAXI/d3DFsy6fvu4/queryplans-objectview_thumb%5B8%5D.png?imgmax=800" width="592" height="383" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There are two modes, toggled using the &amp;quot;Show Totals&amp;quot; (sigma) toolbar button. One shows plans grouped by stored procedure (remember, starting in SQL Server 2005, with statement-level compilation there can be multiple plans per procedure), the other is a flat list of all statement plans. Both show average metrics and operation counts. For example, if you want to see the plan with the most &amp;quot;scan&amp;quot; operations over the last 2 days, simply set your range, sort by one of the &amp;quot;Index Scan&amp;quot; columns, then click the &amp;quot;View&amp;quot; button to open the plan:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TVw7Fb1uuHI/AAAAAAAAAW0/vRrcmVgQNuM/s1600-h/queryplans-sort%5B8%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="queryplans-sort" border="0" alt="queryplans-sort" src="http://lh3.ggpht.com/_0vL9rwa06l4/TVw7GB66drI/AAAAAAAAAW4/Ax56FZZOxkg/queryplans-sort_thumb%5B4%5D.png?imgmax=800" width="593" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The rows highlighted in red represent recompiles that occurred within the current date range. The other plans may have been used during the current range, but they must have been compiled earlier.&lt;/p&gt;  &lt;p&gt;Here's another really cool use case: Using the new &amp;quot;Jump To-&amp;gt;Query Plans&amp;quot; context menu item from the dashboard to find problematic plans. For example, if you see a spike in &amp;quot;Bookmark lookups&amp;quot;, you can select it then jump to the plans tab to see only plans used during that range, then sort by &amp;quot;Lookup Operations&amp;quot; to find the plan(s) that may be responsible:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TVw7GRcCheI/AAAAAAAAAW8/c6hKGk1N1yQ/s1600-h/queryplans-jumpto%5B11%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="queryplans-jumpto" border="0" alt="queryplans-jumpto" src="http://lh5.ggpht.com/_0vL9rwa06l4/TVw7G7RlBhI/AAAAAAAAAXA/xnjOurxsOMQ/queryplans-jumpto_thumb%5B5%5D.png?imgmax=800" width="449" height="226" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I should mention that &amp;quot;Bookmark lookups&amp;quot;, &amp;quot;Forwarded records&amp;quot;, and &amp;quot;Backup/Restore Throughput&amp;quot; are new to the dashboard in v6.&lt;/p&gt;  &lt;h4&gt;Performance Hit?&lt;/h4&gt;  &lt;p&gt;All of this looks great, but does the additional load on your servers and network outweigh the benefits of collecting and processing this information? Certainly not. As always, we've gone to extreme lengths to ensure that any hit caused by the new plan analysis features is minimal. Intelligent data collection, compression, and other techniques are in play to ensure the hit will be barely noticeable... not nearly enough to outweigh the performance gains you'll reap from using the new features.&lt;/p&gt;  &lt;h4&gt;In Closing...&lt;/h4&gt;  &lt;p&gt;Going in, our goal with v6 was to present the most complete and accurate picture of a query possible – what it did and why. Other than a few aspects that technically aren't achievable today, like continuously capturing the actual plans, I think we succeeded. I'd liken it to a 500-piece puzzle, fully assembled but with 50 pieces missing... which IMO is preferable to 450 pieces in the box, which is what we had before.&lt;/p&gt;  &lt;p&gt;I'm really excited about this release and hope you are too! &lt;a href="http://www.sqlsentry.net/download-trial/trial.asp" target="_blank"&gt;Take it for a spin&lt;/a&gt; and let us know what you think. Existing customers &lt;a href="https://www.sqlsentry.net/Login.aspx" target="_blank"&gt;get it here&lt;/a&gt;.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/KOH3dSq771M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/3577715989692207899/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2011/02/sql-sentry-v6-plan-analysis-features.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3577715989692207899?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3577715989692207899?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/KOH3dSq771M/sql-sentry-v6-plan-analysis-features.html" title="SQL Sentry v6 Plan Analysis Features" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_0vL9rwa06l4/TVw69CpNjzI/AAAAAAAAAWI/wc0PUdL20Is/s72-c/full_version_tooltip_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2011/02/sql-sentry-v6-plan-analysis-features.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcNQng7eip7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-6363764597398468777</id><published>2011-02-08T09:39:00.001-05:00</published><updated>2011-03-28T11:28:13.602-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:28:13.602-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server Training" /><category scheme="http://www.blogger.com/atom/ns#" term="Immersion Training" /><title>SQL Sentry Sponsors Master Immersion, and 5 Reasons Why You Need to Go!</title><content type="html">&lt;p&gt;Unless you've been under a rock lately (or just really, really busy ;-) you're probably aware of the &lt;a href="http://www.sqlskills.com/BLOGS/PAUL/post/Big-changes-to-the-MCM-program-and-how-SQLskills-can-help-you.aspx" target="_blank"&gt;MCM program changes&lt;/a&gt;, as well as &lt;a href="http://www.sqlskills.com/" target="_blank"&gt;SQLskills&lt;/a&gt; new training format, &lt;a href="http://www.sqlskills.com/T_SQLskillsMasterImmersionEvents.asp" target="_blank"&gt;Master Immersion&lt;/a&gt;, which takes their former Immersion training a step further, making it even more MCM-focused. Three of us attended the Boston Immersion event last year (me, Brooke Philpott (&lt;a href="http://brooke.blogs.sqlsentry.net/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/#!/macromullet" target="_blank"&gt;twitter&lt;/a&gt;), and Aaron Bertrand (&lt;a href="http://sqlblog.com/blogs/aaron_bertrand/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/#!/AaronBertrand" target="_blank"&gt;twitter&lt;/a&gt;)), and so we know firsthand the high quality training it provides. I blogged about the experience &lt;a href="http://greg.blogs.sqlsentry.net/2010/04/getting-immersed-in-sql-server.html" target="_blank"&gt;here&lt;/a&gt;. Now what was already great training has become even better, and if you want to apply it to your quest for &lt;a href="http://www.microsoft.com/learning/en/us/certification/master-sql.aspx" target="_blank"&gt;MCM certification&lt;/a&gt;, you can.&lt;/p&gt;  &lt;p&gt;While demonstrating our software, particularly &lt;a href="http://www.sqlsentry.net/performance-advisor/sql-server-performance-overview.asp" target="_blank"&gt;Performance Advisor&lt;/a&gt;, over the past several years I've made an interesting observation. It's that a person’s depth of knowledge about SQL Server tends to be proportional to their appreciation for the things our software does. This isn’t a knock on junior level SQL Server professionals because everyone starts somewhere. It's merely a statement that if you don't start with an understanding and appreciation of the underlying issues impacting SQL Server performance, then you'll inherently have less appreciation for why we're showing certain information, and the fashion in which it's being shown.&lt;/p&gt;  &lt;p&gt;Hey, everyone wants to be understood and appreciated, right? ;-) So this realization is one thing that has led us to increase our support for various &amp;quot;newer&amp;quot; educational events over the &lt;a name="_GoBack"&gt;&lt;/a&gt;past couple of years. From helping to organize a &lt;a href="http://sqlsaturday.com/" target="_blank"&gt;SQLSaturday&lt;/a&gt; here in Charlotte, sponsoring other SQLSaturdays, being one of the first U.S.-based companies to support (and attend) &lt;a href="http://sqlbits.com/" target="_blank"&gt;SQLBits&lt;/a&gt;, to sending 4 people on the inaugural &lt;a href="http://sqlcruise.com/" target="_blank"&gt;SQLCruise&lt;/a&gt;. Now I'm not going to ask you to believe there is no promotional aspect to what we do, of course there is. We have to sell our software to remain viable. But we truly believe in our software – we know it has substantial real world merit, and we know it is quality through and through. We work too hard for it not to be. Just like SQLskills knows their training is the best, because they put everything they are into making it so.&lt;/p&gt;  &lt;p&gt;When we heard about the new Master Immersion Events, we couldn't help but get excited. So much so that we approached Paul Randal (&lt;a href="http://www.sqlskills.com/blogs/paul/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/#!/PaulRandal" target="_blank"&gt;twitter&lt;/a&gt;) and Kimberly Tripp (&lt;a href="http://www.sqlskills.com/blogs/kimberly/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/#!/KimberlyLTripp" target="_blank"&gt;twitter&lt;/a&gt;) and asked if there was any way we could be involved. One thing led to another, and I'm proud to announce that we are &lt;strong&gt;the exclusive sponsor of the first two Master Immersion events&lt;/strong&gt;! We are providing a full breakfast and lunch for attendees all week, and some really cool swag! We're also sending three more SQL Sentry employees through the training.&lt;/p&gt;  &lt;p&gt;As I said in my previous post, it doesn't matter where you lie on the SQL Server skill or experience spectrum, if working with SQL Server represents a significant portion of your job, &lt;strong&gt;you will benefit greatly from this training&lt;/strong&gt;. If this same material was in the hands of lesser instructors this simply would not be the case, but Kimberly and Paul do an incredible job of presenting deep material in an easily digestible, stimulating fashion.&lt;/p&gt;  &lt;p&gt;If you can break away for a week in February or March, do it, you won't regret it. In case you need help justifying it with your boss, spouse, kids, whoever, here are 5 reasons you need to go:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;5. It is the best SQL Server training, from the best instructors in the business. Period.&lt;/p&gt;  &lt;p&gt;4. It costs no more than a week of run-of-the-mill SQL Server training at your local IT training center... except that Kimberly Tripp, Paul Randal, and Brent Ozar (&lt;a href="http://www.sqlskills.com/blogs/brent/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/#!/BrentO" target="_blank"&gt;twitter&lt;/a&gt;) will be teaching the class.&lt;/p&gt;  &lt;p&gt;3. It will make you better at your job, which may lead to increased job security, pay, and praise from management and peers.&lt;/p&gt;  &lt;p&gt;2. It doesn't last 3 weeks or cost $18,500, and there is no killer pass/fail test at the end of the week.&lt;/p&gt;  &lt;p&gt;1. You won't have to pay for breakfast or lunch since SQL Sentry is picking up the tab!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Believe it or not there are still a few seats left for the Feb 21st class on &lt;a href="http://www.sqlskills.com/Master1-Dallas-20110221.asp" target="_blank"&gt;Internals and Performance&lt;/a&gt;, as well as the March 14 class on &lt;a href="http://www.sqlskills.com/Master2-Dallas-20110314.asp" target="_blank"&gt;Performance Tuning&lt;/a&gt;. So if you've been thinking about it, don't wait, get going and &lt;a href="https://www.sqlskills.com/Reg/EventRegistration.aspx" target="_blank"&gt;register now&lt;/a&gt;!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/51sM6uLD0DI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/6363764597398468777/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2011/02/sql-sentry-sponsors-master-immersion.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/6363764597398468777?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/6363764597398468777?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/51sM6uLD0DI/sql-sentry-sponsors-master-immersion.html" title="SQL Sentry Sponsors Master Immersion, and 5 Reasons Why You Need to Go!" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2011/02/sql-sentry-sponsors-master-immersion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EAQn8_fyp7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-3940920177840633663</id><published>2011-01-03T20:21:00.001-05:00</published><updated>2011-03-28T11:20:43.147-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:20:43.147-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CPU Performance" /><title>Ensuring Maximum CPU Performance via Group Policy</title><content type="html">&lt;p&gt;There has been quite a bit of talk recently about a performance issue I see regularly on Windows Server 2008 and 2008 R2 servers, and that's the use of the default Power Plan setting of &amp;quot;Balanced&amp;quot;. Glenn Berry posted about &lt;a href="http://sqlserverperformance.wordpress.com/2010/09/28/windows-power-plans-and-cpu-performance/" target="_blank"&gt;the impact of this setting on CPU performance&lt;/a&gt;; Brent Ozar blogged about a real world case where &lt;a href="http://www.brentozar.com/archive/2010/10/sql-server-on-powersaving-cpus-not-so-fast/" target="_blank"&gt;query CPU time actually doubled on new hardware&lt;/a&gt;; Paul Randal is &lt;a href="http://www.sqlskills.com/BLOGS/PAUL/post/Are-your-CPUs-running-slowly-Tool-tip-and-survey.aspx" target="_blank"&gt;conducting a survey&lt;/a&gt; to ascertain the extent of the issue (when Paul does a survey like this it's usually a sign that all may not be well in the SQL Server world); and Steve Jones recently covered it in &lt;a href="http://www.sqlservercentral.com/articles/Editorial/72053/" target="_blank"&gt;his editorial&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;There isn't much more I can add to the discussion of the impact of this setting on CPU and SQL Server performance, however, I will cover how easy it can be to make it a non-issue in your environment. I first ran across &lt;a href="http://searchservervirtualization.techtarget.com/tip/0,289483,sid94_gci1365989_mem1,00.html" target="_blank"&gt;this issue and solution&lt;/a&gt; last year when deploying new server hardware. Our environment is based around the &lt;a href="http://www.intel.com/products/server/modular-server/modular-server/modular-server-overview.htm" target="_blank"&gt;Intel Modular Server&lt;/a&gt; system and Windows Server 2008 R2, and we needed to be able to run hundreds of Hyper-V virtual machines and SQL Servers for QA testing, scalability testing, and production. The hosts themselves, and the majority of the VMs, are Windows Server 2008 (or R2), and so with the default &amp;quot;Balanced&amp;quot; plan we wouldn't be able to take full advantage of the significant CPU horsepower in which we'd invested (six &amp;quot;big blades&amp;quot;, each with dual quad-core, HT-capable &lt;a href="http://ark.intel.com/Product.aspx?id=37106" target="_blank"&gt;Intel X5550s&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;The solution is simple: &lt;strong&gt;Group Policy&lt;/strong&gt;. Like most other OS settings, the Power Plan can be set to whatever you want via policy, and any existing or new servers that use the policy will inherit this setting. There are a few ways to check and see whether a power plan policy has already been set; which you use will depend on the size of your environment and your level of access to group policy. The most basic approach is simply to inspect the power plan setting for each of your SQL Server machines and see whether the plan is set and/or editable:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TSJ2FXz-NBI/AAAAAAAAAVQ/OtfR2jIqX98/s1600-h/power_plan_setting%5B9%5D.png"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="power_plan_setting" alt="power_plan_setting" src="http://lh4.ggpht.com/_0vL9rwa06l4/TSJ2F1p2MOI/AAAAAAAAAVU/xcOUnrHyjlg/power_plan_setting_thumb%5B7%5D.png?imgmax=800" width="566" height="266" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you see the &amp;quot;Some settings are managed by your sys admin&amp;quot; message, it's read-only and set to High performance, then policy is already set and you are good to go.&lt;/p&gt;  &lt;p&gt;Alternatively, if you have access to group policy, open up the &lt;strong&gt;Group Policy Management Console&lt;/strong&gt; in Server Manager, navigate down to &lt;strong&gt;Group Policy Objects&lt;/strong&gt;, then select the &lt;strong&gt;Settings&lt;/strong&gt; tab for each policy. Expand down to &lt;strong&gt;Administrative Templates &amp;gt; System/Power Management&lt;/strong&gt; and see if &amp;quot;High Performance&amp;quot; has been set for &lt;strong&gt;Active Power Plan&lt;/strong&gt; as shown below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TSJ2GbOQR9I/AAAAAAAAAVg/hkv7Y7pgFWk/s1600-h/domain_policy_settings%5B5%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="domain_policy_settings" border="0" alt="domain_policy_settings" src="http://lh3.ggpht.com/_0vL9rwa06l4/TSJ2G7INqLI/AAAAAAAAAVk/t9KyJLMl1cM/domain_policy_settings_thumb%5B3%5D.png?imgmax=800" width="638" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you have multiple policies and it's not clear which your SQL Server machines may be using, you can use either the &lt;strong&gt;Group Policy Results&lt;/strong&gt; or &lt;strong&gt;Group Policy Modeling&lt;/strong&gt; wizards to view the &lt;a href="http://technet.microsoft.com/en-us/library/cc754269.aspx" target="_blank"&gt;Resultant Set of Policy&lt;/a&gt; for one or more servers. Once the results have been generated, check the &lt;strong&gt;Settings&lt;/strong&gt; tab as above.&lt;/p&gt;  &lt;p&gt;If it turns out that no policy has been set, you will need to either edit an existing policy or create a new policy that covers your SQL Server machines and apply the settings shown below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TSJ2HTh4CBI/AAAAAAAAAVo/_KgT09bHk3w/s1600-h/edit_power_plan_policy%5B4%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="edit_power_plan_policy" border="0" alt="edit_power_plan_policy" src="http://lh4.ggpht.com/_0vL9rwa06l4/TSJ2H_7eBxI/AAAAAAAAAVs/XNs0-2kZZZA/edit_power_plan_policy_thumb%5B2%5D.png?imgmax=800" width="633" height="466" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you need more details on this process, see &lt;a href="http://technet.microsoft.com/en-us/library/cc771479.aspx" target="_blank"&gt;Edit Administrative Template Policy Settings&lt;/a&gt;. If you don't have access to group policy at all, I'm sure you will tell whoever needs to know about this and get it changed... and hopefully they aren't too taken by the modest power savings of &amp;quot;Balanced&amp;quot; to accommodate. If they are, tell them to save the money on less powerful CPUs next time since that's the net effect ;-)&lt;/p&gt;  &lt;p&gt;For the life of me I don't understand why a server OS would ship with this default (well, I do know &lt;em&gt;&lt;a href="http://www.microsoft.com/environment/business_solutions/articles/server_2008.aspx" target="_blank"&gt;why&lt;/a&gt;&lt;/em&gt;, but I certainly don't agree). I don't expect it will be changing anytime soon though, so hopefully a little group policy will help you get the most out of your CPU resources in the meantime.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/OnFCtUR67pc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/3940920177840633663/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2011/01/ensuring-maximum-cpu-performance-via.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3940920177840633663?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3940920177840633663?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/OnFCtUR67pc/ensuring-maximum-cpu-performance-via.html" title="Ensuring Maximum CPU Performance via Group Policy" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_0vL9rwa06l4/TSJ2F1p2MOI/AAAAAAAAAVU/xcOUnrHyjlg/s72-c/power_plan_setting_thumb%5B7%5D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2011/01/ensuring-maximum-cpu-performance-via.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcAQ389eCp7ImA9WhdWGU8.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-3072901715182742640</id><published>2010-10-20T15:06:00.001-04:00</published><updated>2011-09-13T10:27:22.160-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-13T10:27:22.160-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Key Lookups" /><category scheme="http://www.blogger.com/atom/ns#" term="Query Plan Analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="Plan Explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="Execution Plans" /><title>SQL Sentry Plan Explorer Beta</title><content type="html">&lt;p&gt;Recently at &lt;a href="http://sqlbits.com/" target="_blank"&gt;SQLBits&lt;/a&gt; York I demonstrated the new SQL Sentry Plan Explorer (formerly known as the &amp;quot;Plan Viewer&amp;quot;) and officially announced its upcoming release.&amp;#160; We are now pleased to make the beta version of the tool available for download!&lt;/p&gt;  &lt;h4&gt;&lt;font size="4"&gt;Background&lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;We had originally envisioned query analysis features only as part of the fully licensed version of SQL Sentry Performance Advisor.&amp;#160; The goal was to build upon what we all have today with the graphical plan view in SSMS, and in a big way.&amp;#160; Like many of you, I've been using this feature for years, going back to Enterprise Manager, and so had lots of ideas going in about what we could do to make plan analysis more efficient.&lt;/p&gt;  &lt;p&gt;After a few significant reworks over many months, things really started coming together, and it was doing most everything I'd wanted and much more.&amp;#160; Working with our lead developer, Brooke Philpott (&lt;a href="http://brooke.blogs.sqlsentry.net/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/macromullet" target="_blank"&gt;twitter&lt;/a&gt;), one idea had led to another idea, which led to another… it was a gradual, iterative process.&amp;#160; I'm thankful that we embrace a style of agile development here, because this is one project that I believe would have been impossible to design to completion in advance.&amp;#160; It was only through using it on a daily basis to solve real world query issues that the tool was able to evolve into what it is today.&lt;/p&gt;  &lt;p&gt;Anyway, somewhere along the way a couple of things became clear to us:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;These features are so cool and useful (IOHO) that we wanted to share the tool with anyone that wants it, so we are making it available to the SQL Server community for FREE! &lt;/li&gt;    &lt;li&gt;Much of the code was client-side, so it would be fairly easy to break out into a standalone tool without any dependencies on our collection service or database (one of each is required for every full SQL Sentry installation). &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;&lt;font size="4"&gt;Plan Explorer Features&lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;I'll go ahead and run through some of the key features of the Plan Explorer, and in the process I'll compare and contrast with SSMS.&amp;#160; I am not trying to bash SSMS (promise! ;-), I'm simply trying to illustrate the reasoning behind the design of the tool for longtime users of SSMS/Enterprise Manager.&lt;/p&gt;  &lt;p&gt;When you launch the tool for the first time, you'll notice is that the UI is broken into 3 major sections:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Statements Tree &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;General Query &amp;amp; Plan Info &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Plan Details&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;They're all empty until you load a plan.&amp;#160; There are several ways to load a plan:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In SSMS, right-click a graphical plan and select “Show Execution Plan XML”, then copy and paste the plan XML into the Plan Explorer.&amp;#160; It doesn’t matter which pane is active, the clipboard handler is global and will auto-detect the plan XML. &lt;/li&gt;    &lt;li&gt;Save an execution plan from SSMS to a .sqlplan file, then open the file using the Open toolbar button, File-&amp;gt;Open menu, or Ctrl + O.&amp;#160; Raw plan XML files and .QueryAnalysis files (our own proprietary format) are also supported. &lt;/li&gt;    &lt;li&gt;Right-click an existing .sqlplan file in Windows Explorer and select “Open with -&amp;gt; SQL Sentry Plan Explorer”. &lt;/li&gt;    &lt;li&gt;Drag-and-drop a plan file onto the application. &lt;/li&gt;    &lt;li&gt;Retrieve the estimated plan from TSQL. (See &lt;strong&gt;General Query &amp;amp; Plan Info&lt;/strong&gt; section below). &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Statements Tree Section&lt;/h4&gt;  &lt;p&gt;Let's start with how SSMS works.&amp;#160; A batch or stored procedure can of course consist of one or more statements.&amp;#160; With stored procedure estimated plans in SSMS, all individual statement plans are joined together at the top level:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TL884wdPToI/AAAAAAAAASw/gYaI2yJI2Ec/s1600-h/big_plan_estimated%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="big_plan_estimated" border="0" alt="big_plan_estimated" src="http://lh4.ggpht.com/_0vL9rwa06l4/TL885KlcQdI/AAAAAAAAAS0/DOccsgCmJEg/big_plan_estimated_thumb%5B1%5D.png?imgmax=800" width="479" height="370" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When it's an actual plan for a batch or stored proc, or an estimated plan for a batch, each statement is broken out into a separate section, with embedded cost and other information in the section header:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TL885xWHeWI/AAAAAAAAAS4/xQ1ukjmvdXI/s1600-h/big_plan_actual%5B5%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="big_plan_actual" border="0" alt="big_plan_actual" src="http://lh5.ggpht.com/_0vL9rwa06l4/TL886CbBd7I/AAAAAAAAAS8/UkAc49Ntols/big_plan_actual_thumb%5B3%5D.png?imgmax=800" width="480" height="409" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When there is only one or a few statements, SSMS can do Ok with this approach.&amp;#160; However, if it's a large plan with tens or hundreds of statements and conditional logic, looping, etc., it just doesn't scale.&amp;#160; Some plans are so big and complex that it is literally impossible to find the heaviest statements and operations, and some can't even be loaded by SSMS!&lt;/p&gt;  &lt;p&gt;We wanted to change all that, and so the &lt;strong&gt;Statements Tree&lt;/strong&gt; represents one of the biggest design differences between the Plan Explorer and SSMS.&amp;#160; Its function is critical when navigating multi-statement plans.&amp;#160; What it shows is a logical breakdown of the entire plan tree, including all control structures, nested procedure calls, and estimated and/or actual metrics for each statement, as well as operation counts by statement:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/TL886uT138I/AAAAAAAAATA/iwzLGlI1JqU/s1600-h/statements_tree%5B11%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="statements_tree" border="0" alt="statements_tree" src="http://lh6.ggpht.com/_0vL9rwa06l4/TL887TqVWpI/AAAAAAAAATE/ADzblmRS_bk/statements_tree_thumb%5B5%5D.png?imgmax=800" width="749" height="209" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you click on any statement row in the grid, you'll be shown the associated plan for that statement only:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TL887qkaj1I/AAAAAAAAATI/42eK1zcuVpU/s1600-h/statements_tree_stmt_sel%5B8%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="statements_tree_stmt_sel" border="0" alt="statements_tree_stmt_sel" src="http://lh6.ggpht.com/_0vL9rwa06l4/TL888G66pbI/AAAAAAAAATM/6qIcDBMoTAw/statements_tree_stmt_sel_thumb%5B4%5D.png?imgmax=800" width="464" height="360" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Likewise, if you click on any control structure (IF or WHILE) or EXEC &amp;lt;procname&amp;gt; higher up the tree, you'll see a filtered view of the plan starting from that point:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TL889F2OhuI/AAAAAAAAATQ/0BDz2w-lQSk/s1600-h/statements_tree_while_sel%5B7%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="statements_tree_while_sel" border="0" alt="statements_tree_while_sel" src="http://lh3.ggpht.com/_0vL9rwa06l4/TL889uyd-HI/AAAAAAAAATU/qZFbx_o5oGg/statements_tree_while_sel_thumb%5B3%5D.png?imgmax=800" width="467" height="407" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As you've probably guessed by now, you can of course &lt;strong&gt;sort the Statements Tree by clicking on any column header&lt;/strong&gt;, and &lt;em&gt;voila!&lt;/em&gt;, the highest cost trees and statements will immediately bubble up to the top:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0vL9rwa06l4/TL89HlXLcoI/AAAAAAAAATY/5sbsan-Ypr0/s1600-h/statements_tree_sorted%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="statements_tree_sorted" border="0" alt="statements_tree_sorted" src="http://lh5.ggpht.com/_0vL9rwa06l4/TL89IYL8cfI/AAAAAAAAATc/QhhsGByfS30/statements_tree_sorted_thumb%5B1%5D.png?imgmax=800" width="470" height="414" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the shot above I've sorted by Estimated Cost (all numeric columns sort DESC on first click).&amp;#160; I can see that one of the subtrees has a nested DELETE that accounts for 27.2% of the total procedure plan cost, and I've have selected that statement row to view its plan.&amp;#160; If you enlarge the image you'll see that a clustered index seek (highlighted in red) accounts for 39.6% of the statement plan cost.&amp;#160; So with a couple of clicks we've quickly ascertained the heaviest cost statement and operation in this rather large plan.&lt;/p&gt;  &lt;p&gt;Whether there are 10 or 1,000 statements in the master plan doesn't really matter, it's trivial to find the most expensive areas so you can focus your attention on those.&amp;#160; Big plans that simply weren't usable before can now be managed with ease.&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;General Query &amp;amp; Plan Info Section&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;The primary tab you will make use of in this section is &amp;quot;Text Data&amp;quot;, which holds the color-coded TSQL batch or procedure definition:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0vL9rwa06l4/TL89JtMXT8I/AAAAAAAAATg/OGLD3HXY4sg/s1600-h/query_info%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="query_info" border="0" alt="query_info" src="http://lh6.ggpht.com/_0vL9rwa06l4/TL89KNkGyEI/AAAAAAAAATk/SwA0K85z54E/query_info_thumb%5B2%5D.png?imgmax=800" width="516" height="228" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you loaded an existing execution plan, the &lt;strong&gt;TSQL will be auto-generated&lt;/strong&gt;.&amp;#160; You can also type TSQL, copy/paste it in, or open a .SQL file, then click the &amp;quot;Retrieve Estimated Plan&amp;quot; button on the toolbar to get the estimated plan.&lt;/p&gt;  &lt;p&gt;NOTE: Executing TSQL to retrieve the actual plan is not yet supported, although opening an existing actual plan is fully supported.&lt;/p&gt;  &lt;p&gt;You'll notice that, like plans, the TSQL statements are synchronized with the Statements Tree, meaning that if you select a row on the tree view it will auto-select the associated TSQL statement and its execution plan, and vice versa.&amp;#160; See the shots above for examples.&lt;/p&gt;  &lt;h4&gt;Plan Details Section&lt;/h4&gt;  &lt;p&gt;This section contains 4 tabs, each of which serves a different purpose:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Plan Diagram &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Plan Tree &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Top Operations &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Query Columns &lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you select an operator node or row on one of the tabs, &lt;strong&gt;it will be auto-selected on all others&lt;/strong&gt;, so you can switch back and forth between the different views of the plan without losing your place.&lt;/p&gt;  &lt;h5&gt;Plan Diagram&lt;/h5&gt;  &lt;p&gt;This is the view that will certainly be most familiar to everyone… although you should immediately notice some differences.&amp;#160; First, there is color!&amp;#160; That's right, the cost information is color-scaled so you can quickly see which operations are heaviest, and Lookups and Scans are also highlighted (if Rows &amp;gt; 100):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/TL89KrK9L9I/AAAAAAAAATo/cRe8wWypmbk/s1600-h/plan_diagram_color_scaling%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="plan_diagram_color_scaling" border="0" alt="plan_diagram_color_scaling" src="http://lh4.ggpht.com/_0vL9rwa06l4/TL89K2Jtv1I/AAAAAAAAATs/SqPGFJLQPiY/plan_diagram_color_scaling_thumb%5B1%5D.png?imgmax=800" width="704" height="199" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;Pretty cool, eh?&amp;#160; But wait, there's more! ;-)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If you right-click the diagram, context menus provide access to a variety of other functions&lt;/strong&gt;. (bolded because this can be easy to miss!)&lt;/p&gt;  &lt;p&gt;Using the context menus, in addition to scaling by total cost (CPU + I/O), you can also use CPU or I/O separately:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TL89MNkmYTI/AAAAAAAAATw/wdXP9egwKD4/s1600-h/plan_diagram_costs_by_cpu%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="plan_diagram_costs_by_cpu" border="0" alt="plan_diagram_costs_by_cpu" src="http://lh3.ggpht.com/_0vL9rwa06l4/TL89PPhzuRI/AAAAAAAAAT0/hq98ank9eI8/plan_diagram_costs_by_cpu_thumb%5B2%5D.png?imgmax=800" width="491" height="324" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This can be very helpful if your hardware is more I/O constrained than CPU constrained, or vice versa.&lt;/p&gt;  &lt;p&gt;To see which subtrees are most expensive, select the &amp;quot;Cumulative Costs&amp;quot; context item:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/TL89wLL-i0I/AAAAAAAAAUQ/wPpSTWluCUQ/s1600-h/plan_diagram_cumulative_costs%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="plan_diagram_cumulative_costs" border="0" alt="plan_diagram_cumulative_costs" src="http://lh3.ggpht.com/_0vL9rwa06l4/TL89wpgFwVI/AAAAAAAAAUU/qeowUhb9SUs/plan_diagram_cumulative_costs_thumb%5B1%5D.png?imgmax=800" width="687" height="223" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I won't go into detail on all of the other plan diagram enhancements in this already lengthy post, but here is a list of some of them:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Optimized plan node labels prevent truncation of object names in most cases, with menu option to disable truncation completely so full object names are always visible. &lt;/li&gt;    &lt;li&gt;Optimized tooltips prevent wrapping of object names, column names and predicates. &lt;/li&gt;    &lt;li&gt;Costs are always displayed above nodes for maximum readability. &lt;/li&gt;    &lt;li&gt;Costs are shown to the first decimal place. &lt;/li&gt;    &lt;li&gt;Connector line width can be scaled by either Rows or Data Size. &lt;/li&gt;    &lt;li&gt;Rows and Data Size labels are displayed above connector lines. &lt;/li&gt;    &lt;li&gt;Connector lines for bookmark (key|rid) lookups, table spools, and function calls show the true estimated rows or data size, and line width is scaled accordingly. (SSMS always shows the &amp;quot;per execution&amp;quot; rows, CPU and I/O costs for these operators in estimated plans, which can appear to dramatically understate the true costs. For example, if estimated rows=10 and estimated executions=1000 for a key lookup, the line is scaled to 10 rows, not 10,000! What makes this more confusing is that for actual plans SSMS does show the true rows and costs. So you really have to pay attention to the type of plan you're looking at in SSMS – if you're conditioned to always look for the operators with the fattest lines, you can completely miss the highest cost operations.)&lt;/li&gt;    &lt;li&gt;The mouse scroll wheel can be used for both scrolling up down, and zooming in/out (by holding Ctrl) ! &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Last but certainly not least, you may notice that some plans seem, well, &amp;quot;different&amp;quot;.&amp;#160; This is likely due to the optimized layout algorithm which is able to render many plans using much less real estate than SSMS, meaning you are seeing more of the plan without having to scroll and zoom.&amp;#160; It's easiest to demonstrate this with a couple of pictures.&amp;#160; The shots below are of &lt;strong&gt;the same plan&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SSMS version:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0vL9rwa06l4/TL89xbisT-I/AAAAAAAAAUY/v4_kpcJmdz8/s1600-h/plan_tall_ssms%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="plan_tall_ssms" border="0" alt="plan_tall_ssms" src="http://lh5.ggpht.com/_0vL9rwa06l4/TL89yMJ1okI/AAAAAAAAAUc/4hTWdX-zctA/plan_tall_ssms_thumb%5B2%5D.png?imgmax=800" width="710" height="431" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Plan Explorer version:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TL89yi3OpKI/AAAAAAAAAUg/z1lPaF1gIrQ/s1600-h/plan_tall_pe%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="plan_tall_pe" border="0" alt="plan_tall_pe" src="http://lh4.ggpht.com/_0vL9rwa06l4/TL89y-nJa8I/AAAAAAAAAUk/okcV4gZsDak/plan_tall_pe_thumb%5B1%5D.png?imgmax=800" width="712" height="196" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;Plan Tree&lt;/h5&gt;  &lt;p&gt;This view is just what it sounds like, a tree representation of the plan which shows all operations and associated metrics.&amp;#160; On the surface it looks similar to a showplan_all, however it's different in several respects:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You can expand and collapse sections, and sort within levels. &lt;/li&gt;    &lt;li&gt;Additional metrics are shown, such as &amp;quot;Estimated Data Size&amp;quot;, as well as &amp;quot;Actual Rows&amp;quot; and &amp;quot;Actual Data Size&amp;quot; for actual plans, side-by-side with the estimates.&amp;#160; There are many other plan metrics available by right-clicking any column header and selecting &amp;quot;Column Chooser&amp;quot;. &lt;/li&gt;    &lt;li&gt;Significant differences between estimates and actuals are highlighted. &lt;/li&gt;    &lt;li&gt;Possibly problematic operations like scans and bookmark lookups are highlighted. &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Top Operations&lt;/h5&gt;  &lt;p&gt;Another one that is as it sounds, a simple list of all plan operations, sorted DESC by total estimated cost by default.&amp;#160; You can of course sort by any of the other columns, as well as group by operation type, object, etc.&amp;#160; The same columns and highlighting as on the Plan Tree tab apply here.&lt;/p&gt;  &lt;h5&gt;Query Columns&lt;/h5&gt;  &lt;p&gt;This is one of the most useful views for many plans.&amp;#160; What is shows is a list of all columns accessed by the query, for whatever reason (sarg, join, output list, sort), along with the table, operation, and index used.&amp;#160; How is it useful?&lt;/p&gt;  &lt;p&gt;Take the case of a bookmark lookup, where you have some columns that aren't covered by the index chosen by the optimizer.&amp;#160; The traditional ways of figuring out which columns aren't covered is by hovering over multiple nodes on the graphical plan to determine the index used and columns accessed, clicking through the Properties pane for those nodes, or looking through a showplan_all, all of which can be tedious and error prone.&lt;/p&gt;  &lt;p&gt;Instead, when you look at the Query Columns list, you'll see the columns for related operations grouped together (indicated by a thick separator bar), with the index used and the columns in the lookup highlighted in orange:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/TL89zdGjaSI/AAAAAAAAAUo/vEwFALveemQ/s1600-h/columns_lookup%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="columns_lookup" border="0" alt="columns_lookup" src="http://lh4.ggpht.com/_0vL9rwa06l4/TL89zmh-w5I/AAAAAAAAAUs/i7eGULHsYZE/columns_lookup_thumb%5B2%5D.png?imgmax=800" width="812" height="149" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;From here it's often a simple matter to make the appropriate index modifications to eliminate the lookup.&amp;#160; In the case above, I can see that index [IDX_ClientID] isn't covering columns [LEASE_ID] and [DOCUMENT_SIZE], so I may want to add them as included columns to the existing index, or create a new covering index.&lt;/p&gt;  &lt;p&gt;NOTE: In the full version of SQL Sentry v6, you can directly open the index properties from this and all other plan tabs using context menus, or by double-clicking nodes on the graphical plan.&amp;#160; This is something you used to be able to do in Enterprise Manager but was dropped in SSMS, much to my dismay.&amp;#160; We wanted to make this available in the Plan Explorer as well since it can be a huge timesaver, but currently the tool has no integration with SSMS in order to keep the install simple.&amp;#160; Rest assured, if/when this changes we will add this capability to the tool.&lt;/p&gt;  &lt;h4&gt;&lt;font size="4"&gt;Beta Downloads&lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;You &lt;strong&gt;MUST HAVE .NET 4.0 PRE-INSTALLED&lt;/strong&gt; to install and use the Plan Explorer. &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992&amp;amp;displaylang=en" target="_blank"&gt;Download it here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://downloads.sqlsentry.net/downloads/sqlsentryplanexplorer/x64/SQLSentryPlanExplorerSetup-x64.msi" target="_blank"&gt;SQL Sentry Plan Explorer x64&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://downloads.sqlsentry.net/downloads/sqlsentryplanexplorer/x86/SQLSentryPlanExplorerSetup-x86.msi" target="_blank"&gt;SQL Sentry Plan Explorer x86&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://downloads.sqlsentry.net/downloads/sqlsentryplanexplorer/SQLSentryPlanExplorer.doc" target="_blank"&gt;SQL Sentry Plan Explorer Documentation&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://downloads.sqlsentry.net/downloads/sqlsentryplanexplorer/Plan_Explorer_Change_List.txt" target="_blank"&gt;Plan Explorer Change List&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;General discussion and support for the free tool will be provided through the &lt;a href="http://forum.sqlsentry.net/forum12-sql-sentry-plan-explorer.aspx" target="_blank"&gt;SQL Sentry Plan Explorer forum&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;This beta build has proven very solid, and handles all plans we've seen thus far, regardless of size or complexity.&amp;#160; However, as it is a beta, you may find a quirk or two.&amp;#160; If you run into any problems, or have any ideas, questions, etc., email me at greg at sqlsentry.net.&amp;#160; For questions, please be sure to check the forum and the documentation first.&lt;/p&gt;  &lt;p&gt;Special thanks the first beta testers who really hammered the tool and helped us get it where it is today!&amp;#160; In particular, Jonathan Kehayias (&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/sqlsarg" target="_blank"&gt;twitter&lt;/a&gt;), Mladen Prajdic (&lt;a href="http://weblogs.sqlteam.com/mladenp/default.aspx" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://www.twitter.com/MladenPrajdic" target="_blank"&gt;twitter&lt;/a&gt;), Christian Bolton (&lt;a href="http://sqlblogcasts.com/blogs/christian/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/christianbolton" target="_blank"&gt;twitter&lt;/a&gt;), Brent Ozar (&lt;a href="http://www.brentozar.com/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/brento" target="_blank"&gt;twitter&lt;/a&gt;), Brian Kelley (&lt;a href="http://www.sqlservercentral.com/blogs/brian_kelley/default.aspx" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/kbriankelley" target="_blank"&gt;twitter&lt;/a&gt;), and Aaron Bertrand (&lt;a href="http://sqlblog.com/blogs/aaron_bertrand/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/AaronBertrand" target="_blank"&gt;twitter&lt;/a&gt;) provided some great real-world plans and feedback.&lt;/p&gt;  &lt;p&gt;There are many more features and use cases I'll be covering in the coming weeks, so stay tuned...&lt;/p&gt;  &lt;p&gt;I hope you enjoy using it as much as we've enjoyed building it!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/8Oqk8Q896jU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/3072901715182742640/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2010/10/sql-sentry-plan-explorer-beta.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3072901715182742640?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/3072901715182742640?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/8Oqk8Q896jU/sql-sentry-plan-explorer-beta.html" title="SQL Sentry Plan Explorer Beta" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_0vL9rwa06l4/TL885KlcQdI/AAAAAAAAAS0/DOccsgCmJEg/s72-c/big_plan_estimated_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>9</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2010/10/sql-sentry-plan-explorer-beta.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cESHw5fSp7ImA9Wx5UFEQ.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-2750402399212349051</id><published>2010-10-18T11:03:00.001-04:00</published><updated>2010-10-19T09:30:09.225-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-19T09:30:09.225-04:00</app:edited><title>Aaron Bertrand Joins the SQL Sentry Team</title><content type="html">&lt;p&gt;I'm pleased to announce that highly regarded SQL Server MVP, Aaron Bertrand (&lt;a href="http://sqlblog.com/blogs/aaron_bertrand/default.aspx" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/aaronbertrand" target="_blank"&gt;twitter&lt;/a&gt;), will be joining the SQL Sentry team!&amp;#160; His first day on the job will be next Monday, October 25th.&amp;#160; We are all extremely excited to have him on board, for a variety of reasons.&amp;#160; On the surface, it may appear to be an attempt to &amp;quot;keep up with the Jones'&amp;quot; in the sense of us bringing on a high profile community advocate, but this is actually much more than that.&amp;#160; Aside from Aaron's vast knowledge and experience with SQL Server, having known and worked with him for several years now, he is a person that just gets things done.&amp;#160; Sure, he has phenomenal communication skills and will undoubtedly continue blogging and speaking about SQL Server, but for us the move is just as operational in nature.&lt;/p&gt;  &lt;p&gt;I mean, who better for a SQL Server ISV like us to have in house than the person who has far and away provided the most feedback to Microsoft on SQL Server itself? (see &lt;a href="http://connect.microsoft.com/SQLServer" target="_blank"&gt;Connect&lt;/a&gt; stats lower right)&lt;/p&gt;  &lt;p&gt;Aaron was a long time user of SQL Sentry software in his previous job, so he already knows our software inside and out and has provided lots of great feedback over the years.&amp;#160; The SQL Server environment at OTOLabs is unique – high volume OLTP systems with many hundreds of databases – it definitely stressed our software early on and pushed us to come up with ways of dealing with that kind of scale.&lt;/p&gt;  &lt;p&gt;If you know Aaron, you know that he says what he believes and doesn't pull any punches.&amp;#160; He's exactly the kind of person we want here, someone with unquestioned integrity who isn't afraid to tell it like it is, and who will continue to look at our software with a critical eye.&amp;#160; I have no doubt that Aaron will have a significant impact on our company and our software in many different ways, some we can anticipate, but many we probably can't.&lt;/p&gt;  &lt;p&gt;I could go on, but from here I'll defer to Aaron's &lt;a href="http://bit.ly/d478QM" target="_blank"&gt;post&lt;/a&gt; about the move.&lt;/p&gt;  &lt;p&gt;Welcome aboard, Aaron!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/uCdS4K1HMG4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/2750402399212349051/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2010/10/aaron-bertrand-joins-sql-sentry-team.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/2750402399212349051?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/2750402399212349051?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/uCdS4K1HMG4/aaron-bertrand-joins-sql-sentry-team.html" title="Aaron Bertrand Joins the SQL Sentry Team" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2010/10/aaron-bertrand-joins-sql-sentry-team.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcNQng7eip7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-7269237531177650767</id><published>2010-06-02T07:50:00.004-04:00</published><updated>2011-03-28T11:28:13.602-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:28:13.602-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server Training" /><category scheme="http://www.blogger.com/atom/ns#" term="SQLCruise" /><title>SQLCruise Contest Winner</title><content type="html">As you may have heard, as part of our sponsorship of the inaugural &lt;a href="http://www.sqlcruise.com/" target="_blank"&gt;SQLCruise&lt;/a&gt;, we decided to run &lt;a href="http://www.sqlsentry.net/sqlcruise.asp" target="_blank"&gt;a contest&lt;/a&gt; to provide one lucky winner a free ticket for the cruise and training.&amp;nbsp; When we started the contest we expected that most of the submissions would be in the form of tweets or short blog posts, and we did receive many of those which were quite good.&amp;nbsp; We were surprised and&amp;nbsp;impressed, however, by the effort, ingenuity and humor that went into four submissions in particular.&amp;nbsp; So much so that we had a tremendously hard time selecting a winner…&amp;nbsp;how could we possibly choose&amp;nbsp;between:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Jorge Segarra (&lt;a href="http://sqlchicken.com/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/SQLChicken" target="_blank"&gt;twitter&lt;/a&gt;) – Here's a guy who, and I can't think of any other way to put it, was &lt;em&gt;born&lt;/em&gt; to go on this cruise.&amp;nbsp; Not only was &lt;a href="http://www.youtube.com/watch?v=s_0yvW2cm-w&amp;amp;feature=player_embedded" target="_blank"&gt;his video&lt;/a&gt; hilarious, it was replete with gratuitous SQL Sentry references, and was actually submitted &lt;i&gt;before&lt;/i&gt; the contest officially started.&amp;nbsp; Talk about enthusiasm!&amp;nbsp; It was a shot across the SQLCruise bow – "If you want to go on the cruise, you're gonna have to go through me!!"&amp;nbsp; It also served to ensure we wouldn't spend any time reviewing half-hearted submissions (thanks man! ;-)&amp;nbsp; How could we in good faith not send him, and deprive the other SQLCruisers of four days of laughs and learning with the Chicken?&lt;/li&gt;
&lt;li&gt;Matthew Velic (&lt;a href="http://mattvelic.com/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/mvelic" target="_blank"&gt;twitter&lt;/a&gt;) – A guy who's new to SQL Server and who desperately wants training, and who would apply that training daily for a very worthy cause, fighting &lt;a href="http://www.pedaids.org/" target="_blank"&gt;Pediatric AIDS&lt;/a&gt;.&amp;nbsp; He clearly spent a lot of time on &lt;a href="http://www.youtube.com/watch?v=hjnk-k5tEg8&amp;amp;feature=player_embedded" target="_blank"&gt;his video&lt;/a&gt; as&amp;nbsp;well, as&amp;nbsp;the production values were through the roof.&amp;nbsp; How could we not send Matthew?&lt;/li&gt;
&lt;li&gt;Rebecca Mitchell (&lt;a href="http://tsqlprincess.wordpress.com/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/SQLPrincess" target="_blank"&gt;twitter&lt;/a&gt;) – A DBA in Colorado who not only has the technical skills required to successfully manage lots of SQL Servers, but the creativity to write &lt;a href="http://sqlcruise.com/2010/05/insert-into-sqlcruise-select-sqlprincess/" target="_blank"&gt;a poem about SQL Server&lt;/a&gt; (yes, that's right, and probably the longest poem I've ever seen, let alone read), with cleverly infused references to SQL Sentry's deadlock analysis and every DBA’s &lt;a href="http://baconunwrapped.com/" target="_blank"&gt;favorite breakfast meat&lt;/a&gt;&amp;nbsp;to boot.&amp;nbsp; How the same person can have both abilities is frankly beyond my comprehension.&amp;nbsp; How could we not send this rare talent on the cruise?&lt;/li&gt;
&lt;li&gt;Erin Stellato (&lt;a href="http://twitter.com/erinstellato" target="_blank"&gt;twitter&lt;/a&gt;) – Erin lives and works in Cleveland.&amp;nbsp; I mean, how could we not send her? ;-)&amp;nbsp; Well, &lt;a href="http://www.youtube.com/watch?v=jtENnjYS5tc&amp;amp;feature=player_embedded" target="_blank"&gt;her video&lt;/a&gt; also happened to be extremely well done, with Hollywood quality acting, score, humor and special effects.&amp;nbsp; Seriously, she too needed to go!&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
So after going round and round for hours, we couldn't decide, which left us with a couple of options: either put it out for a community vote (which we may actually do next time), or just bag the whole idea.&amp;nbsp; Unfortunately we had a hard deadline from Carnival so there was no time to put it out to vote.&amp;nbsp; Punting on the contest was out too as we certainly couldn't punish everyone for being "too good"… that's just not how we operate here.&lt;br /&gt;
&lt;br /&gt;
After some more agonizing, another idea came to us.&amp;nbsp; It was extreme… but clearly it was the best option, and a quick review of the &lt;a href="http://www.sqlsentry.net/files/SQLSentryContest-SQLCruise.pdf" target="_blank"&gt;official contest rules&lt;/a&gt; confirmed that it was indeed "legal":&amp;nbsp; Jorge, Matthew, Rebecca, Erin, pack your bags, &lt;em&gt;you are all going on SQLCruise!!!&lt;/em&gt; ;-)&lt;br /&gt;
&lt;br /&gt;
We have no doubt you will&amp;nbsp;all make the most of this awesome opportunity.&amp;nbsp; Have a great time, and be sure to spread the word!&lt;br /&gt;
&lt;br /&gt;
Thanks to everyone who participated, I do wish we could send all of you… maybe someday.&amp;nbsp; Meantime, I hear there are still a few seats left!&lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/C1gBKPx68hE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/7269237531177650767/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2010/06/sqlcruise-contest-winner.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/7269237531177650767?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/7269237531177650767?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/C1gBKPx68hE/sqlcruise-contest-winner.html" title="SQLCruise Contest Winner" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2010/06/sqlcruise-contest-winner.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcNQng7eip7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-7483042438646874145</id><published>2010-04-05T10:02:00.002-04:00</published><updated>2011-03-28T11:28:13.602-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:28:13.602-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server Training" /><category scheme="http://www.blogger.com/atom/ns#" term="Immersion Training" /><title>Getting Immersed in SQL Server</title><content type="html">&lt;p&gt;I had the pleasure of spending the past week at the &lt;a href="http://bostonsqltraining.com/course.aspx" target="_blank"&gt;SQL Server Immersion&lt;/a&gt; event in Boston.&amp;#160; I was joined by our lead developer, Brooke Philpott (&lt;a href="http://brooke.blogs.sqlsentry.net/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/MacroMullet" target="_blank"&gt;twitter&lt;/a&gt;).&amp;#160; This was an intensive course on SQL Server internals, and much more, put on by the esteemed Paul Randal (&lt;a title="http://www.sqlskills.com/BLOGS/PAUL/" href="http://www.sqlskills.com/BLOGS/PAUL/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a title="http://twitter.com/PaulRandal" href="http://twitter.com/PaulRandal" target="_blank"&gt;twitter&lt;/a&gt;) and Kimberly Tripp (&lt;a title="http://www.sqlskills.com/BLOGS/Kimberly/" href="http://www.sqlskills.com/BLOGS/Kimberly/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a title="http://twitter.com/KimberlyLTripp" href="http://twitter.com/KimberlyLTripp" target="_blank"&gt;twitter&lt;/a&gt;), and hosted by Adam Machanic (&lt;a href="http://sqlblog.com/blogs/adam_machanic/" target="_blank"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/AdamMachanic" target="_blank"&gt;twitter&lt;/a&gt;).&amp;#160; I knew going in that Paul and Kimberly were authorities in their respective areas – Paul in the storage engine and related areas like backup/recovery, and Kimberly in query tuning and index optimization.&amp;#160; What I didn’t expect was the sheer breadth and depth of their knowledge, and that they also share quite a bit of knowledge in common.&amp;#160; They are of course married, so I expect this leads to a lot of information-sharing at the dinner table that wouldn’t occur otherwise.&lt;/p&gt;&lt;p&gt;The material covered is far too extensive to get into here, but I will say that every day, and just about every hour of every day, was a challenge… and I have worked with SQL Server for almost 15 years.&amp;#160; This was not basic stuff.&amp;#160;&amp;#160; A couple of times in the past I’ve made the mistake of paying for training where the outline looks great, but you get in class only to find that it’s far too basic and high level, and therefore not worth the time away to be there.&amp;#160; This was not that class.&amp;#160; Even though GAMS, IAMS, PFS pages, headers, slots and associated bits and bytes could be considered “basic” in the sense that they are the building blocks of SQL Server, they are certainly not simple.&amp;#160; The amazing thing is that this class really costs no more than many other lower quality week-long SQL Server training courses, when in reality it should probably cost twice as much.&amp;#160; It is an absolute bargain.&lt;/p&gt;&lt;p&gt;When it comes to the instructors themselves, Kimberly and Paul simply have no equal.&amp;#160; Not only are they both ultimate authorities, but they have endless enthusiasm about the material, and spot on delivery.&amp;#160; If either ever got tired they never showed it, even after going all day and all week.&amp;#160; We witnessed countless demos over the course of the week, some extremely involved, multi-step processes, and I can’t recall a one that didn’t go the way it was supposed to.&amp;#160; When has that ever happened?&amp;#160; It certainly hasn’t for me.&amp;#160; Seems as if whenever I demonstrate something in public there is invariably some glitch or another.&amp;#160; These are not beginner presenters, and they put an extreme amount of preparation and attention to detail into everything that they do.&amp;#160; Completely, utterly professional.&lt;/p&gt;&lt;p&gt;You might think that with this extreme level of skill comes extreme levels of egotism and lack of patience.&amp;#160; Nothing could be further from the truth.&amp;#160; There were no stupid questions the entire week – well, there were of course, but the response from Paul or Kimberly usually started with “Excellent question…” even when the question wasn’t so excellent.&amp;#160; They simply know how to teach, and are approachable, humble, and patient.&lt;/p&gt;&lt;p&gt;Anyone, from the accidental DBA (there were actually several in our class) to the experienced MVP, will gain significantly from this training.&amp;#160; Not everyone has 3 weeks and $20K to spend on &lt;a href="http://www.microsoft.com/learning/en/us/certification/master.aspx" target="_blank"&gt;MCM&lt;/a&gt; training, the first week of which is Paul and Kimberly on similar material.&amp;#160; Is Immersion the same as the first week of MCM?&amp;#160; According to Kimberly it is not quite as deep, which surprised me… I mean, how much deeper can you go? ;-) There is also no test at the end of the week at Immersion, so probably a lot less pressure as a result.&amp;#160; However, if you are thinking about going after the MCM and want to stick some toes in the water first, I suspect Immersion will give you a good idea of what to expect, as well as serve as a serious primer for much of the first week.&lt;/p&gt;&lt;p&gt;What I think it comes down to is that Paul and Kimberly truly enjoy what they do.&amp;#160; They have a passion for sharing the unique knowledge they have accumulated over the years while working at Microsoft and consulting with some of the largest SQL Server enterprises in the world, and it shows.&amp;#160; The SQL Server community should be thankful that they are so willing to share this knowledge, and that they are able to do it so well.&amp;#160; I count myself privileged to have been able to spend a week with them, and learn many things that will undoubtedly help me and my company, today and years into the future.&lt;/p&gt;&lt;p&gt;This was the only public Immersion event they will hold in the U.S. this year.&amp;#160; Keep a close eye on the &lt;a href="http://www.sqlskills.com/upcomingConferences.asp" target="_blank"&gt;SQLskills.com upcoming events page&lt;/a&gt; for announcements about future events.&amp;#160; I believe there is one in Dublin later this year, but I'm not seeing it on the site, so it may be sold out.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/7Em6rNgSNB0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/7483042438646874145/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2010/04/getting-immersed-in-sql-server.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/7483042438646874145?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/7483042438646874145?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/7Em6rNgSNB0/getting-immersed-in-sql-server.html" title="Getting Immersed in SQL Server" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2010/04/getting-immersed-in-sql-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcNQng7eyp7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-6073430474410390603</id><published>2010-03-09T12:37:00.001-05:00</published><updated>2011-03-28T11:28:13.603-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:28:13.603-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLSaturday" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server Training" /><title>SQLSaturday Charlotte: Lessons Learned</title><content type="html">&lt;p&gt;We just wrapped up what have been the busiest, most stress-filled, yet rewarding couple of weeks in recent memory.&amp;#160; Overall the feedback we've received about the &lt;a href="http://www.sqlsaturday.com/33/eventhome.aspx" target="_blank"&gt;SQLSaturday Charlotte&lt;/a&gt; event has been amazing, thanks to all for the kind words that have been tweeted and blogged thus far!&amp;#160; I do think for the most part the event went off about as well as it could have despite our lack of experience planning technical conferences.&amp;#160; However, we definitely learned a lot that we'll be able to apply should we ever do it again.&amp;#160; I had many questions when I first started working on this event, so I wanted to get my thoughts down while still fresh with hopes that it might be helpful for future SQLSaturday planners.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Scheduling Concerns&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;One of my primary tasks was trying to coordinate the flood of speakers and sessions we had for the event, a flood created by none other than CSSUG president and SQL Sentry partner channel manager Peter Shire, whose skills at promoting can only be described as P.T. Barnum-like.&amp;#160; (I thought for sure that P.T.'s first name must have been &amp;quot;Peter&amp;quot;, but turns out it was &amp;quot;Phineas&amp;quot;)&amp;#160; Peter did a phenomenal job securing the support of an amazing list of 35 speakers, and getting the word out to the SQL Server community to the tune of about 400 registered attendees, 280 of whom actually made it to the event.&lt;/p&gt;  &lt;p&gt;The starting point for the schedule planning was the facility.&amp;#160; The &lt;a href="http://www.bing.com/maps/?v=2&amp;amp;cp=pvpvtv87psc7&amp;amp;scene=21410398&amp;amp;lvl=1&amp;amp;sty=b&amp;amp;cid=E73657E51C5EB3CF!139" target="_blank"&gt;Microsoft campus&lt;/a&gt; here is a fantastic facility in a great location close to the airport, downtown, etc., however, it wasn't necessarily designed to run an event like this.&amp;#160; The initial room breakdown was:&lt;/p&gt;  &lt;p&gt;Building AP1:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Room 1: 200 seats     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Rooms 2,3,4,5: 20 seats each    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Cafeteria: 220 seats&lt;/p&gt;  &lt;p&gt;Building AP2:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Room 6,7,8: 50 seats each&lt;/p&gt;  &lt;p&gt;The two buildings are about a 3-minute walk apart.&amp;#160; Because of the relative size difference between the largest and smallest rooms, my biggest fears were putting a hot session in one of the smaller training rooms causing massive overflow, and putting a not-so-hot one of the big rooms… either of which can exacerbate the other.&amp;#160; The original layout had us using the 4 training rooms in AP1, the same building with the cafeteria and the 200 seat room, however, about a week before the event we got word from Microsoft that we'd been bumped by some internal training and had to use 4 training rooms in AP2 instead.&amp;#160; So that left us with:&lt;/p&gt;  &lt;p&gt;Building AP1:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Room 1: 200 seats     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Cafeteria: 220 seats&lt;/p&gt;  &lt;p&gt;Building AP2:   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Rooms 2,3,4,5: 20 seats     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Room 6,7,8: 50 seats &lt;/p&gt;  &lt;p&gt;The AP2 training rooms are an exact mirror of those in AP1, however it seemed to make for a very lopsided layout since it left us with a single large room in one building, and 8 rooms in the other building.&amp;#160; This caused concern since we'd been counting on a lot of interplay between the 80-100 people in the training rooms and the 200-seat room where I'd put all of the &amp;quot;hottest&amp;quot; sessions.&amp;#160; We didn't understand why the other group couldn't just use the AP2 training rooms, but eventually found out – they were doing lab sessions, and apparently the workstations in AP2 aren't the same class as those in AP1.&amp;#160; We weren't using the workstations so it didn't really matter to us, but apparently it did to them ;)&lt;/p&gt;  &lt;p&gt;As it turned out, it probably did end up causing lower attendance for the featured sessions and some overflow in some of the smaller rooms, mainly because some seemed reluctant to leave AP2 when there were so many other good sessions going on next right there.&amp;#160; But did it even come close to ruining the conference?&amp;#160; Certainly not.&lt;/p&gt;  &lt;p&gt;Another issue with the change was that we didn't get the new room names in time to put them on the signage, so we ended up using numbered rooms that were offset from the tracks by one – Track 2 was in Training 1, Track 3 in Training 2, etc.&amp;#160; This was very confusing, even to me.&amp;#160; At one point I even directed Wayne Snyder into the wrong room for his session.&amp;#160; Sorry Wayne!&lt;/p&gt;  &lt;p&gt;The first thing I did was try and categorize the &lt;a href="http://www.sqlsaturday.com/33/schedule.aspx" target="_blank"&gt;80+ submitted sessions&lt;/a&gt; so I could get a better handle on the actual areas of interest we had to work with.&amp;#160; What I was really looking for at that point was whether or not we could have any focused tracks.&amp;#160; I ended up with 4 major categories and 24 subcategories:&lt;/p&gt;  &lt;table border="1" cellspacing="0" width="400" bgcolor="#ffffff"&gt;&lt;font color="#000000" face="Calibri"&gt;&lt;caption&gt;&lt;/caption&gt;&lt;/font&gt;&lt;thead&gt;     &lt;tr&gt;       &lt;th bgcolor="#c0c0c0" bordercolor="#000000"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Category – Subcategory&lt;/font&gt;&lt;/th&gt;        &lt;th bgcolor="#c0c0c0" bordercolor="#000000" align="center"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Session Count&lt;/font&gt;&lt;/th&gt;     &lt;/tr&gt;   &lt;/thead&gt;&lt;tbody&gt;     &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - Broker&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - Clustering&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - DB Design&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - Hardware&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - Maintenance&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - Memory&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - Performance&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;11&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - PowerShell&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - Replication&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - Troubleshooting&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Admin - Virtualization&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;BI - Dev&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;BI - SSAS&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;BI - SSIS&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;5&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;BI - SSRS&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Dev - DB Design&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Dev - Performance&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Dev - Tools&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Dev - TSQL&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;Dev - XML&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;1&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;General - Career&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;General - General&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;4&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;General - Social&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;3&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr valign="top"&gt;       &lt;td bordercolor="#d0d7e5"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;General - Tools&lt;/font&gt;&lt;/td&gt;        &lt;td bordercolor="#d0d7e5" align="right"&gt;&lt;font style="font-size: 8pt" color="#000000" face="Calibri"&gt;2&lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;tfoot&gt;&lt;/tfoot&gt;&lt;/table&gt;  &lt;p&gt;It was apparent that although for a couple like Performance and BI, focused tracks might work, but for others we only had one or two sessions so trying to do clean, interest-based tracks would be fruitless.&amp;#160; I should mention that although for some sessions the categorization was easy, for others it was not clean at all, so I just took my best stab at it.&amp;#160; Even so, there were a few others that seemed to defy categorization, like Kevin Kline's &amp;quot;Top 10 Mistakes on SQL Server&amp;quot; and Sergey Pustovit's &amp;quot;SQL Server 2008/R2 Overview&amp;quot;, and those ended up in &amp;quot;General – General&amp;quot; ;)&lt;/p&gt;  &lt;p&gt;I was also hoping that by having these categories, I'd be able to send them out to a few people that had planned other recent SQLSaturdays and ask them to order the list by most to least popular at their event.&amp;#160; I got some extremely valuable feedback from those planners, but since they didn't have accurate attendance numbers for all topics we didn't get any rankings back.&amp;#160; Since this info could have been invaluable to me and helped to avoid some of the session/room mismatches we experienced, I'm posting all of our &lt;a href="http://www.sqlsentry.net/downloads/misc/SQLSat33ScheduleCounts.xls" target="_blank"&gt;attendance numbers here&lt;/a&gt;.&amp;#160; Bear in mind they are only estimates and not exact.&amp;#160; If you see anything that looks way off, let me know.&lt;/p&gt;  &lt;p&gt;Next, to my sessions spreadsheet I added a few columns, and used them to come up with a universal rating measure to help decide where sessions should go.&amp;#160; Here they are:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Hot Topic&lt;/strong&gt; – Yes/No – Is the topic particularly popular right now, and are there a lot of people talking about it in the media?&amp;#160; For example, I don't think that anyone would argue that PowerPivot is a hot topic right now.&amp;#160; If Yes, 2 points were added to the rating.    &lt;br /&gt;&lt;strong&gt;Premiere Speaker&lt;/strong&gt; – Yes/No – Certain speakers have significant name recognition, and will draw attendees regardless of the topic.&amp;#160; If Yes, 3 points were added to the rating.    &lt;br /&gt;&lt;strong&gt;Appeal&lt;/strong&gt; – This is a 1-10 point value added to the rating for how broad of an audience would possibly be interested in the topic, or the size of the base population.&amp;#160; For example, PowerPivot may indeed be a &amp;quot;Hot Topic&amp;quot;, but if the potential base of users is small the appeal number will be lower.&lt;/p&gt;  &lt;p&gt;I used the above to calculate a simple rating value, and the higher the number the bigger the room.&amp;#160; Certainly not very scientific, but probably good enough for our purposes.&amp;#160; Ultimately there are so many other variables involved, IMO if you try to be any more exacting you run the risk of skewing things too far one way or another.&amp;#160; For example, if I'd actually tried to estimate the number of &amp;quot;BI&amp;quot; users or &amp;quot;Admin&amp;quot; users that would show in lieu of the general &amp;quot;Appeal&amp;quot; number, and my estimates for those populations were off, it could cause trouble.&amp;#160; Now, keep in mind that this approach is really most applicable to a first event, where you really have no idea who is going to show up.&amp;#160; Next time we'll have a much better idea of the different populations here in our region and will use actual numbers as a basis for predicting session popularity.&lt;/p&gt;  &lt;p&gt;Another idea that came up was surveying people in advance to see which sessions or categories they are most interested in.&amp;#160; If we had had more time, and/or if there was a capability to do this built into the &lt;a href="http://www.sqlsaturday.com" target="_blank"&gt;sqlsaturday.com&lt;/a&gt; website, we likely would have made use of it.&amp;#160; As it was, there was just too much else going on with the planning to even think about attempting something like that.&lt;/p&gt;  &lt;p&gt;Below I'll discuss a few of the bigger session surprises in a bit more detail.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Hotter-Than-Expected       &lt;br /&gt;&lt;/font&gt;TSQL      &lt;br /&gt;&lt;/strong&gt;Specifically Mike Walsh's &amp;quot;You Can Improve Your Own SQL Code&amp;quot; and Geoff Hiten's &amp;quot;Bad SQL&amp;quot; both ended up in a smaller 20-seat room, and both could have easily been in a 50-seat room.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SSRS/SSIS&lt;/strong&gt;    &lt;br /&gt;The 25-seat room we had set aside for these BI topics had 46 people crammed into it at one point.&amp;#160; I didn't put this track into one of the larger rooms mainly because I just wasn't quite convinced it would compete with Performance, Virtualization, PowerShell, and other &amp;quot;hot&amp;quot; topics I had in the 50-person rooms.&amp;#160; I also had a lot of people that know telling me that BI is always a smaller crowd at these things, so I went with our only &amp;quot;in between&amp;quot; space, the 25-seat conference room that we knew could handle up to 35 with some standing.&amp;#160; Good call for not putting it in a 20-seat room I guess, but bad call for not giving it a 50-seater.&amp;#160; If you were one of those that had to act like a sardine for an hour, my sincerest apologies, we'll give you more room next time.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Not-So-Hot       &lt;br /&gt;&lt;/font&gt;Virtualization&lt;/strong&gt;    &lt;br /&gt;This one shocked me.&amp;#160; With as much talk (and uncertainty) as there is right now about this topic and SQL Server, I was worried that a 50-seat room would overflow for Aaron Nelson's and Denny Cherry's sessions.&amp;#160; I was way off.&amp;#160; They would have both been fine in one of the 20-seat rooms.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SSDs (Solid State Drives)     &lt;br /&gt;&lt;/strong&gt;Again, I was shocked when Kendal Van Dyke's session wasn't packed.&amp;#160; Great, well-known speaker with what I thought would be a hot topic, but it would have been fine in a small room.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Data Compression&lt;/strong&gt;    &lt;br /&gt;The two sessions we had on this topic were the most lightly attended of all, only 4-5 people in each.&amp;#160; This was in a smaller room already, but I had expected to see more interest since it's new to 2008 and disk space is always a concern, however the Enterprise-only caveat or the other concurrent sessions may have been a big factor.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;Too Much of a Good Thing?&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The &amp;quot;good thing&amp;quot; in this case being PowerShell.&amp;#160; I guesstimated that this would be a hot topic as it has only seemed to gather steam with DBAs over the past year or so, and with remoting and other cool features in Windows Server 2008 R2 and PowerShell 2.0 there's a lot of new stuff to learn about as well.&amp;#160; Turns out I was right… kind of.&amp;#160; Aaron Nelson's first two sessions in a 50-seat room were pretty much full, but Allen White's two sessions immediately following were, well, not so much.&amp;#160; Again, it certainly wasn't Allen as a speaker since he's highly regarded and authoritative on this topic.&amp;#160; However, I did hear from more than one person that two PowerShell sessions probably would have been sufficient for this crowd.&amp;#160; I think Allen was a little disappointed, but being a glass is half full kind of guy, he said it was good practice for TechEd.&amp;#160; Thanks Allen!&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;Premature Raffling&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;One of our biggest mix-ups of the day was the fact that we started the vendor giveaways right after the last session was supposed to end at 5pm.&amp;#160; We still had a session going in the other building that went a bit long, so those attendees and the speaker missed out on the raffles.&amp;#160; To make matters worse, that particular speaker would have won an iTouch had he been present!&amp;#160; Sincere apologies here.&amp;#160; We felt bad, and he did seem a bit upset -- I should have reminded him that he won a WinMo device at our very first SQL Sentry giveaway several years ago, although I'm not sure it would have helped at that point ;)&lt;/p&gt;  &lt;p&gt;Bottom line, ensure all sessions have finished and folks have had time to get to the raffle before you start.&amp;#160; Apologies to anyone else that missed out on this – if you did, send us an email and we'll send you either a SQL Sentry T-shirt, USB 2.0 hub, or iPhone cover.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Where'd the Speaker Go?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We had a particularly well-attended session on IO Performance… only problem is we had no speaker.&amp;#160; I made a quick call over the two-way to registration to see if anyone had seen this particular speaker.&amp;#160; They had not.&amp;#160; I let the attendees know this, and they quickly filed out to look for another session, some with looks of disappointment.&amp;#160; As it turns out, the speaker had cancelled a couple of weeks earlier, but apparently it got lost in the hundreds of other emails that were flying around about the event.&amp;#160; Mistakes like this happen and stuff just gets missed sometimes… which is why there should have been a mechanism in place to catch this.&amp;#160; Had we done a speaker roll check earlier in the day we would have caught it, and probably could have gotten another speaker to fill in, or if not, at least made attendees aware of the cancellation in advance.&amp;#160; We just assumed all speakers were there – not safe with 35 speakers.&lt;/p&gt;  &lt;p&gt;Bear in mind that some speakers may show up later if their first session isn't until later in the day, so you may not want to check roll first thing in the a.m., but either way it's generally an easy matter to at least confirm whether or not the speaker was in town.&amp;#160; In this case they were not.&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;Plan for Cancellations&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sqlchicken.com/" target="_blank"&gt;Jorge Segarra&lt;/a&gt; (aka, &lt;a href="http://www.twitter.com/SQLChicken" target="_blank"&gt;@SQLChicken&lt;/a&gt;), one of the organizers for the Tampa SQLSaturdays told me to expect between 5-7 cancellations.&amp;#160; I thought that sounded high – how can that many speakers commit for something like this, then just cancel?!?&amp;#160; Well, he was right.&amp;#160; There were many different reasons we heard, but what can you do.&amp;#160; Fortunately we had enough speakers with enough sessions to make up for it.&amp;#160; I think the 5-7 backups is a good number to expect for an event of this size, probably less for smaller events.&amp;#160; If you saw a session on the schedule that seemed a bit out of place for the room or other sessions around it, it was probably a backfill from a cancellation. &lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;A Final Word&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;It's important to note that a lot of these scheduling dilemmas were due to the broad range of room sizes we had here.&amp;#160; If your event has 300 people and 4-5 rooms that hold 75 people each you've got a lot more margin for error, and you're probably not going to need to go to this level of detail.&amp;#160; Anyway, I hope some future SQLSaturday planners will find something here that's useful.&amp;#160; If any of you planners have any questions about what we did or why, I'll be glad to help however I can.&amp;#160; Please post them here or shoot me a &lt;a href="http://www.twitter.com/SQLsensei" target="_blank"&gt;DM&lt;/a&gt; or email.&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;A Huge Thanks to All&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I wanted to take this opportunity to thank all of those that helped with the planning and organization for this great event.&amp;#160; First, I wanted to thank Bill Walker, head of the SQL Server CSS team here in Charlotte, and his counterpart Lynne Moore for their immediate and unwavering support.&amp;#160; From day one, they threw all of their considerable resources behind the event and without them it just wouldn't have happened.&amp;#160; All of us were truly amazed at the forces they were able to mobilize so quickly to just get it done.&amp;#160; I also wanted to thank Sergey Pustovit, Chris Skorlinski and Evan Basalik from the SQL Server CSS team for putting on some great sessions, and all of the other CSS members who volunteered their time whose names I don't know – they ran the &amp;quot;SQL Clinic&amp;quot; booth and helped out in innumerable other ways.&lt;/p&gt;  &lt;p&gt;Next I wanted to thank all of the people here at SQL Sentry who volunteered their time, in no particular order -- Peter Shire, Karen Gonzalez, Nick Harshbarger, &lt;a href="http://brooke.blogs.sqlsentry.net/" target="_blank"&gt;Brooke Philpott&lt;/a&gt;, &lt;a href="http://jasonhall.blogs.sqlsentry.net/" target="_blank"&gt;Jason Hall&lt;/a&gt;, Natalie Wieland, Jason Ackerman, Steve Wright, and also Ken Teeter for the great photography. &lt;/p&gt;  &lt;p&gt;Again in no certain order, sincere thanks go out to &lt;a href="http://www.sqlchicken.com/" target="_blank"&gt;Jorge Segarra&lt;/a&gt;, &lt;a href="http://sqlblog.com/blogs/aaron_bertrand/about.aspx" target="_blank"&gt;Aaron Bertrand&lt;/a&gt;, &lt;a href="http://sqlblog.com/blogs/andrew_kelly/" target="_blank"&gt;Andy Kelly&lt;/a&gt;, &lt;a href="http://www.simple-talk.com/author/grant-fritchey/" target="_blank"&gt;Grant Fritchey&lt;/a&gt;, &lt;a href="http://www.thesqlagentman.com/" target="_blank"&gt;Tim Ford&lt;/a&gt;, &lt;a href="http://agilebi.com/CS/blogs/jwelch/" target="_blank"&gt;John Welch&lt;/a&gt;, &lt;a href="http://rafael-salas.blogspot.com/" target="_blank"&gt;Rafael Salas&lt;/a&gt;, &lt;a href="http://weblogs.sqlteam.com/geoffh/" target="_blank"&gt;Geoff Hiten&lt;/a&gt; and of course &lt;a href="http://www.sqlandy.com/" target="_blank"&gt;Andy Warren&lt;/a&gt; for allowing me to pick their brains during the planning process.&amp;#160; Not sure what I would have done without their input and words of wisdom.&lt;/p&gt;  &lt;p&gt;And last but certainly not least, thanks to all of the speakers who came from near and far to be here.&amp;#160; We are greatly appreciative that you decided to take the time to provide such a fantastic educational opportunity for our SQL Server community here in the Carolinas.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/ky-tk6z8WLA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/6073430474410390603/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2010/03/sqlsaturday-charlotte-lessons-learned.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/6073430474410390603?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/6073430474410390603?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/ky-tk6z8WLA/sqlsaturday-charlotte-lessons-learned.html" title="SQLSaturday Charlotte: Lessons Learned" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2010/03/sqlsaturday-charlotte-lessons-learned.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08DQX0-fip7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-6280254684046598867</id><published>2010-02-24T18:53:00.001-05:00</published><updated>2011-03-28T11:24:30.356-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:24:30.356-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Sentry" /><category scheme="http://www.blogger.com/atom/ns#" term="Release Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><title>SQL Sentry v5.5 Need to Know</title><content type="html">&lt;p&gt;SQL Sentry v5.5 Release Candidate 2 was just published to the website.&amp;#160; Although it's a dot release, don't be fooled, v5.5 stands to be a watershed release for us in more ways than one.&amp;#160; Not only does it represent the culmination of many months of hard work by the team, but it contains what have easily been the most heavily requested enterprise features since the original release of Performance Advisor for SQL Server in 2008:&amp;#160; the &lt;strong&gt;&lt;a href="#globalstatus"&gt;Global Server Status View&lt;/a&gt;&lt;/strong&gt; and &lt;a href="#perfrpt"&gt;&lt;strong&gt;Performance Reporting&lt;/strong&gt;&lt;/a&gt;.&amp;#160; There are also many very cool secondary features such as &lt;strong&gt;&lt;a href="#misalignment"&gt;Automatic Disk Misalignment Detection&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="#mountpoints"&gt;Mount Point Support&lt;/a&gt;&lt;/strong&gt;, as well as a variety of &lt;a href="#perfopt"&gt;performance optimizations&lt;/a&gt;.&amp;#160; Read on for more details…&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;strong&gt;&lt;a name="globalstatus"&gt;Global Server Status View&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Finally, you can view key performance metrics for more than one server at a time from the SQL Sentry Console!&amp;#160; You simply right-click the Devices root node, or any device group node, and select the &amp;quot;Open Performance Advisor Overview&amp;quot; context item:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="open_pa_overview" border="0" alt="open_pa_overview" src="http://lh4.ggpht.com/_0vL9rwa06l4/S4W7vZDdB9I/AAAAAAAAAPw/cMu-5kdn2vo/open_pa_overview%5B5%5D.png?imgmax=800" width="503" height="137" /&gt; &lt;/p&gt;  &lt;p&gt;There are a couple of different ways to look at the data.&amp;#160; The default is Windows metrics at the top level:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/S4W7v0Fh8SI/AAAAAAAAAP0/T0lZxikXbuw/s1600-h/overview_windows%5B4%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="overview_windows" border="0" alt="overview_windows" src="http://lh5.ggpht.com/_0vL9rwa06l4/S4W7wALz11I/AAAAAAAAAP4/CLDLDms_bUE/overview_windows_thumb%5B2%5D.png?imgmax=800" width="498" height="143" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;From there you drill in to see metrics for each SQL Server or SSAS instance on the server.&amp;#160; Just like on the PA dashboard, we also show how much Windows resources are being consumed by the SQL Server and SSAS processes for network, CPU, and memory:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/S4W7wpBLcWI/AAAAAAAAAP8/KMmLk5GZmFE/s1600-h/overview_windows_instance%5B7%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="overview_windows_instance" border="0" alt="overview_windows_instance" src="http://lh3.ggpht.com/_0vL9rwa06l4/S4W7wiXvVFI/AAAAAAAAAQA/l2PXTkR1Wmo/overview_windows_instance_thumb%5B5%5D.png?imgmax=800" width="502" height="155" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The level below that shows the actual instance metrics, which will of course change depending on whether you’re looking at SQL Server or SSAS.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/S4W7w9Z_KDI/AAAAAAAAAQE/RMNMODcQnpM/s1600-h/overview_windows_instance_expanded%5B6%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="overview_windows_instance_expanded" border="0" alt="overview_windows_instance_expanded" src="http://lh6.ggpht.com/_0vL9rwa06l4/S4W7xHBU4ZI/AAAAAAAAAQI/0PswCZB-Ftk/overview_windows_instance_expanded_thumb%5B4%5D.png?imgmax=800" width="511" height="179" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you only want to see SQL Server and/or SSAS metrics without the Windows, simply uncheck Windows in the dropdown at top.&amp;#160; This gives you a very clean look across all SQL/SSAS instances in your environment:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/S4W7xTJcUaI/AAAAAAAAAQM/R2Py1C0f-rw/s1600-h/overview_instances%5B6%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="overview_instances" border="0" alt="overview_instances" src="http://lh4.ggpht.com/_0vL9rwa06l4/S4W7xiCo6LI/AAAAAAAAAQQ/ghFlHY9NTA0/overview_instances_thumb%5B4%5D.png?imgmax=800" width="513" height="155" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As shown in the shots above, if a performance metric exceeds commonly accepted preset thresholds (such as Page life expectancy &amp;lt; 300 secs), the cell and associated server name will turn red to highlight it.&amp;#160; And to answer the question you are about to ask… no, there is currently no way to customize this, but this is coming ;-)&amp;#160; For this release the primary focus was getting the alarming framework in place with some basic presets.&lt;/p&gt;  &lt;p&gt;However, to hold you over until, you &lt;em&gt;can&lt;/em&gt; set custom filters for any column or combination of columns.&amp;#160; For example, if you want to see only servers with &amp;quot;Transactions/sec &amp;gt; 100 OR Blocks &amp;gt; 0 OR Deadlocks &amp;gt; 0&amp;quot;, simply click the column header and set a filter:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/S4W7x7DbkkI/AAAAAAAAAQU/pPJzX3ezC_8/s1600-h/overview_filter_set%5B5%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="overview_filter_set" border="0" alt="overview_filter_set" src="http://lh3.ggpht.com/_0vL9rwa06l4/S4W7ydyklnI/AAAAAAAAAQY/h3Jj3ZPRDcQ/overview_filter_set_thumb%5B3%5D.png?imgmax=800" width="502" height="251" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As the view auto-refreshes and metrics change you’ll see server rows pop in and out.&amp;#160; This way you can stay focused on the servers requiring your immediate attention, based on limits you’ve defined.&amp;#160; Here's what a filter looks like once set:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/S4W7zM5JZoI/AAAAAAAAAQc/grMXGwyL3kQ/s1600-h/overview_filter_multi%5B6%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="overview_filter_multi" border="0" alt="overview_filter_multi" src="http://lh3.ggpht.com/_0vL9rwa06l4/S4W7zQK04WI/AAAAAAAAAQg/NmqKa8if7pY/overview_filter_multi_thumb%5B4%5D.png?imgmax=800" width="516" height="144" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note there are now only two visible servers, the rest are hidden by the filter.&lt;/p&gt;  &lt;p&gt;When you combine this with the ability to adjust the interval displayed, filtering becomes an even more powerful feature:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="overview_intervals" border="0" alt="overview_intervals" src="http://lh3.ggpht.com/_0vL9rwa06l4/S4W7zmUnTQI/AAAAAAAAAQk/NPzySyuLYqI/overview_intervals%5B4%5D.png?imgmax=800" width="502" height="191" /&gt; &lt;/p&gt;  &lt;p&gt;Let me elaborate.&amp;#160; By default the grid shows the last raw sample value collected, but since many metrics are sampled every 10 seconds there may be temporary spikes that you want to ignore.&amp;#160; You may not want the filtered server list changing every refresh.&amp;#160; If you simply increase the interval to anything other than &amp;quot;Last Sample&amp;quot; -- say &amp;quot;10 Minutes&amp;quot; -- the metrics displayed will be last calculated average over that interval.&amp;#160; This can effectively smooth out many spikes, and thus prevent a lot of volatility with the server list.&lt;/p&gt;  &lt;p&gt;Even without the use of filters, this is a great feature for getting quick snapshot of how all servers have been performing over different ranges, up to the past 3 days.&lt;/p&gt;  &lt;p&gt;One last item on the global view -- if you don’t care for the default dark skin, you can change to a standard light grid color using a new user preference:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/S4W70BVdeDI/AAAAAAAAAQo/ER1mJU8I2EE/s1600-h/overview_light_skin%5B7%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="overview_light_skin" border="0" alt="overview_light_skin" src="http://lh4.ggpht.com/_0vL9rwa06l4/S4W70c51VGI/AAAAAAAAAQs/jxdiUypzLZ8/overview_light_skin_thumb%5B4%5D.png?imgmax=800" width="508" height="222" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;a name="perfrpt"&gt;Performance Reporting&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There has always been an enormous amount of valuable performance data contained in the SQLSentry database, but aside from the PA dashboard there really wasn’t an easy way to get at it.&amp;#160; With the new SSRS-based performance reporting, now there is!&amp;#160; To see all of the new reports, select &amp;quot;Reports –&amp;gt; Performance Advisor&amp;quot; from the menu bar:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="pa_reporting" border="0" alt="pa_reporting" src="http://lh5.ggpht.com/_0vL9rwa06l4/S4W70rAFWxI/AAAAAAAAAQw/92E2M4fBa1I/pa_reporting%5B6%5D.png?imgmax=800" width="503" height="322" /&gt; &lt;/p&gt;  &lt;p&gt;Here are a couple of quick shots of the &amp;quot;Waits Analysis&amp;quot; and &amp;quot;File Utilization by Database&amp;quot; reports:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_0vL9rwa06l4/S4XFNyNOwwI/AAAAAAAAARo/RNatG4fW_Ds/s1600-h/reports_wait_stats%5B15%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="reports_wait_stats" border="0" alt="reports_wait_stats" src="http://lh4.ggpht.com/_0vL9rwa06l4/S4XFOCreQZI/AAAAAAAAARs/UAVWqWw208U/reports_wait_stats_thumb%5B11%5D.png?imgmax=800" width="365" height="263" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/S4W71S9_7wI/AAAAAAAAAQ8/4oXoFEoanV0/s1600-h/reports_file_database%5B9%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="reports_file_database" border="0" alt="reports_file_database" src="http://lh3.ggpht.com/_0vL9rwa06l4/S4W71rGL1-I/AAAAAAAAARA/8rEpcov3KVk/reports_file_database_thumb%5B7%5D.png?imgmax=800" width="365" height="258" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Not only do we have a great list of the most commonly requested reports, but we have two ways to generate completely customized reports – the &lt;strong&gt;Performance Counter History&lt;/strong&gt; report, which lets you select any combination of servers, counters and instances:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/S4W71_mfMTI/AAAAAAAAARE/sSzQHGO5U0c/s1600-h/reporting_params_counter_hist%5B5%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="reporting_params_counter_hist" border="0" alt="reporting_params_counter_hist" src="http://lh5.ggpht.com/_0vL9rwa06l4/S4W72IHLZXI/AAAAAAAAARI/Tn51UGKT-so/reporting_params_counter_hist_thumb%5B3%5D.png?imgmax=800" width="455" height="362" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_0vL9rwa06l4/S4W72ZXOGDI/AAAAAAAAARM/ALpfvMdy5wQ/s1600-h/reporting_custom%5B4%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="reporting_custom" border="0" alt="reporting_custom" src="http://lh5.ggpht.com/_0vL9rwa06l4/S4W72utRmmI/AAAAAAAAARQ/th7t1asvI-w/reporting_custom_thumb%5B2%5D.png?imgmax=800" width="454" height="249" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;…as well as the &lt;strong&gt;Performance Counter Date Range Comparison&lt;/strong&gt; report, which lets you do pretty much the same thing, but using two different date ranges.&lt;/p&gt;  &lt;p&gt;One of the coolest aspects of our custom reports is that you’re not limited to only standard Windows perf counters – you can report on &lt;em&gt;any&lt;/em&gt; of the performance data we collect, including data from DMV’s, WMI, and even internally calculated metrics like Waits by Category!&amp;#160; And just like the PA dashboard, you can select &lt;em&gt;any&lt;/em&gt; date range, from 3 minutes to 3 years… and it won't kill your server in the process.&amp;#160; A lot of effort has been put into ensuring that the reports generate quickly and will minimally impact the performance of the SQLSentry database.&lt;/p&gt;  &lt;p&gt;You can save any of the custom reports by clicking &amp;quot;Save&amp;quot; on the parameter selection window, as well as deploy the reports to any SSRS instance using the &amp;quot;Deploy Reports&amp;quot; menu item.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Disk Activity View Enhancements&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We’ve introduced two significant enhancements to our patent-pending Disk Activity view:&amp;#160; &lt;strong&gt;Auto-Misalignment Detection&lt;/strong&gt; and &lt;strong&gt;Mount Point&lt;/strong&gt; support.&amp;#160; Which you will like best will depend a lot on your environment.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a name="misalignment"&gt;Automatic Disk Misalignment Detection&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As you probably know, misalignment is no longer an issue with &lt;em&gt;new&lt;/em&gt; Windows Server 2008 installs since it uses a default offset of 1024KB.&amp;#160; However, what we have found is that many servers out there are either still running Windows Server 2003, or were upgraded from Server 2003 to 2008.&amp;#160; As a result this is still a big issue in many environments, and we’ve just made it dramatically easier to detect – you simply watch a server with PA, then look at the Disk Activity screen.&amp;#160; If the logical disk has a red background, it means the offset is suspect:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/S4W720KXXfI/AAAAAAAAARU/D3ajo7jsDus/s1600-h/disk_misalignment%5B4%5D.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="disk_misalignment" border="0" alt="disk_misalignment" src="http://lh5.ggpht.com/_0vL9rwa06l4/S4W73GyfLCI/AAAAAAAAARY/tzPbXyUlDb4/disk_misalignment_thumb%5B2%5D.png?imgmax=800" width="518" height="203" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;PA shows you exactly what the offset is in the tooltip for the logical disk.&amp;#160; I wish I could say we will then auto-fix it for you, but you probably realize that would not be possible ;-)&amp;#160; However, on this same screen you can clearly see whether or not latency is actually a problem on the misaligned disk, and from there determine whether or not you should actually go through the process of moving database files and rebuilding the partition with a proper offset.&amp;#160; Here's another server where all partitions are misaligned, and where the disks are experiencing pretty severe latency: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/S4xByIOPFYI/AAAAAAAAASE/j5Kgmk_aSCI/s1600-h/disk_misalignment_multi2%5B17%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="disk_misalignment_multi2" border="0" alt="disk_misalignment_multi2" src="http://lh3.ggpht.com/_0vL9rwa06l4/S4xByiPs-yI/AAAAAAAAASI/C_YwzhgVRjI/disk_misalignment_multi2_thumb%5B11%5D.png?imgmax=800" width="481" height="349" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;BTW, if you haven't seen this screen before, all of those color-coded bars are database files -- data files and transaction logs.&amp;#160; Same color means same database, diagonal hash marks mean transaction log.&amp;#160; Bottom connector pipe for each disk is writes, top pipe is reads.&amp;#160; Wide red fill in the pipes means high latency, thin green means IO activity but acceptable latency.&lt;/p&gt;  &lt;p&gt;For more details on the performance implications of disk misalignment and what you can do about it, check out Microsoft's &lt;a href="http://msdn.microsoft.com/en-us/library/dd758814.aspx" target="_blank"&gt;Disk Partition Alignment Best Practices for SQL Server&lt;/a&gt; whitepaper and &lt;a href="http://www.sqlskills.com/BLOGS/PAUL/post/Using-diskpart-to-check-disk-partition-alignment.aspx" target="_blank"&gt;Paul Randal's blog post&lt;/a&gt; on this topic.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a name="mountpoints"&gt;Mount Point Support&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Another common request that we’ve been getting more and more over the past year or so is for mount point support, in large part because of the explosion of VMs and associated LUNs in the environment.&amp;#160; Now when you look at the Disk Activity screen, you’ll see mount points displayed alongside all other disks:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="mount_points" border="0" alt="mount_points" src="http://lh4.ggpht.com/_0vL9rwa06l4/S4W73-I_jZI/AAAAAAAAARg/0NNq0m_lH4Y/mount_points%5B10%5D.png?imgmax=800" width="456" height="287" /&gt; &lt;/p&gt;  &lt;p&gt;PA shows the same latency and volume information for mount points and database files on mount points as it always has for other disk types.&lt;/p&gt;  &lt;p&gt;Technically these disk-related changes were no small feat to pull off, but once again the dev team rose to the occasion!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;a name="perfopt"&gt;Performance Optimizations&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We are always looking for new ways to increase the performance of SQL Sentry and minimize our footprint in the environment… a footprint, I might add, that is already dramatically lower than any competitive product.&amp;#160; (We will actually be &lt;em&gt;proving&lt;/em&gt; this very soon… stay tuned.)&amp;#160; However, in this release we’ve made some changes that would be considered significant, even by us.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Redesigned Threading Model&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Two changes have been made to the threading model.&amp;#160; Previously, dedicated threads were spawned for each monitored server, and each would consume memory, so the more servers you were monitoring, the more memory would be used by the SQL Sentry Server service process (you need one of these services for approximately every 100 or so monitored servers).&amp;#160; A new thread pooling system is now in place that eliminates most of these dedicated threads, dramatically reducing the process’ memory footprint and increasing scalability at the same time.&lt;/p&gt;  &lt;p&gt;Next, for some of the collection subsystems we’ve moved from a fork/join threading model to more of an asynchronous work queue model.&amp;#160; Fork/join threading is similar to parallelism with SQL Server.&amp;#160; There are some benefits to this approach, but a primary drawback is that the process can only be as fast as the slowest thread.&amp;#160; The new model effectively eliminates the possibility of collection delays caused by offline servers, network issues, etc., that we’ve sometimes seen affect other critical SQL Sentry processes like chaining and alerting.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Reduced Plan Cache Footprint&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Prior to v5.5, ad hoc SQL was being used in some places by both the SQL Sentry Console and Server, and in certain scenarios over time this could lead to plan cache bloat and some buffer pressure on the server where the SQLSentry database was installed.&amp;#160; In v5.5 we’ve eliminated almost all uses of ad hoc SQL, which dramatically reduces the plan cache footprint of the SQLSentry database.&amp;#160; This will not impact monitored servers, only the server where the SQLSentry database resides (unless of course it is monitored as well ;-)&amp;#160; After you upgrade, I recommend that you run DBCC FREEPROCCACHE on that server so the buffer can immediately reclaim any of the space previously used for the ad hoc cache.&lt;/p&gt;  &lt;p&gt;I really hope you enjoy using v5.5.&amp;#160; New users can &lt;a href="http://www.sqlsentry.net/download-trial/trial.asp" target="_blank"&gt;get bits here&lt;/a&gt;, existing customers please &lt;a href="https://www.sqlsentry.net/Login.aspx" target="_blank"&gt;login to your portal account&lt;/a&gt;.&amp;#160; As always, we fully support upgrading to this build from any earlier SQL Sentry version, and from this build to the final release of v5.5.&amp;#160; Thanks to everyone who has shared their ideas with us, our great beta testers, and of course to the entire SQL Sentry team for your efforts in finally making these great new features a reality!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/JY-srgSp20A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/6280254684046598867/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2010/02/sql-sentry-v55-need-to-know.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/6280254684046598867?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/6280254684046598867?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/JY-srgSp20A/sql-sentry-v55-need-to-know.html" title="SQL Sentry v5.5 Need to Know" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_0vL9rwa06l4/S4W7vZDdB9I/AAAAAAAAAPw/cMu-5kdn2vo/s72-c/open_pa_overview%5B5%5D.png?imgmax=800" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2010/02/sql-sentry-v55-need-to-know.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08DQX0-fyp7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-8570589095089067362</id><published>2010-02-05T17:50:00.006-05:00</published><updated>2011-03-28T11:24:30.357-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:24:30.357-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows File Cache" /><category scheme="http://www.blogger.com/atom/ns#" term="Analysis Services" /><category scheme="http://www.blogger.com/atom/ns#" term="SSAS Memory" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Sentry" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><title>Analysis Services and the Windows File System Cache</title><content type="html">&lt;p&gt;In &lt;a href="http://greg.blogs.sqlsentry.net/2009/06/analysis-services-memory-limits-part-ii.html"&gt;my last&lt;/a&gt; post I revealed a problem one of our customers encountered when SSAS memory limits were inadvertently set to KB instead of bytes, leading to abnormally low limits and some pretty serious performance issues.&amp;#160; I alluded to a “saving grace” that prevented things from being much worse than they actually were, and that’s what I’ll cover in this post.&lt;/p&gt;  &lt;p&gt;A little background first, or rather an expansion of something I touched on in &lt;a href="http://greg.blogs.sqlsentry.net/2009/06/analysis-services-memory-limits.html"&gt;my original post&lt;/a&gt; -- unlike the SQL Server Database Engine, much of the SSAS data can be resident in physical memory by virtue of the Windows file system cache.&amp;#160; This is simply because SSAS databases consist of a collection of Windows files of various types, and SSAS does not directly manage memory/disk access to those files using Windows APIs as complex memory managers like SQL Server do.&lt;/p&gt;  &lt;p&gt;This means that even if the SSAS internal caches are effectively non-existent, you can still have a significant amount of raw SSAS file data loaded into RAM which will not show up as part of the SSAS process memory, or in any way be governed by the SSAS memory limits.&amp;#160; This was the saving grace here.&amp;#160; If the storage engine actually had to read the files from disk for every query, performance would have been significantly worse than it already was.&lt;/p&gt;  &lt;p&gt;I’m going to use the some &lt;em&gt;Performance Advisor for Analysis Services &lt;/em&gt;dashboard charts to fully illustrate this phenomena.&amp;#160; Since the customer’s server has 32GB of RAM, I’ve blown up the System Memory chart so it’s a little easier to see what’s going on:&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="memory_file_cache" border="0" alt="memory_file_cache" src="http://lh4.ggpht.com/_0vL9rwa06l4/S32yZEn-w7I/AAAAAAAAAOw/ttWLeZUu7V0/memory_file_cache%5B1%5D.png?imgmax=800" width="489" height="311" /&gt; &lt;/p&gt;  &lt;p&gt;The thin grey line shows the physical memory used by the file cache (about 700MB), and the even thinner orange line shows the memory used by the SSAS instance with invalid memory limits (about 450MB).&amp;#160; The large teal-colored area is memory used by a SQL Server instance on the same server.&lt;/p&gt;  &lt;p&gt;Assuming there wasn’t much file serving happening on this server, most of the file cache is likely comprised of SSAS database files.&amp;#160; Without file serving activity, usually you will not see the file cache get this large, even though on 64 bit machines like this one it is capable of growing to use up all available memory.&amp;#160; (On 32 bit systems the max file cache size is about 1 GB.)&amp;#160; Read more about the Windows file cache &lt;a href="http://blogs.msdn.com/ntdebugging/archive/2007/11/27/too-much-cache.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Ok, interesting theory, but how can we &lt;strong&gt;confirm&lt;/strong&gt; that SSAS was able to get it’s data from the file cache?&amp;#160; Fortunately the &lt;strong&gt;SSAS Storage\File Read/Write&lt;/strong&gt; charts make this is pretty easy:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="memory_file_read" border="0" alt="memory_file_read" src="http://lh3.ggpht.com/_0vL9rwa06l4/S2ygoom0UUI/AAAAAAAAAO0/rtHrpK1FyB4/memory_file_read.png?imgmax=800" width="496" height="196" /&gt;&lt;/p&gt;  &lt;p&gt;The&lt;strong&gt; File Queries&lt;/strong&gt; chart on the right shows SSAS is querying database files at a rate of about 20 per sec, and the &lt;strong&gt;File Read KB&lt;/strong&gt; chart shows that even though there is a lot of file read activity on the system (about 40MB per sec), almost none of it is coming off of disk.&amp;#160; This is clear because the dashed orange &lt;strong&gt;Total Disk&lt;/strong&gt; line is flat, and there are also no Windows read faults at that time:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="memory_read_faults" border="0" alt="memory_read_faults" src="http://lh5.ggpht.com/_0vL9rwa06l4/S2ygpLzAJGI/AAAAAAAAANk/9Q34d-IL4nc/memory_read_faults%5B3%5D.png?imgmax=800" width="243" height="189" /&gt;&lt;/p&gt;  &lt;p&gt;Anytime SSAS files are read from disk into physical memory, you should see hard faults.&amp;#160; To better demonstrate this, take a look at a similar chart for a different environment:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="memory_file_read_high_disk" border="0" alt="memory_file_read_high_disk" src="http://lh3.ggpht.com/_0vL9rwa06l4/S2ygpsnoM7I/AAAAAAAAAO4/GBoYqaZliY8/memory_file_read_high_disk%5B1%5D.png?imgmax=800" width="498" height="195" /&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The off-white &lt;strong&gt;Total System&lt;/strong&gt; series shows &lt;strong&gt;ALL&lt;/strong&gt; file read activity flowing through the Windows system (both from memory and disk), the light orange &lt;strong&gt;Total SSAS&lt;/strong&gt; series shows the portion of total read activity directly related to the SSAS process (barely visible here), and the blue series shows the portion of SSAS read activity from data files.&amp;#160; The dashed &lt;strong&gt;Total Disk&lt;/strong&gt; read line is overlaid on top of the stacked area chart so you can quickly see how everything correlates.&amp;#160; It’s clear that a sizable chunk of the SSAS data file reads are coming off disk.&amp;#160; Also note how this time we have significant Windows read faults:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="memory_file_read_high_faults" border="0" alt="memory_file_read_high_faults" src="http://lh3.ggpht.com/_0vL9rwa06l4/S2ygp82LM-I/AAAAAAAAANs/Emq-ndRug1Q/memory_file_read_high_faults%5B2%5D.png?imgmax=800" width="260" height="203" /&gt;&lt;/p&gt;  &lt;p&gt;To get a different look at the data as well as the actual file cache hit ratios, if we click on a point on the chart in the middle of the read activity spike, then click the Sample button on the toolbar it loads up the data for that specific point in time:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="memory_file_read_high_disk_sample" border="0" alt="memory_file_read_high_disk_sample" src="http://lh3.ggpht.com/_0vL9rwa06l4/S2ygqTUlY5I/AAAAAAAAAPA/q4lvUBIZLzc/memory_file_read_high_disk_sample%5B1%5D.png?imgmax=800" width="489" height="196" /&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What this shows us is that approximately 81% of the file read activity for this sample came from the file system cache.&amp;#160; This is not bad, but in general you always want &lt;strong&gt;Total Disk&lt;/strong&gt; to be at or near zero, which will be the case whenever SSAS is pulling data from either its internal caches &lt;strong&gt;or&lt;/strong&gt; the file system cache.&lt;/p&gt;  &lt;p&gt;How can you tell whether the data is coming from SSAS’s internal caches versus the file cache?&amp;#160; That’s easy -– you won’t see any storage engine file queries or associated file read activity at all, and the SSAS cache hit ratios (visible in sample mode, or when using the new &lt;em&gt;Performance Advisor v5.5&lt;/em&gt; reporting) will be high, such as in the shot below where the measure group cache hit ratio is 99%:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="memory_high_ssas_cache_hit_ratios" border="0" alt="memory_high_ssas_cache_hit_ratios" src="http://lh6.ggpht.com/_0vL9rwa06l4/S2ygrHH1CGI/AAAAAAAAAPE/l9RfoW_PRFg/memory_high_ssas_cache_hit_ratios%5B1%5D.png?imgmax=800" width="486" height="371" /&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In addition to the cache hit ratio meters, there is also a visual hit ratio indicator right on the column chart -– the “fullness” of the columns reflect the hit ratios.&amp;#160; The more gray fill you see between he column hash lines, the higher the hit ratio:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="memory_high_ssas_cache_hit_ratios_low" border="0" alt="memory_high_ssas_cache_hit_ratios_low" src="http://lh5.ggpht.com/_0vL9rwa06l4/S2ygrlWKJkI/AAAAAAAAAPI/TwXFiYtEDaQ/memory_high_ssas_cache_hit_ratios_low.png?imgmax=800" width="492" height="231" /&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Note that the measure group column is only about half full, reflecting the 52% hit ratio.&amp;#160; The calculation and flat cache hit ratios are both zero, so those columns are empty.&amp;#160; Clever, eh? ;-)&amp;#160; Perhaps even cleverer, on the measure group column there are two types of hash lines, horizontal and diagonal -- the horizontal hashes represent direct cache hits, while diagonal hashes represent filtered hits.&amp;#160; These occur when existing cache entries have to be filtered first to obtain the desired data, and are slightly higher overhead than direct hits.&lt;/p&gt;  &lt;p&gt;In an ideal world, aside from when the cache is first warming up, you don’t want to see SSAS file queries at all, except perhaps for the occasional aggregation hit, which is also shown on the &lt;strong&gt;File Queries&lt;/strong&gt; chart.&amp;#160; Bottom line, if you see file queries there were cache misses.&amp;#160; Here’s a quick custom Performance Counter History report using &lt;em&gt;Performance Advisor v5.5&lt;/em&gt; which shows this clearly :&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_0vL9rwa06l4/S3AsPEorSTI/AAAAAAAAAPM/zhn9Qr-_HRE/s1600-h/memory_hit_ratio_report%5B1%5D.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="memory_hit_ratio_report" border="0" alt="memory_hit_ratio_report" src="http://lh5.ggpht.com/_0vL9rwa06l4/S3AsP7d5Y5I/AAAAAAAAAPY/3KO1mXusvH8/memory_hit_ratio_report_thumb.png?imgmax=800" width="493" height="330" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Even so, the Windows file cache hit ratio may be 100% if all of the referenced files were in the file cache.&amp;#160; But in that scenario, as we saw in the &lt;a href="http://greg.blogs.sqlsentry.net/2009/06/analysis-services-memory-limits-part-ii.html"&gt;last post&lt;/a&gt;, even though performance will be better than if they were read from disk, it will not be nearly as good as if the data had been found in the SSAS cache because of the additional overhead involved when the storage engine retrieves file data from Windows.&lt;/p&gt;  &lt;p&gt;If you want to see how your Analysis Services system is performing in this regard, you can download a fully functional 15-day trial of &lt;strong&gt;&lt;em&gt;Performance Advisor for Analysis Services&lt;/em&gt;&lt;/strong&gt; &lt;a href="http://www.sqlsentry.net/download-trial/trial.asp" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; Cheers.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/hhgbxBnEp2g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/8570589095089067362/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2010/02/analysis-services-and-windows-file.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/8570589095089067362?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/8570589095089067362?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/hhgbxBnEp2g/analysis-services-and-windows-file.html" title="Analysis Services and the Windows File System Cache" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_0vL9rwa06l4/S32yZEn-w7I/AAAAAAAAAOw/ttWLeZUu7V0/s72-c/memory_file_cache%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2010/02/analysis-services-and-windows-file.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8CR3c4eCp7ImA9WhRUFk0.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-1701816919864748378</id><published>2009-06-19T18:33:00.001-04:00</published><updated>2012-01-26T14:41:06.930-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T14:41:06.930-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Analysis Services" /><category scheme="http://www.blogger.com/atom/ns#" term="SSAS Memory" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Sentry" /><category scheme="http://www.blogger.com/atom/ns#" term="Memory Limits" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><title>Analysis Services Memory Limits, Part II</title><content type="html">&lt;br /&gt;
In my &lt;a href="http://greg.blogs.sqlsentry.net/2009/06/analysis-services-memory-limits.html" target="_blank"&gt;last post&lt;/a&gt; I discussed some of the basics of SSAS memory management -- how it utilizes limits to control the amount of memory consumed by the SSAS process, and how the memory limits are set as a percentage of the total physical memory.&amp;nbsp; I also mentioned that we had a beta tester who reported what they thought was an &lt;a href="http://lh6.ggpht.com/_0vL9rwa06l4/SjZ1I3Ekt7I/AAAAAAAAAK4/NZyKsqEuy_c/mem_cleaner_anomaly%5B7%5D.png?imgmax=800" target="_blank"&gt;odd graphical anomaly&lt;/a&gt; on the Performance Advisor for Analysis Services “Memory Usage” chart, and I offered up a challenge to see if anyone could explain it.&amp;nbsp; (Details about the winner at bottom.)&lt;br /&gt;
&lt;br /&gt;
I’ll begin with an admission -– I intentionally left out a rather critical aspect of memory limit configuration.&amp;nbsp; The omission was that, like several other SSAS settings, once the configured value goes over 100% it changes to an explicit setting.&amp;nbsp; In the case of memory limits the explicit setting is translated as bytes.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, for some reason this is not covered in the SSAS documentation… however, it is covered elsewhere, including this doc:&amp;nbsp;&lt;a href="http://download.microsoft.com/download/4/7/a/47a548b9-249e-484c-abd7-29f31282b04d/SSASProperties.doc" target="_blank"&gt;SQL Server 2005 Analysis Services (SSAS) Server Properties&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
In this case, the first thing we had the tester check was the actual configured setting values, as well as the values being returned from the associated Windows performance counters as a sanity check.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Here is what they sent back:&lt;br /&gt;
&lt;strong&gt;Memory Limit Setting –&amp;gt; Configured Value (bytes) –&amp;gt; Perf Counter Value (KB)      &lt;/strong&gt;Memory\LowMemoryLimit –&amp;gt; 2097152 –&amp;gt; 8192     &lt;br /&gt;
Memory\TotalMemoryLimit –&amp;gt; 13531488 –&amp;gt; 13312&lt;br /&gt;
&lt;br /&gt;
Hopefully the problem is starting to become clearer.&amp;nbsp; Apparently the configuring user had tried to use an explicit amount of memory, however &lt;strong&gt;they had inadvertently entered kilobytes (KB) instead of bytes!&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
These values translated to approx 8MB and 13MB for the Low and Total limits respectively, which explains what they were seeing on the chart.&amp;nbsp; It was no graphical anomaly.&amp;nbsp; (Note that even though the configured Low value should have been approx 2MB, apparently the minimum SSAS will use is 8MB, which explains the associated perf counter value of 8192 KB.)&lt;br /&gt;
&lt;br /&gt;
Ok, so we figured out what was going on on the chart, but what about the impact these abnormally low settings would have on SSAS performance?&amp;nbsp; As I mentioned before, this client had had many problems with SSAS performance, and as a result had engaged Microsoft to come in and help.&lt;br /&gt;
Here’s where things get very interesting.&amp;nbsp; First, take a look at the dashboard shot the client sent to us, which shows the memory issue along with the execution of a single MDX query that ran for a couple of minutes:&lt;br /&gt;
&lt;div align="right"&gt;
&lt;a href="http://www.sqlsentry.net/images/blogs/greg/memory_limit_issue.png" target="_blank"&gt;&lt;img alt="memory_limit_issue" border="0" height="373" src="http://lh6.ggpht.com/_0vL9rwa06l4/Sj5Xky7EvfI/AAAAAAAAANE/T1VHVU23EXY/memory_limit_issue%5B11%5D.png?imgmax=800" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="memory_limit_issue" width="488" /&gt;&lt;/a&gt;&lt;strong&gt;(click to enlarge)&lt;/strong&gt;&lt;/div&gt;
Here’s a closeup of the Memory Usage chart:&lt;br /&gt;
&lt;img alt="mem_cleaner_anomaly" border="0" height="256" src="http://lh4.ggpht.com/_0vL9rwa06l4/SjwSNDyDEtI/AAAAAAAAALI/sWWxGIEMXJ0/mem_cleaner_anomaly%5B6%5D.png?imgmax=800" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="mem_cleaner_anomaly" width="353" /&gt;&lt;br /&gt;
What’s wrong with this picture?&amp;nbsp; Well, a couple of things.&amp;nbsp; First, SSAS memory usage is almost completely flat, and is almost entirely nonshrinkable.&amp;nbsp; Typically SSAS memory will grow and shrink continuously as memory is allocated and deallocated for querying and processing operations, and will stabilize with a much larger base proportion of shrinkable memory than we see here.&lt;br /&gt;
To illustrate this better, on a test SSAS instance I configured the limits artificially low and let it run for a while, then increased the limits much higher so that there was no memory pressure:&lt;br /&gt;
&lt;img alt="mem_cleaner_increased_limits" border="0" height="271" src="http://lh4.ggpht.com/_0vL9rwa06l4/SjwSNjMtBCI/AAAAAAAAALM/Pq9tSciOcGQ/mem_cleaner_increased_limits%5B5%5D.png?imgmax=800" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="mem_cleaner_increased_limits" width="340" /&gt;&lt;br /&gt;
The same system, zoomed into a 10 minute range:&lt;br /&gt;
&lt;img alt="mem_cleaner_no_pressure" border="0" height="253" src="http://lh4.ggpht.com/_0vL9rwa06l4/SjwSODdrljI/AAAAAAAAALQ/kgTHeQUMI0Y/mem_cleaner_no_pressure%5B9%5D.png?imgmax=800" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="mem_cleaner_no_pressure" width="344" /&gt;&lt;br /&gt;
What the flat memory line means is that the unusually low limits are effectively preventing SSAS from loading any data into either of its caches -- the Formula Engine (FE) cache (aka, “query engine cache”) or Storage Engine (SE) cache.&lt;br /&gt;
&lt;br /&gt;
This is further confirmed by looking at a few other charts.&amp;nbsp; Notice the &lt;strong&gt;Cache Activity&lt;/strong&gt; chart shows almost continual evictions and memory shrinkage while the query is running:&lt;br /&gt;
&lt;img alt="cache_activity" border="0" height="236" src="http://lh4.ggpht.com/_0vL9rwa06l4/SjwSOkwdhqI/AAAAAAAAALU/DOMqvI_MGgs/cache_activity%5B6%5D.png?imgmax=800" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="cache_activity" width="323" /&gt;&lt;br /&gt;
This is not normal!&amp;nbsp; You rarely want to see these values above zero, because when you do it means that memory cleaner threads have kicked in because of internal memory pressure and are moving data out of memory.&amp;nbsp; In this case the data is being moved out as fast as it is moved in.&lt;br /&gt;
Also have a look at the &lt;strong&gt;Avg Time&lt;/strong&gt; chart:&lt;br /&gt;
&lt;img alt="avg_time" border="0" height="231" src="http://lh6.ggpht.com/_0vL9rwa06l4/SjwSPNalkSI/AAAAAAAAALY/ytZeM4PPJv4/avg_time%5B4%5D.png?imgmax=800" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="avg_time" width="323" /&gt;&lt;br /&gt;
What this shows is that SSAS is spending almost all of it’s time on non-cached storage engine operations (SE non-cached), which is where you typically want it to spend the &lt;strong&gt;least&lt;/strong&gt; amount of time.&amp;nbsp; This means that every time a query needs data it’s unable to find it in the FE cache, so the formula engine issues requests to the storage engine, which is unable to find the data in its cache, so it has to go to the file system to get it from either measure group partitions or aggregations.&amp;nbsp; Partitions can be orders of magnitude slower than retrieving the data directly from cache, and is almost certainly why the query took so long.&lt;br /&gt;
&lt;br /&gt;
As an aside, originally I’d actually called this the “Wait Time” chart since what we are showing here is &lt;em&gt;similar&lt;/em&gt; to what you see with SQL Server wait types, but &lt;a href="http://sqlcat.com/members/CarlRabeler.aspx" target="_blank"&gt;Carl Rabeler&lt;/a&gt; convinced me otherwise since what the chart is actually showing is “time spent” on the different operations, versus time spent &lt;em&gt;waiting&lt;/em&gt;.&amp;nbsp; You could probably get into a semantical debate about this since many of the SQL Server wait types pretty much show “time spent” as well… but it’s just not worth any potential confusion from injecting some Database Engine terminology into the Analysis Services lexicon, no matter how tempting it may be ;)&lt;br /&gt;
&lt;br /&gt;
In any event, this chart is critical because you can see exactly where SSAS is spending most of it’s time over any date range, which can be extremely important for profiling a server and determining where the bottlenecks lie.&lt;br /&gt;
&lt;br /&gt;
Next have a look at the &lt;strong&gt;File Queries&lt;/strong&gt; chart, the &lt;strong&gt;Total&lt;/strong&gt; metric in particular:&lt;br /&gt;
&lt;img alt="file_queries" border="0" height="235" src="http://lh5.ggpht.com/_0vL9rwa06l4/SjwSPiTWdAI/AAAAAAAAALc/CwvX1GSKGKQ/file_queries%5B5%5D.png?imgmax=800" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="file_queries" width="260" /&gt;&lt;br /&gt;
As I mentioned, the formula engine generates requests to the storage engine for measure group data when it’s not in the FE cache.&amp;nbsp; The total queries metric shows how many times the storage engine had to go to the file system to read data from a measure group partition (or aggregation) when the data wasn’t in the SE cache.&amp;nbsp; Here again is another value you typically want to be as close to zero as possible, because when it’s &amp;gt;0 it means that SSAS couldn’t find the data in either the FE cache OR the SE cache.&lt;br /&gt;
&lt;br /&gt;
Note that you will see values &amp;gt;0 when an aggregation is first hit and loaded into the SE cache, since Total covers both &lt;strong&gt;Agg hits&lt;/strong&gt; and partition queries.&amp;nbsp; But since agg hits are much lighter weight than partition queries this is generally not a problem.&lt;br /&gt;
&lt;br /&gt;
It is also perfectly normal to see values &amp;gt;0 when the cache is cold and queries first start coming in.&amp;nbsp; For example, if you process your cubes overnight the associated cache data will be invalidated, and you’ll probably see file queries spike up in the morning when users come in and start issuing MDX queries, then settle down as the data is cached.&amp;nbsp; If you see that total queries are continually above zero throughout the day, memory pressure is a likely culprit.&lt;br /&gt;
&lt;h4&gt;



Impact on MDX Query Performance&lt;/h4&gt;
So what happened after the invalid memory limit settings were corrected?&amp;nbsp; Here is some actual query data from the Performance Advisor &lt;strong&gt;Top Queries&lt;/strong&gt; tab which our beta tester was nice enough to export for me:&lt;br /&gt;
&lt;div align="right"&gt;
&lt;a href="http://www.sqlsentry.net/images/blogs/greg/query_performance.png" target="_blank"&gt;&lt;img alt="query_performance" border="0" height="227" src="http://lh5.ggpht.com/_0vL9rwa06l4/SjwSQ1UFWyI/AAAAAAAAANM/EIQcArPR_ZQ/query_performance%5B5%5D.png?imgmax=800" style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="query_performance" width="497" /&gt;&lt;/a&gt;&amp;nbsp;&lt;strong&gt;(click to enlarge)&lt;/strong&gt;&lt;/div&gt;
The queries in red ran with the invalid low memory limits.&amp;nbsp; Notice every single one had to go to the storage engine for the data every time.&amp;nbsp; All had 53 non-cached operations, high cpu cycles, durations of &amp;gt;10 seconds, and all spent 94-97% of that time in the storage engine, for obvious reasons.&lt;br /&gt;
&lt;br /&gt;
Once the limits were changed, the 2nd execution of the query (green) &lt;strong&gt;took about 1.5 seconds, with zero non-cached ops, very low cpu, and 100% of the time was spent in the formula engine&lt;/strong&gt;!&amp;nbsp; This is a fantastic example of how things are &lt;em&gt;supposed&lt;/em&gt; to work when there is memory available and limits are configured properly.&amp;nbsp; Most future runs of this query actually dropped under our default trace filter of &amp;gt;=1000ms, and so no longer showed up at all in Top Queries.&lt;br /&gt;
&lt;br /&gt;
Note that the first run of the query after changing the memory limits (orange) actually took longer than the runs with the invalid limits, although everything else was about the same.&amp;nbsp; At first I was puzzled by this, but then it occurred to me that this may be because SSAS was &lt;em&gt;finally&lt;/em&gt; able to actually load the data into cache, and the extra 6 seconds may just be overhead related to the associated memory allocations.&amp;nbsp; Or it may have just been an anomaly related to other activity on the server at the time, not sure.&lt;br /&gt;
&lt;br /&gt;
Even though the performance before the change was pretty bad, things actually could have been much worse.&amp;nbsp; There was one very big saving grace for this client that allowed SSAS to run as well as it did with the invalid memory limits.&amp;nbsp; It’s actually very clear on the dashboard what that is, but I’ll save that one for another post ;)&lt;br /&gt;
&lt;h4&gt;



Mini-contest Winner!&lt;/h4&gt;
Congrats to Norbert Kessler from &lt;a href="http://www.webtelligence.net/" target="_blank"&gt;WebTelligence&lt;/a&gt;, a SQL Server consulting firm in Germany and one of our beta testers, for nailing the answer pretty much right on the head.&amp;nbsp; He wins the free license of &lt;a href="http://www.sqlsentry.net/performance-advisor/sql-server-analysis-services.asp" target="_blank"&gt;Performance Advisor for Analysis Services&lt;/a&gt;.&amp;nbsp; &lt;a href="http://mariner-usa.com/aboutus/executiveteam.aspx" target="_blank"&gt;John Welch&lt;/a&gt; was very close, and actually brought up another pretty serious misconfiguration -- when the high and low limits are configured with the same value.&amp;nbsp; This is a common practice in the SQL Server world, but a big no-no with SSAS.&amp;nbsp; Another topic for a future post perhaps…&lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/Tds_Uwdhoek" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/1701816919864748378/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2009/06/analysis-services-memory-limits-part-ii.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/1701816919864748378?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/1701816919864748378?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/Tds_Uwdhoek/analysis-services-memory-limits-part-ii.html" title="Analysis Services Memory Limits, Part II" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_0vL9rwa06l4/Sj5Xky7EvfI/AAAAAAAAANE/T1VHVU23EXY/s72-c/memory_limit_issue%5B11%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2009/06/analysis-services-memory-limits-part-ii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08DQX0-cCp7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-5240538716035286373</id><published>2009-06-15T12:21:00.001-04:00</published><updated>2011-03-28T11:24:30.358-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:24:30.358-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Analysis Services" /><category scheme="http://www.blogger.com/atom/ns#" term="SSAS Memory" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Sentry" /><category scheme="http://www.blogger.com/atom/ns#" term="Memory Limits" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><title>Analysis Services Memory Limits</title><content type="html">&lt;p&gt;One of the least understood areas of Analysis Services performance seems to be that of memory limits – how they work, and how to configure them effectively.&amp;#160; I was going to start with an overview of &lt;a href="http://www.sqlsentry.net/performance-advisor/sql-server-analysis-services.asp" target="_blank"&gt;Performance Advisor for Analysis Services&lt;/a&gt; (aka, PA for SSAS), but during the beta I ran across such a good example of the software in action in diagnosing a problem with memory, I think it’ll work just as well to go through that issue step-by-step.&lt;/p&gt;  &lt;p&gt;First some background.&amp;#160; SSAS has two general categories of memory, &lt;strong&gt;shrinkable&lt;/strong&gt; and &lt;strong&gt;nonshrinkable&lt;/strong&gt;, and they work pretty much like it sounds.&amp;#160; Shrinkable memory can be easily reduced and returned back to the OS.&amp;#160; &lt;strong&gt;Nonshrinkable&lt;/strong&gt; memory, on the other hand, is generally used for more essential system-related stuff such as memory allocators and metadata objects, and is not easily reduced.&lt;/p&gt;  &lt;p&gt;PA for SSAS shows both types on the SSAS Memory Usage chart:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Cleaner Memory" border="0" alt="Cleaner Memory" src="http://lh6.ggpht.com/_0vL9rwa06l4/SjZ1HOd7MgI/AAAAAAAAAKg/OLH3Ahhf2KQ/mem_cleaner%5B8%5D.png?imgmax=800" width="345" height="248" /&gt;If you switch to “Memory by Category” mode via right-click menu, you get a more detailed breakdown.&amp;#160; Just like the chart above, the memory with hash marks is nonshrinkable:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Memory by Category" border="0" alt="Memory by Category" src="http://lh3.ggpht.com/_0vL9rwa06l4/SjZ1IGiY7AI/AAAAAAAAAKk/MLfllu9tiKo/mem_by_cat%5B4%5D.png?imgmax=800" width="347" height="279" /&gt;&lt;/p&gt;  &lt;p&gt;SSAS uses memory limit settings to determine how it allocates and manages its internal memory.&amp;#160; &lt;strong&gt;Memory\LowMemoryLimit&lt;/strong&gt; defaults to 65% of the total available physical memory on the machine (75% on AS2005), and &lt;strong&gt;Memory\TotalMemoryLimit&lt;/strong&gt; (also sometimes called the &lt;strong&gt;High&lt;/strong&gt; Memory Limit) defaults to 80%.&amp;#160; This is the total amount of memory that the SSAS process itself (msmdsrv.exe) can consume.&amp;#160; Note on the charts above, the orange line represents the Low memory limit and the red line the Total memory limit.&amp;#160; This makes it very easy to see how close SSAS’s actual memory consumption is to these limits.&amp;#160; Once memory usage hits the Low limit, memory cleaner threads will kick in and start moving data out of memory in a relatively non-aggressive fashion.&amp;#160; If memory hits the Total limit, the cleaner goes into crisis mode… it spawns additional threads and gets much more aggressive about memory cleanup, and this can dramatically impact performance.&lt;/p&gt;  &lt;p&gt;Between the Low and Total limits, SSAS uses an economic memory management model to determine which memory to cleanup.&amp;#160; This model can be adjusted by some other parameters related to the memory price, but I’m not going to get into those here.&lt;/p&gt;  &lt;p&gt;When it comes to memory management SSAS is entirely self-governing, and unlike SQL Server it doesn’t consider external low physical memory conditions (which can be signaled by Windows) or low VAS memory.&amp;#160; This may be partly because SSAS is already much more subject to Windows own memory management than is SQL Server, since Analysis Services databases are a collection of files on the file system and can make heavy use of the file system cache, whereas SQL Server does not.&amp;#160; This means that you can have a significant amount of SSAS data loaded into RAM by virtue of the file cache, and this will not show up as part of the SSAS process memory, or in any way be governed by the SSAS memory limits.&amp;#160; (For this reason we now show system file cache usage and file cache hit ratios on the dashboard as well so you can see this.)&lt;/p&gt;  &lt;p&gt;On a side note, a byproduct of this design is that if available memory is low and other processes on the server are competing for memory resources, SSAS will pretty much ignore them, and look only to its own memory limit settings to determine what to do.&amp;#160; This means, for example, that memory for a SQL Server using the default “Minimum server memory” setting of 0 can be aggressively and dramatically reduced by an SSAS instance on the same machine with default memory limits, to the point where the SQL Server can become unresponsive. SQL Server is signaled by Windows that memory is low, and responds accordingly by releasing memory back to the OS, which is then gobbled up by SSAS.&lt;/p&gt;  &lt;h4&gt;Graphical Anomaly, or Serious Memory Problem?&lt;/h4&gt;  &lt;p&gt;Very early in our beta for PA for SSAS, a beta tester reported what they thought was an odd graphical anomaly in the bottom right of the SSAS Memory Usage chart:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="mem_cleaner_anomaly" border="0" alt="mem_cleaner_anomaly" src="http://lh6.ggpht.com/_0vL9rwa06l4/SjZ1I3Ekt7I/AAAAAAAAAK4/NZyKsqEuy_c/mem_cleaner_anomaly%5B7%5D.png?imgmax=800" width="363" height="244" /&gt;&lt;/p&gt;  &lt;p&gt;To the untrained eye, this would certainly look like an anomaly, but once you’ve seen what this chart is supposed to look like, it’s fairly obvious that it’s an “H” on top of an “L”.&lt;/p&gt;  &lt;p&gt;This particular tester had been eager to get the beta because they had suffered from poor performance and other strange behaviors for quite some time.&amp;#160; They had actually already scheduled Microsoft to come in and help troubleshoot the issues.&lt;/p&gt;  &lt;p&gt;What exactly did this “anomaly” mean?&amp;#160; What caused it, how it was resolved, and what was the net effect on performance, if any?&amp;#160; All great questions… and this will be the subject of my next post, so stay tuned ;-)&lt;/p&gt;  &lt;p&gt;If anyone has any guesses in the meantime feel free to comment.&amp;#160; &lt;strong&gt;The first person to get it right will win a free license of &lt;a href="http://www.sqlsentry.net/performance-advisor/sql-server-analysis-services.asp" target="_blank"&gt;Performance Advisor for Analysis Services&lt;/a&gt;&lt;/strong&gt;! (that’s a $2495 value)&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/l0rXjX5hLMc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/5240538716035286373/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2009/06/analysis-services-memory-limits.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/5240538716035286373?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/5240538716035286373?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/l0rXjX5hLMc/analysis-services-memory-limits.html" title="Analysis Services Memory Limits" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_0vL9rwa06l4/SjZ1HOd7MgI/AAAAAAAAAKg/OLH3Ahhf2KQ/s72-c/mem_cleaner%5B8%5D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2009/06/analysis-services-memory-limits.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcERHc-eyp7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-132529177942429073</id><published>2008-10-08T18:40:00.004-04:00</published><updated>2011-03-28T11:26:45.953-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:26:45.953-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event Manager" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Sentry" /><category scheme="http://www.blogger.com/atom/ns#" term="Release Updates" /><title>More Fun with v4.1...</title><content type="html">&lt;p&gt;I mentioned in my last post how some users weren't even aware of the Performance Advisor dashboard's History mode because of issues with the toolbar buttons. What I didn't mention was that for some an even more significant &amp;quot;hidden&amp;quot; feature was Performance Advisor itself!&lt;/p&gt;  &lt;p&gt;First some background.&amp;#160; Both Event Manager and Performance Advisor share the same code base, so you only need one console, service and database for both products.&amp;#160; There were many reasons for taking this approach, including ease of installation via a unified setup program, ease of configuration, and seamless integration possibilities between the products.&amp;#160; For example, we can show you all performance events (heavy SQL, blocks, &amp;amp; deadlocks) on the Event Manager calendar without any configuration (as long as you have a license for both products). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/sqlsentrygreg/SO4frXgQviI/AAAAAAAAAIw/ofMNuiaFeKk/calendar_jump_to_pa%5B3%5D.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="214" alt="calendar_jump_to_pa" src="http://lh5.ggpht.com/sqlsentrygreg/SO4frvmAFOI/AAAAAAAAAI0/pAbskeCohBg/calendar_jump_to_pa_thumb%5B1%5D.jpg?imgmax=800" width="414" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We also enable you to quickly jump back and forth between Event Manager and Performance Advisor via context menus and toolbar buttons.&amp;#160; These menus are shown in both the Event Manager calendar shot above where a block is selected, and below with the same block selected in Performance Advisor.&amp;#160; (I should mention that the easiest way to get from a block on the calendar to the same block in Performance Advisor is actually to double-click it, or right-click and select &lt;strong&gt;Open&lt;/strong&gt;.)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/sqlsentrygreg/SO4fr9U7g4I/AAAAAAAAAI4/sxHqTpbDbuM/blocking_jump_to_cal%5B4%5D.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="130" alt="blocking_jump_to_cal" src="http://lh4.ggpht.com/sqlsentrygreg/SO4fsNDNRII/AAAAAAAAAI8/wPrYiFYWM7o/blocking_jump_to_cal_thumb%5B2%5D.jpg?imgmax=800" width="418" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Note how the two products give you a completely different yet complementary view of the same event.&amp;#160; Performance Advisor shows you all of the great details of all versions of the block chain, while Event Manager shows you in chronological fashion how the block was interacting with all other events around the same timeframe (heavy SQL, SQLAgent jobs, SSIS, maint plans, etc.).&amp;#160; You can stare at a grid for hours and not gain the same level of understanding about a performance event as you get after looking at the calendar for a few seconds.&amp;#160; You'll see relationships between events that you never new existed... which enables you to be exponentially more effective when troubleshooting and resolving difficult performance problems.&lt;/p&gt;  &lt;p&gt;Hopefully by now you can see some of the great benefits of a single SQL Sentry console for both products.&amp;#160; However, a downside of the single console approach is that, well, there is only one console.&amp;#160; Let me explain.&amp;#160; If each product was its own Windows application, the separation between the products would be quite clear.&amp;#160; There would be little chance of confusion regarding how to monitor (or &amp;quot;watch&amp;quot; in SQL Sentry lingo) a server with each product, how to open the primary screen for each product, etc.&lt;/p&gt;  &lt;p&gt;But since we leverage the same Navigator pane that we've always had in Event Manager, and it looks pretty much the same as before, some users had difficulty figuring out how to pull up Performance Advisor.&amp;#160; At first we were puzzled by this, since if you use the context menus it's clear that there are now two sets of &lt;strong&gt;Watch&lt;/strong&gt; and &lt;strong&gt;Open&lt;/strong&gt; child menu items on computer (aka Device) and SQL Server nodes, and you are forced to pick one or the other:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/sqlsentrygreg/SO021_amfzI/AAAAAAAAAIg/ldnc652JGNk/open_context_menus%5B7%5D.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="80" alt="open_context_menus" src="http://lh5.ggpht.com/sqlsentrygreg/SO022A7vpbI/AAAAAAAAAIk/zwUuBgiF3gc/open_context_menus_thumb%5B3%5D.jpg?imgmax=800" width="412" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ah, but there was yet another way to open the Event Manager calendar in previous versions -- via double-click of the left mouse button.&amp;#160; As it turns out, many existing users had become accustomed to using this approach since it's faster/easier.&amp;#160; Therein lied the &amp;quot;problem&amp;quot;.&amp;#160; Although in v4.0 we had added a User Preference to control the &amp;quot;default view&amp;quot; (or product) when left-clicking a node, we had set this to &amp;quot;Event Manager&amp;quot; for upgrades to avoid changing behavior for existing users.&amp;#160; So if you were a left-clicker, unless you went into the User Prefs and adjusted this, you'd continue to get the Event Manager calendar and never see Performance Advisor!&amp;#160; Right.&amp;#160; 2+ years of effort down the drain :O&lt;/p&gt;  &lt;p&gt;After many hours of careful deliberation, to address this problem we decided to introduce a new feature in v4.1 called the &amp;quot;Product Selector&amp;quot; ;)&amp;#160; Now what you will get by default when you double-click a computer or SQL Server in the Navigator is this screen:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/sqlsentrygreg/SO022hm02LI/AAAAAAAAAIo/6oSukUjmB14/product_selector%5B3%5D.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="208" alt="product_selector" src="http://lh3.ggpht.com/sqlsentrygreg/SO022_ladrI/AAAAAAAAAIs/mniAI0ld3Pg/product_selector_thumb%5B1%5D.jpg?imgmax=800" width="416" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The screen actually serves a few purposes:&amp;#160; 1) to let you know you have multiple products available, 2) to allow you to continue to double-click &lt;strong&gt;and&lt;/strong&gt; let you choose which product to open, and 3) to allow you to adjust the new &amp;quot;default view&amp;quot; User Pref via the &amp;quot;Default&amp;quot; column checkbox.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; All Event Manager users who upgrade to v4.x get a fully functional 30-day, 5-server trial for Performance Advisor for your efforts, so #1 applies to you as well.&lt;/p&gt;  &lt;p&gt;#3 only comes into play if you deselect the &amp;quot;Always prompt me&amp;quot; checkbox, after which point you will no longer see the Product Selector... we'll just open the product you checked as the default.&lt;/p&gt;  &lt;p&gt;We've already found that this in itself is causing some confusion though!&amp;#160; Some users expected the &amp;quot;Default&amp;quot; checkbox to control which product is pre-selected the next time you see the form, which it does not.&amp;#160; To avoid this, in v4.2 we've simplified the form slightly; we've eliminated the Default column and just use the currently selected product as the default if you ever deselect the &amp;quot;Always prompt me&amp;quot; option.&amp;#160; In addition, the last product selected will always be pre-selected the next time you open the form.&lt;/p&gt;  &lt;p&gt;It's truly amazing to me that I was able to fill up an entire blog post with a relatively insignificant topic... although it is indeed typical of types of issues I spend much of my days on.&amp;#160; Hopefully someone out there will find it helpful ;)&amp;#160; Please bear with, this whole blogging thing is still new to me.&amp;#160; I promise to extricate myself from the day-to-day details of UI design &amp;amp; usability issues soon and delve more into how to use SQL Sentry to solve real world performance issues.&amp;#160; Until next time...&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/pcZBY_7ew44" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/132529177942429073/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2008/10/more-fun-with-v41.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/132529177942429073?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/132529177942429073?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/pcZBY_7ew44/more-fun-with-v41.html" title="More Fun with v4.1..." /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/sqlsentrygreg/SO4frvmAFOI/AAAAAAAAAI0/pAbskeCohBg/s72-c/calendar_jump_to_pa_thumb%5B1%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2008/10/more-fun-with-v41.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08DQX0-cSp7ImA9WhZSE08.&quot;"><id>tag:blogger.com,1999:blog-2838202597746455225.post-5957528359808990418</id><published>2008-10-03T12:38:00.000-04:00</published><updated>2011-03-28T11:24:30.359-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T11:24:30.359-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Sentry" /><category scheme="http://www.blogger.com/atom/ns#" term="Release Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance Advisor" /><title>SQL Sentry v4.1 Released!</title><content type="html">&lt;p&gt;Well, I've thought it would be a good idea to do this for some time now (i.e., blog)... but I can honestly say that it wasn't until now, with the v4.1 release behind us, that I've felt like the time spent on a blog would be better spent (or at least as well spent) as time spent working on our software. I know, lame excuse, but true nonetheless ;)&lt;/p&gt;  &lt;p&gt;So without further ado, I'll get on with what we've been doing for the past few months. The new v4.1 release contains &lt;strong&gt;20 new features and almost 60 fixes&lt;/strong&gt; over the previous build that's been public since early August (v4.0.0.48). The complete list can always be found &lt;a href="http://www.sqlsentry.net/downloads/change_list.txt" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; A huge focus for this release was streamlining and generally improving the initial setup process including the Quick Start wizard, as well as usability improvements for Performance Advisor.&lt;/p&gt;  &lt;p&gt;We received a tremendous amount of feedback on v4.0.x builds, and many of the resulting changes have gone into v4.1. We've put out several incremental releases since the initial v4.0 release, but the v4.1 code branch was actually started before many of them because some of the changes were significant enough that we didn't want to run the risk of regressions. That said, v4.1 is undoubtedly the most thoroughly tested build we've ever released. We always test hard, but this time we set a new record for release candidates with 12!    &lt;br /&gt;    &lt;br /&gt;An invaluable part of the feedback process for v4.1 involved onsite visits with many customers and evaluators both inside the U.S. and in Europe. We took the time to actually sit down with folks and go through the install and setup process with them in their own environments. Then we'd go through the various modules of the product to see which elements were causing confusion or usability problems. It's tempting to try and solicit this type of feedback exclusively via web meeting, phone, or email since it's generally &amp;quot;easier&amp;quot;, but there is simply no substitute for face-to-face interaction. You see things and obtain feedback that you never would otherwise. &lt;/p&gt;  &lt;h4&gt;Setup Improvements&lt;/h4&gt;  &lt;p&gt;I'll start with one of the major setup improvements. In v4.0.x if you were trying to monitor a server with Performance Advisor for the first time and the service user didn't have the necessary rights on the target, you might have seen a cryptic ACCESS_DENIED error along with hex codes and stack traces from WMI. In v4.1 you will now see a friendly message like:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WMI access was denied. Please ensure the SQL Sentry Server user account has Windows Administrator privileges on the target server.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Seems simple enough, but inventorying the myriad error codes that can come from the various subsystems, classifying them, and creating friendly messages for each actually took significant effort. &lt;/p&gt;  &lt;p&gt;Stack traces can be a bit scary for users -- even though we were simply relaying handled exceptions back to the user about the security (or other) problem, to the user it might look like a bug in the software itself. We obviously want to avoid that type of confusion whenever possible, and even better, help users to resolve the problem instead of having to contact our support group, or worst case bail out of the install.&lt;/p&gt;  &lt;h4&gt;Dashboard Improvements&lt;/h4&gt;  &lt;h5&gt;Chart Resolution&lt;/h5&gt;  &lt;p&gt;We've also made many improvements to the Performance Advisor dashboard. For example, some users expressed confusion about how the apparent granularity of the performance charts would change when zooming out from say, a 30 minute view, to a 30 day view. In a 30 minute view we show the actual raw data, which for many metrics like SQL activity is collected every 10 seconds. Unfortunately we can't show a month's worth of 10 second samples on all of the dashboard charts -- trust me, we tried early on ;)&lt;/p&gt;  &lt;p&gt;We gave up pretty quickly though when we realized that not only does it incur a major hit in rendering performance, it's just TMI -- the human brain simply can't effectively synthesize &amp;gt;250,000 points on a single simple line chart, let alone 250K times the number of series on the charts, times the number of charts on the dashboard. This would defeat the whole purpose of what we are trying to accomplish with the dashboard. Which is, by the way, to provide for the first time in history a single screen to which a DBA can look to determine in seconds where performance bottlenecks occur on a server, for any point in time. Much more on this topic in future posts&amp;#8230;    &lt;br /&gt;    &lt;br /&gt;We spent a lot of time developing the Performance Advisor background processes that continuously roll the raw data up into different &amp;quot;break levels&amp;quot;, or aggregates. Depending on the size of the active date range, you may be looking at 2 minute, 10 minute, 30 minute, or 4 hour aggregates. Think about how Google Maps seamlessly changes the resolution of the map when you zoom in and out -- it's pretty much the same principle.     &lt;br /&gt;    &lt;br /&gt;Back to the improvement -- we now show you the active break level, so you'll know whether you are looking detail or aggregated data when zooming:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/sqlsentrygreg/SOzs--QWKCI/AAAAAAAAAHY/9Qc1HS1jxXw/resolution%5B16%5D.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="108" alt="resolution" src="http://lh5.ggpht.com/sqlsentrygreg/SOzs-5BFnMI/AAAAAAAAAHc/5nV-_c9PNyE/resolution_thumb%5B8%5D.jpg?imgmax=800" width="408" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;div&gt;   &lt;h5&gt;Point and Range Selection&lt;/h5&gt;    &lt;div&gt;In the same area you'll notice fields for Sample Pos(ition), and Range Start/Range End. In the previous release, you could highlight a point or a range on one chart and the point or range would be synchronized across all other charts. This enabled you to easily correlate what was happening across multiple charts and metrics. However, we found that a big usability problem was that the default action after lifting your mouse was always to zoom in. The caused you to lose your place, so then you'd have to zoom back out and start over again.      &lt;br /&gt;      &lt;br /&gt;In v4.1 we now show you exactly which point and/or range is being selected in real time, and instead of auto-zooming, we present several context menus which allow you to jump directly to one of the other Performance Advisor tabs with the selected range to see exactly which heavy SQL, blocks, or deadlocks occurred during that range. You can also jump directly to the Event Manager calendar for the selected range. When you go back to the dashboard, your original master range and range selection is still active and can be changed as often as needed, without losing your place!&lt;/div&gt;    &lt;div&gt;&amp;#160;&lt;/div&gt;    &lt;div&gt;&lt;a href="http://lh6.ggpht.com/sqlsentrygreg/SOzs_D9l8sI/AAAAAAAAAHg/pwg6-BPAP80/range_selection_w_menus%5B16%5D.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="171" alt="range_selection_w_menus" src="http://lh5.ggpht.com/sqlsentrygreg/SOzs_ZZ_PLI/AAAAAAAAAHk/WkdYZGiOe3c/range_selection_w_menus_thumb%5B8%5D.jpg?imgmax=800" width="406" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;    &lt;div&gt;&amp;#160;&lt;/div&gt;    &lt;div&gt;Another nice thing we are doing is persisting the selected points/ranges while navigating around or zooming in/out.&lt;/div&gt;    &lt;div&gt;     &lt;div&gt;       &lt;h5&gt;New &amp;quot;History&amp;quot; Mode! &lt;/h5&gt;        &lt;div&gt;Well, not really.&amp;#160; The dashboard has always had two modes: &lt;strong&gt;Sample&lt;/strong&gt; and &lt;strong&gt;History&lt;/strong&gt;. Sample mode displays bar charts for a single point in time (or sample), while history mode changes over to line-type charts in order to display multiple points across a date range. The default when you open the dashboard directly from the Navigator pane (versus jumping to the dashboard from an Event Manager calendar) is sample mode showing realtime data, where the bars are continuously moving as new data comes in.           &lt;br /&gt;          &lt;br /&gt;One of the amazing things we saw when visiting clients is that many didn't even realize there was a history mode! This is also a perfect (and somewhat frightening) example of something that we may have never seen otherwise. Don&amp;#8217;t get me wrong, realtime sample mode is great -- it's very cool to see all of the colorful bars jump around -- but the real power of the dashboard is with history mode, and many users didn't even realize it was there!           &lt;br /&gt;          &lt;br /&gt;The reason for this confusion invariably turned out to be the fact that we had a rather insignificant, depressible button on the toolbar for toggling between sample and history.&amp;#160; So unless you knew to click it, or to change the date range on the toolbar and click Go, you may not ever even see history mode&amp;#8230; ughh!           &lt;br /&gt;          &lt;br /&gt;In v4.1 we've replaced this button with a colorful toggle button which changes both the graphic and text when you click it, clearly highlighting the mode change.&amp;#160; We've also done the same for the neighboring &lt;strong&gt;Refresh&lt;/strong&gt; and &lt;strong&gt;Start/Pause&lt;/strong&gt; realtime (or auto-refresh) mode buttons.&lt;/div&gt;        &lt;div&gt;&amp;#160;&lt;/div&gt;        &lt;div&gt;&lt;a href="http://lh4.ggpht.com/sqlsentrygreg/SOzs_ajOkeI/AAAAAAAAAII/9rjZ43p7A_A/new_buttons%5B27%5D.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="69" alt="new_buttons" src="http://lh6.ggpht.com/sqlsentrygreg/SOzs_tWrAcI/AAAAAAAAAIM/TdamJaAZq0g/new_buttons_thumb%5B19%5D.jpg?imgmax=800" width="311" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;        &lt;div&gt;&amp;#160;&lt;/div&gt;        &lt;div&gt;Seems rather simple and obvious I know. This one actually was simple to implement -- but it does serve as a good example of how such a small thing can lead to a big usability issue&amp;#8230; as well as how we are always listening in an effort to improve the product, in ways both large and small ;)&lt;/div&gt;        &lt;h4&gt;Block Versioning&lt;/h4&gt;        &lt;div&gt;Now, moving off of the dashboard onto the Blocking SQL tab&amp;#8230; In v4.0 we had block detection of course, but now instead of showing each detected version of a block as a separate entry, we group multiple versions of the same block together, and allow you to flip through the different versions via a new &lt;strong&gt;Version&lt;/strong&gt; column with embedded dropdown control:&lt;/div&gt;        &lt;div&gt;&amp;#160;&lt;shot&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/sqlsentrygreg/SOzs_7Lnc0I/AAAAAAAAAHw/tsmGNmtBcgM/block_versions%5B14%5D.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="152" alt="block_versions" src="http://lh4.ggpht.com/sqlsentrygreg/SOztAFeXe3I/AAAAAAAAAH0/MEkotnO65-4/block_versions_thumb%5B8%5D.jpg?imgmax=800" width="415" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/div&gt;        &lt;div&gt;This can dramatically reduce the noise in many scenarios. Likewise, we now only show one instance of the block on the Event Manager calendar instead of multiple, and only send one email for all versions of the same block. (A more accurate way to put this is we only fire any actions configured for the Blocking SQL condition once for each unique block). &lt;/div&gt;        &lt;h4&gt;Actions and Settings Config&lt;/h4&gt;        &lt;div&gt;Another big improvement in v4.1 is we now enable easy configuration of all Performance Advisor-specific actions or settings from the associated Performance Advisor tabs, versus only from the SQL Server node in the Navigator pane. For example, you can access all of the settings for Top SQL, like the minimum duration, statement collection, etc., from the &lt;strong&gt;Top SQL&lt;/strong&gt; tab.&amp;#160; If you're on Top SQL, simply hover over one of the &lt;strong&gt;Settings&lt;/strong&gt; or &lt;strong&gt;Actions&lt;/strong&gt; tabs on the right-hand side of the screen and it will expand to show you available settings:&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;          &lt;br /&gt;&lt;shot&gt;&lt;a href="http://lh5.ggpht.com/sqlsentrygreg/SOztAH5YWyI/AAAAAAAAAH4/S94XB-CbRzw/pa_actions_settings%5B11%5D.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="136" alt="pa_actions_settings" src="http://lh4.ggpht.com/sqlsentrygreg/SOztATqGRCI/AAAAAAAAAH8/WA9MRYhRtRI/pa_actions_settings_thumb%5B5%5D.jpg?imgmax=800" width="414" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;You can also access them by select the event source nodes in the Navigator pane... assuming you are also watching the server with Event Manager, which is required for these nodes to show up:&amp;#160;&amp;#160; &lt;br /&gt;          &lt;br /&gt;&lt;shot&gt;&lt;a href="http://lh3.ggpht.com/sqlsentrygreg/SOztAsqUgRI/AAAAAAAAAIA/5a5Vj3dnyI0/nav_actions_settings%5B18%5D.jpg?imgmax=800"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="131" alt="nav_actions_settings" src="http://lh6.ggpht.com/sqlsentrygreg/SOztA1mi7UI/AAAAAAAAAIE/5w1psGRUk7M/nav_actions_settings_thumb%5B12%5D.jpg?imgmax=800" width="409" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;That&amp;#8217;s all for now. I&amp;#8217;ll have more coming on v4.1 improvements and other great info about how to get the most out of SQL Sentry software soon... &lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;img src="http://feeds.feedburner.com/~r/GregGonzalez/~4/_2CKQnDh9ZQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://greg.blogs.sqlsentry.net/feeds/5957528359808990418/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://greg.blogs.sqlsentry.net/2008/10/sql-sentry-v41-released.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/5957528359808990418?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2838202597746455225/posts/default/5957528359808990418?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GregGonzalez/~3/_2CKQnDh9ZQ/sql-sentry-v41-released.html" title="SQL Sentry v4.1 Released!" /><author><name>Greg Gonzalez</name><uri>http://www.blogger.com/profile/03806231827889827641</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/-eZy5Ps12CHg/UWc3sWhWyCI/AAAAAAAAA1c/5pAd8b-mxaM/s220/greg5-crop%2Bweb%2Bready-sm.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/sqlsentrygreg/SOzs-5BFnMI/AAAAAAAAAHc/5nV-_c9PNyE/s72-c/resolution_thumb%5B8%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://greg.blogs.sqlsentry.net/2008/10/sql-sentry-v41-released.html</feedburner:origLink></entry></feed>
