<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SQLblog.com - The SQL Server blog spot on the web</title><link>http://sqlblog.com/blogs/default.aspx</link><description>THE SQL Server Blog Spot on the Web</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Check out another Erland Sommarskog's utility: ABAPERLS</title><link>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/01/05/check-out-another-erland-sommarskog-s-utility-abaperls.aspx</link><pubDate>Mon, 05 Jan 2009 19:06:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10980</guid><dc:creator>Alexander Kuznetsov</dc:creator><slash:comments>0</slash:comments><description>Now public on Erland Sommarskog's website. Enjoy! Share this post: email it! | bookmark it! | digg it! | reddit! | kick it! | live it!...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/01/05/check-out-another-erland-sommarskog-s-utility-abaperls.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10980" width="1" height="1"&gt;</description></item><item><title>2009 SQL Resolutions</title><link>http://sqlblog.com/blogs/louis_davidson/archive/2009/01/04/2009-sql-resolutions.aspx</link><pubDate>Mon, 05 Jan 2009 02:55:02 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10961</guid><dc:creator>drsql</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Every year I put out resolutions, but this year is a little different.&amp;#160; I will post my SQL only blog resolutions here, and my personal ones &lt;a href="http://drsql.spaces.live.com" target="_blank"&gt;here&lt;/a&gt;. Every year I find my ability to put out stuff is limited by my desire for sleep and fun, and this year is no different. So I am going to be realistic this time…I think.&lt;/p&gt;  &lt;p&gt;1. Only collaborative works this year.&amp;#160; I am collaborating with Tim Ford (&lt;a title="http://ford-it.com/" href="http://ford-it.com/"&gt;http://ford-it.com/&lt;/a&gt;) on the oft mentioned DMV book for red-gate.&amp;#160; I feel it will get done with or without me this time, but I am committed to making it happen.&amp;#160; The MVP book work is mostly done, but there is a good bit more work to do before it goes to print for sure.&lt;/p&gt;  &lt;p&gt;2. At least one SQL blog on this site every two weeks or more often.&amp;#160; I have my pillar posts that are in progress, (one is ready for posting in a day or two), and I am going to post some of the DMV stuff along too, most likely.&lt;/p&gt;  &lt;p&gt;3. Back on the forums more steady now that the holidays have passed. I try to stick to 3-5 posts a day, even when I am writing, but it can be laborious.&amp;#160; Luckily the talent that is working the forums has greatly improved over the past three years.&lt;/p&gt;  &lt;p&gt;4. Bring my back catalog of posts from drsql.spaces.live.com over to sqlblog in cleaned up/updated form, as well as posting them to my website drsql.org for future reference as well.&lt;/p&gt;  &lt;p&gt;5. Keeping drsql.org more up to date with stuff I do.&lt;/p&gt;  &lt;p&gt;6. Speak at least 3 times this year (user group (&lt;a href="http://nashville.sqlpass.org" target="_blank"&gt;nashville.sqlpass.org&lt;/a&gt;), Devlink (&lt;a href="http://devlink.net" target="_blank"&gt;devlink.net&lt;/a&gt;), and &lt;a href="http://sqlpass.org" target="_blank"&gt;PASS&lt;/a&gt;, hopefully).&lt;/p&gt;  &lt;p&gt;7. Work with PASS on social media to help make them a solid place to go to meet other SQL nerds, even those on other communities.&lt;/p&gt;  &lt;p&gt;8. Work on my responsibilities with the Nashville SQL User’s group to help us turn a corner to a thriving group.&amp;#160; Right now we have a lot of potential, but need to do a bit more.&lt;/p&gt;  &lt;p&gt;9. Read more. One thing about producing content is that it prohibits you from ingesting content from others.&lt;/p&gt;  &lt;p&gt;See, realistic. &lt;/p&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=2009 SQL Resolutions&amp;amp;body=Seen on SQLblog.com: %0A%0A%092009 SQL Resolutions%0A%0Ahttp://sqlblog.com/blogs/louis_davidson/archive/2009/01/04/2009-sql-resolutions.aspx" target="_blank" title = "Email 2009 SQL Resolutions"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/louis_davidson/archive/2009/01/04/2009-sql-resolutions.aspx&amp;amp;title=2009+SQL+Resolutions" target="_blank" title = "Submit 2009 SQL Resolutions to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/louis_davidson/archive/2009/01/04/2009-sql-resolutions.aspx&amp;amp;phase=2" target="_blank" title = "Submit 2009 SQL Resolutions to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/louis_davidson/archive/2009/01/04/2009-sql-resolutions.aspx&amp;amp;title=2009+SQL+Resolutions" target="_blank" title = "Submit 2009 SQL Resolutions to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/louis_davidson/archive/2009/01/04/2009-sql-resolutions.aspx&amp;amp;title=2009+SQL+Resolutions" target="_blank" title = "Submit 2009 SQL Resolutions to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/louis_davidson/archive/2009/01/04/2009-sql-resolutions.aspx&amp;amp;title=2009+SQL+Resolutions&amp;amp;;top=1" target="_blank" title = "Add 2009 SQL Resolutions to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10961" width="1" height="1"&gt;</description></item><item><title>5 Reasons why I think MDX is the Devil</title><link>http://sqlblog.com/blogs/james_luetkehoelter/archive/2009/01/04/5-reasons-why-i-think-mdx-is-the-devil.aspx</link><pubDate>Sun, 04 Jan 2009 17:24:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10959</guid><dc:creator>James Luetkehoelter</dc:creator><slash:comments>4</slash:comments><description>&lt;P&gt;First, an up front apology to Mosha - this is half in jest, half real. MDX is a powerful and useful language, but I find that its very existence has made my life very difficult when it comes to developing a solid Analysis Services solution. That's not to say I don't use it, or endorse it, but I worry greatly about its overall usage.&lt;/P&gt;
&lt;P&gt;1) It tempts you by looking like SQL, but once your brought into it you realize how complex it is (if you don't have Mosha's MDX Studio, get it).&lt;/P&gt;
&lt;P&gt;2) MDX allows you to do TOO much when it comes to a multi-dimensional structure, without first understanding multi-dimensional concepts. I've seen code that creates filters or subset cubes that overlap or end up cutting out measures implicitly. You have no warning about possibly undermining previous dimensional modeling - that would be a nice addition to see.&lt;/P&gt;
&lt;P&gt;3) Along those lines, it enables sloppy dimensional modeling in the first place. "Throw it together, will add in things later". With a multi-dimensional database, it is very important to model it correctly, just like you would a relational structure. Unfortunately there are no Codd/Date rules of normalization, and often very little work done up front understanding the actually relationships and what the data is meant to represent. For example, instead of using a many-to-many cube dimension (what I call the dimesion to measure tie) to represent something like a bill of materials, I often see this done afterwards somehow via MDX calculations and such. Instead of going back to the dimensional modeling, the answer is usually "we can do this in MDX later".&lt;/P&gt;
&lt;P&gt;4) Yet another language with its own syntactical oddities - damn you syntax, you will be the death of me!&lt;/P&gt;
&lt;P&gt;5) I can't count the number of calculations I've seen in a cube that could have been done before the cube is loaded in the first place. An MDX calculation that does something like PRICE * QUANTITY = TOTAL SALES is just a waste of processing on the cube side. Remember, MDX is post aggregation - so the large the cube, the more dimensions it has and the level of drill down it allows all play a roll in the speed of things.&lt;/P&gt;
&lt;P&gt;Those are 5 to start - anyone have anymore?&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=5 Reasons why I think MDX is the Devil&amp;amp;body=Seen on SQLblog.com: %0A%0A%095 Reasons why I think MDX is the Devil%0A%0Ahttp://sqlblog.com/blogs/james_luetkehoelter/archive/2009/01/04/5-reasons-why-i-think-mdx-is-the-devil.aspx" target="_blank" title = "Email 5 Reasons why I think MDX is the Devil"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/james_luetkehoelter/archive/2009/01/04/5-reasons-why-i-think-mdx-is-the-devil.aspx&amp;amp;title=5+Reasons+why+I+think+MDX+is+the+Devil" target="_blank" title = "Submit 5 Reasons why I think MDX is the Devil to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/james_luetkehoelter/archive/2009/01/04/5-reasons-why-i-think-mdx-is-the-devil.aspx&amp;amp;phase=2" target="_blank" title = "Submit 5 Reasons why I think MDX is the Devil to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/james_luetkehoelter/archive/2009/01/04/5-reasons-why-i-think-mdx-is-the-devil.aspx&amp;amp;title=5+Reasons+why+I+think+MDX+is+the+Devil" target="_blank" title = "Submit 5 Reasons why I think MDX is the Devil to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/james_luetkehoelter/archive/2009/01/04/5-reasons-why-i-think-mdx-is-the-devil.aspx&amp;amp;title=5+Reasons+why+I+think+MDX+is+the+Devil" target="_blank" title = "Submit 5 Reasons why I think MDX is the Devil to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/james_luetkehoelter/archive/2009/01/04/5-reasons-why-i-think-mdx-is-the-devil.aspx&amp;amp;title=5+Reasons+why+I+think+MDX+is+the+Devil&amp;amp;;top=1" target="_blank" title = "Add 5 Reasons why I think MDX is the Devil to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10959" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/james_luetkehoelter/archive/tags/MDX/default.aspx">MDX</category></item><item><title>Reproducing deadlocks involving only one table</title><link>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/01/01/reproducing-deadlocks-involving-only-one-table.aspx</link><pubDate>Thu, 01 Jan 2009 23:12:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10933</guid><dc:creator>Alexander Kuznetsov</dc:creator><slash:comments>1</slash:comments><description>Although the best known deadlock scenario involves two connections modifying two tables in different order, there are also other deadlock scenarios involving only one table. Besides, in some scenarios each connection needs to issue only one statement, and it is enough to get a deadlock. Also in some scenarios only one connection needs to modify or acquire exclusive locks – the other one may only read data and only acquire shared locks and still embrace in a deadlock. I will provide repro scripts...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/01/01/reproducing-deadlocks-involving-only-one-table.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10933" width="1" height="1"&gt;</description></item><item><title>Deep dive to MDX presentation - slides</title><link>http://sqlblog.com/blogs/mosha/archive/2008/12/31/deep-dive-to-mdx-presentation-slides.aspx</link><pubDate>Wed, 31 Dec 2008 19:54:45 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10881</guid><dc:creator>mosha</dc:creator><slash:comments>6</slash:comments><description>&lt;p&gt;During &lt;a href="http://summit2008.sqlpass.org/"&gt;SQL PASS 2008 summit&lt;/a&gt;, I gave full day preconference seminar “&lt;a href="http://summit2008.sqlpass.org/precon-mosha-pasumansky.html"&gt;Deep Dive to MDX&lt;/a&gt;”. The evaluation forms now have arrived, and the scores for the content, relevance and depth portion of the seminar are very good. The scores are not as high, however, for the time allocated (people argued that it should’ve been&amp;#160; 2 days instead of one), and for the materials (since nobody received any materials). Both points are valid, one day turned out to be not enough, and perhaps two days wouldn’t have been enough either, since I got into less than a half of material that I had prepared. Also, due to some issues, I couldn’t hand down the presentation material – slides and MDX queries/calculations. These issues are cleared now, and I will start uploading the slides from the presentation. I don’t suppose they will be very useful for people who didn’t attend the session, since slides really only contain major talking points, and the rest was delivered verbally, but they probably will be very useful for people who did attend.&lt;/p&gt;  &lt;p&gt;The time allowed to cover the following subjects:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Overall Architecture&lt;/li&gt;    &lt;li&gt;Subcubes&lt;/li&gt;    &lt;li&gt;Sonar&lt;/li&gt;    &lt;li&gt;Storage Engine query plan&lt;/li&gt;    &lt;li&gt;Storage Engine cache&lt;/li&gt;    &lt;li&gt;Formula Engine query plan&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Block mode&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Formula Engine cache&lt;/li&gt;    &lt;li&gt;Sets&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;More detailed Table of Content can be found &lt;a href="http://cid-74f04d1ea28ece4e.skydrive.live.com/self.aspx/Deep%20Dive%20to%20MDX/Table%20of%20Content.docx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I will do series of posts uploading one subject at a time. The first subject is “Overall Architecture”, and it gives high-level picture of the components discussed further in the presentation. The slides are &lt;a href="http://cid-74f04d1ea28ece4e.skydrive.live.com/self.aspx/Deep%20Dive%20to%20MDX/Introduction.pptx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Slightly unrelated announcement: &lt;a href="http://www.mdxstudio.com/"&gt;MDX Studio&lt;/a&gt; 0.4.11 was also released today, with multiple UI enhancements, docked windows (Visual Studio style) etc. Versions for SSAS 2005 and SSAS 2008 are available, and can be downloaded from &lt;a href="http://cid-74f04d1ea28ece4e.skydrive.live.com/browse.aspx/MDXStudio/v0.4.11"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=Deep dive to MDX presentation - slides&amp;amp;body=Seen on SQLblog.com: %0A%0A%09Deep dive to MDX presentation - slides%0A%0Ahttp://sqlblog.com/blogs/mosha/archive/2008/12/31/deep-dive-to-mdx-presentation-slides.aspx" target="_blank" title = "Email Deep dive to MDX presentation - slides"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/mosha/archive/2008/12/31/deep-dive-to-mdx-presentation-slides.aspx&amp;amp;title=Deep+dive+to+MDX+presentation+-+slides" target="_blank" title = "Submit Deep dive to MDX presentation - slides to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/mosha/archive/2008/12/31/deep-dive-to-mdx-presentation-slides.aspx&amp;amp;phase=2" target="_blank" title = "Submit Deep dive to MDX presentation - slides to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/mosha/archive/2008/12/31/deep-dive-to-mdx-presentation-slides.aspx&amp;amp;title=Deep+dive+to+MDX+presentation+-+slides" target="_blank" title = "Submit Deep dive to MDX presentation - slides to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/mosha/archive/2008/12/31/deep-dive-to-mdx-presentation-slides.aspx&amp;amp;title=Deep+dive+to+MDX+presentation+-+slides" target="_blank" title = "Submit Deep dive to MDX presentation - slides to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/mosha/archive/2008/12/31/deep-dive-to-mdx-presentation-slides.aspx&amp;amp;title=Deep+dive+to+MDX+presentation+-+slides&amp;amp;;top=1" target="_blank" title = "Add Deep dive to MDX presentation - slides to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10881" width="1" height="1"&gt;</description></item><item><title>A year in review, The 31 best blog posts on SQLBlog for 2008</title><link>http://sqlblog.com/blogs/denis_gobo/archive/2008/12/31/10843.aspx</link><pubDate>Wed, 31 Dec 2008 15:36:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10843</guid><dc:creator>Denis Gobo</dc:creator><slash:comments>5</slash:comments><description>&lt;P&gt;Wow, it has been already a year since I wrote&amp;nbsp;&lt;A class="" href="http://sqlblog.com/blogs/denis_gobo/archive/2007/12/27/4209.aspx"&gt;A year in review, The 21 + 1 best blog posts on SQLBlog&lt;/A&gt; last year &lt;/P&gt;
&lt;P&gt;Here we are with another fascinating collection of links, some of them are chosen for their content and some of them for the great comments. &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A class="" href="http://sqlblog.com/blogs/adam_machanic/archive/2007/12/31/a-gift-of-script-for-2008-who-s-active-what-are-they-doing-and-who-is-blocked.aspx"&gt;A Gift of Script for 2008: Who's Active, What Are They Doing, and Who is Blocked?&lt;/A&gt; New version published today here &lt;A class="" href="http://sqlblog.com/blogs/adam_machanic/archive/2008/12/31/a-gift-of-script-for-2009-who-is-active-redux.aspx"&gt;A Gift of Script for 2009: Who is Active, Redux&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://sqlblog.com/blogs/erin_welker/archive/2008/02/10/partitioning-enhancements-in-sql-server-2008.aspx"&gt;Partitioning enhancements in SQL Server 2008&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://sqlblog.com/blogs/denis_gobo/archive/2008/02/20/5169.aspx"&gt;Five Different Ways To Return Data From One Table Which Doesn't Exists In another Table&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/denis_gobo/archive/2008/02/20/5169.aspx"&gt;When GETDATE() is not a constant&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/greg_low/archive/2008/02/25/sql-cache-dependencies.aspx"&gt;SQL Cache Dependencies&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/joe_chang/archive/2008/03/04/storage-performance-for-sql-server.aspx"&gt;Storage Performance for SQL Server&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/03/03/is-the-8kb-page-obsolete-or-aging.aspx"&gt;Is the 8KB page obsolete or aging?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/hugo_kornelis/archive/2008/03/10/lets-deprecate-update-from.aspx"&gt;Let's deprecate UPDATE FROM!&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/kalen_delaney/archive/2008/03/16/nonclustered-index-keys.aspx"&gt;Geek City: Nonclustered Index Keys&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://sqlblog.com/blogs/aaron_bertrand/archive/2008/03/20/which-to-use-or.aspx"&gt;Which to use: "&amp;lt;&amp;gt;" or "!="?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/joe_chang/archive/2008/03/29/execution-plan-costs.aspx"&gt;Execution Plan Costs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/kevin_kline/archive/2008/03/28/the-most-important-performance-monitor-counters-for-sql-server.aspx"&gt;The Most Important Performance Monitor Counters for SQL Server&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/denis_gobo/archive/2008/04/25/6421.aspx"&gt;SQL Teaser: Some Things Are Not What They Seem&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/adam_machanic/archive/2008/04/22/sql-server-query-processing-puzzle-like-vs.aspx"&gt;SQL Server Query Processing Puzzle: LIKE vs ?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/aaron_bertrand/archive/2008/04/27/performance-storage-comparisons-money-vs-decimal.aspx"&gt;Performance / Storage Comparisons : MONEY vs. DECIMAL&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/05/05/sql-server-2008-page-compression-using-multiple-processors.aspx"&gt;SQL Server 2008 Page Compression: Using multiple processors&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/kalen_delaney/archive/2008/05/15/dba-blunders.aspx"&gt;Did You Know? I have a question for you on DBA Blunders!&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/denis_gobo/archive/2008/05/21/6913.aspx"&gt;I have a question for you on DB development blunders!&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/louis_davidson/archive/2008/07/13/triggers-evil.aspx"&gt;Triggers...Evil?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/greg_low/archive/2008/07/29/indexing-foreign-keys-should-sql-server-do-that-automatically.aspx"&gt;Indexing Foreign Keys - should SQL Server do that automatically?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/hugo_kornelis/archive/2008/08/03/data-modeling-art-or-science.aspx"&gt;Data modeling: art or science?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/tibor_karaszi/archive/2008/08/14/are-inserts-quicker-to-heap-or-clustered-tables.aspx"&gt;Are inserts quicker to heap or clustered tables?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/08/24/large-query-performance-and-query-parallelism.aspx"&gt;Large Query Performance and Query Parallelism&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/joe_chang/archive/2008/08/24/large-query-performance-from-sql-server-2000-to-2008-32-64-bit.aspx"&gt;Large Query Performance from SQL Server 2000 to 2008, 32 &amp;amp; 64-bit&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/kalen_delaney/archive/2008/08/23/reading-the-transaction-log.aspx"&gt;Geek City: Reading the Transaction Log&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/james_luetkehoelter/archive/2008/09/23/an-open-letter-to-all-3rd-party-vendors-do-not-use-sa-anywhere-in-your-application.aspx"&gt;An open letter to all 3rd-party vendors: DO NOT USE SA ANYWHERE IN YOUR APPLICATION&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/10/25/defensive-database-programming-qualifying-column-names.aspx"&gt;Defensive database programming: qualifying column names.&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/10/21/defensive-database-programming-rewriting-queries-with-not-in.aspx"&gt;Defensive database programming: rewriting queries with NOT IN().&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/aaron_bertrand/archive/2008/10/30/my-stored-procedure-best-practices-checklist.aspx"&gt;My stored procedure "best practices" checklist&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/kalen_delaney/archive/2008/11/30/when-is-full-recovery-not-really-full-recovery.aspx"&gt;Geek City: When is FULL Recovery not Really FULL Recovery&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://sqlblog.com/blogs/greg_low/archive/2008/12/24/linq-to-sql-does-it-have-much-of-a-future.aspx"&gt;LINQ to SQL: Does it have much of a future?&lt;/A&gt;&lt;BR&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Which was your favorite post of the past year?&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=A year in review, The 31 best blog posts on SQLBlog for 2008&amp;amp;body=Seen on SQLblog.com: %0A%0A%09A year in review, The 31 best blog posts on SQLBlog for 2008%0A%0Ahttp://sqlblog.com/blogs/denis_gobo/archive/2008/12/31/10843.aspx" target="_blank" title = "Email A year in review, The 31 best blog posts on SQLBlog for 2008"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/denis_gobo/archive/2008/12/31/10843.aspx&amp;amp;title=A+year+in+review%2c+The+31+best+blog+posts+on+SQLBlog+for+2008" target="_blank" title = "Submit A year in review, The 31 best blog posts on SQLBlog for 2008 to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/denis_gobo/archive/2008/12/31/10843.aspx&amp;amp;phase=2" target="_blank" title = "Submit A year in review, The 31 best blog posts on SQLBlog for 2008 to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/denis_gobo/archive/2008/12/31/10843.aspx&amp;amp;title=A+year+in+review%2c+The+31+best+blog+posts+on+SQLBlog+for+2008" target="_blank" title = "Submit A year in review, The 31 best blog posts on SQLBlog for 2008 to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/denis_gobo/archive/2008/12/31/10843.aspx&amp;amp;title=A+year+in+review%2c+The+31+best+blog+posts+on+SQLBlog+for+2008" target="_blank" title = "Submit A year in review, The 31 best blog posts on SQLBlog for 2008 to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/denis_gobo/archive/2008/12/31/10843.aspx&amp;amp;title=A+year+in+review%2c+The+31+best+blog+posts+on+SQLBlog+for+2008&amp;amp;;top=1" target="_blank" title = "Add A year in review, The 31 best blog posts on SQLBlog for 2008 to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10843" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/list/default.aspx">list</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category></item><item><title>A Gift of Script for 2009: Who is Active, Redux</title><link>http://sqlblog.com/blogs/adam_machanic/archive/2008/12/31/a-gift-of-script-for-2009-who-is-active-redux.aspx</link><pubDate>Wed, 31 Dec 2008 14:49:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10841</guid><dc:creator>Adam Machanic</dc:creator><slash:comments>6</slash:comments><description>&lt;p&gt;Last year on December 31 &lt;a href="http://sqlblog.com/blogs/adam_machanic/archive/2007/12/31/a-gift-of-script-for-2008-who-s-active-what-are-they-doing-and-who-is-blocked.aspx"&gt;I posted part of a larger monitoring script that I had been working on for a few months&lt;/a&gt;. I received lots of great feedback on the little script in both the comments and from people I was working with, and over the course of the last year I estimate that I have invested at least a couple of hundred hours in the script. &lt;a href="http://sqlblog.com/blogs/adam_machanic/attachment/10841.ashx"&gt;The result of all of this time is attached&lt;/a&gt;, and I hope that this script is as useful for others as it has been for me; I've been using it pretty much nonstop while modifying it and it has become an indispensable part of my toolkit. &lt;/p&gt;
&lt;p&gt;Alas, while I had planned to write a comprehensive blog post on the script for publication today, I simply don't have time to do it correctly at the moment--but I wanted to get the script out on the 31st in order to create a kind of tradition. So instead of telling you everything it can do, I will ask that you instead take a look inside the script, where I've done a fairly good job documenting both the parameters and the outputs.&amp;nbsp; I'll do a followup post soon (I hope) and do a better job of telling you about the various options.&amp;nbsp; In the meantime, I'll leave you with a list of the script's major features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Wait stats collection&lt;/b&gt;, if you enable the GET_WAITS switch. This mode aggregates the various resources that the tasks associated with the session are waiting on, and lets you know how long the tasks have been waiting.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Collection of lock information&lt;/b&gt;, if you enable the GET_LOCKS switch. A lot of effort went into this particular feature--all of the locks for each session are aggregated in an XML format, and work is done to map the various identifiers associated with each lock to actual object names so that you don't have to do the footwork yourself.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Information about sleeping SPIDs&lt;/b&gt; holding open transactions, if you enable the GET_TRANSACTION_INFO switch. If you're being blocked by a SPID that is not active, you should be able to find out about it. This option lets you do it.&amp;nbsp; As a bonus, it also pulls information about transaction log writes in any database in which the transaction has done a write.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Collection of the "outer" command/batch&lt;/b&gt;, if you enable the GET_OUTER_COMMAND switch. One of the comments on the script I posted last year asked why, if you issue SQL like "ALTER TABLE dbo.xx ALTER COLUMN yyy FLOAT NULL", you'll end up with statement text that looks like "UPDATE [zzz].[dbo].[xxx] SET [yyy] = [yyy]". This is an internal representation of what's actually happening, but in many cases is not esepecially useful for end-users. So if you want to see what was actually run, now you can.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Every expensive or potentially expensive option is now parameterized&lt;/b&gt;. I spent a lot of time tweaking performance and with no options running the thing is pretty fast. Enable some options--especially lock collection--and it will slow down considerably, so use these advanced features with care.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Enjoy, and &lt;b&gt;please keep sending feedback&lt;/b&gt;!&amp;nbsp; Let me know what else you would like to see, if you find bugs, etc.&amp;nbsp; I'll post updated versions as major changes are made. &lt;/p&gt;
&lt;p&gt;To finish I would like to thank a few of the people who had an impact on the evolution of this script over the past&amp;nbsp;12 months: Michael Condon, &lt;a href="http://sommarskog.se/"&gt;Erland Sommarskog&lt;/a&gt;, &lt;a href="http://sqlblog.com/blogs/aaron_bertrand/default.aspx"&gt;Aaron Bertrand&lt;/a&gt;, &lt;a href="http://sqlblog.com/blogs/louis_davidson/default.aspx"&gt;Louis Davidson&lt;/a&gt;, and &lt;a href="http://jmkehayias.blogspot.com/"&gt;Jonathan Kehayias&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have a great 2009, everyone! &lt;br&gt;&lt;/p&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=A Gift of Script for 2009: Who is Active, Redux&amp;amp;body=Seen on SQLblog.com: %0A%0A%09A Gift of Script for 2009: Who is Active, Redux%0A%0Ahttp://sqlblog.com/blogs/adam_machanic/archive/2008/12/31/a-gift-of-script-for-2009-who-is-active-redux.aspx" target="_blank" title = "Email A Gift of Script for 2009: Who is Active, Redux"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/adam_machanic/archive/2008/12/31/a-gift-of-script-for-2009-who-is-active-redux.aspx&amp;amp;title=A+Gift+of+Script+for+2009%3a+Who+is+Active%2c+Redux" target="_blank" title = "Submit A Gift of Script for 2009: Who is Active, Redux to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/adam_machanic/archive/2008/12/31/a-gift-of-script-for-2009-who-is-active-redux.aspx&amp;amp;phase=2" target="_blank" title = "Submit A Gift of Script for 2009: Who is Active, Redux to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/adam_machanic/archive/2008/12/31/a-gift-of-script-for-2009-who-is-active-redux.aspx&amp;amp;title=A+Gift+of+Script+for+2009%3a+Who+is+Active%2c+Redux" target="_blank" title = "Submit A Gift of Script for 2009: Who is Active, Redux to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/adam_machanic/archive/2008/12/31/a-gift-of-script-for-2009-who-is-active-redux.aspx&amp;amp;title=A+Gift+of+Script+for+2009%3a+Who+is+Active%2c+Redux" target="_blank" title = "Submit A Gift of Script for 2009: Who is Active, Redux to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/adam_machanic/archive/2008/12/31/a-gift-of-script-for-2009-who-is-active-redux.aspx&amp;amp;title=A+Gift+of+Script+for+2009%3a+Who+is+Active%2c+Redux&amp;amp;;top=1" target="_blank" title = "Add A Gift of Script for 2009: Who is Active, Redux to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10841" width="1" height="1"&gt;</description><enclosure url="http://sqlblog.com/blogs/adam_machanic/attachment/10841.ashx" length="8670" type="application/x-zip-compressed" /><category domain="http://sqlblog.com/blogs/adam_machanic/archive/tags/activity/default.aspx">activity</category><category domain="http://sqlblog.com/blogs/adam_machanic/archive/tags/blocking/default.aspx">blocking</category><category domain="http://sqlblog.com/blogs/adam_machanic/archive/tags/DMVs/default.aspx">DMVs</category><category domain="http://sqlblog.com/blogs/adam_machanic/archive/tags/monitoring/default.aspx">monitoring</category><category domain="http://sqlblog.com/blogs/adam_machanic/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlblog.com/blogs/adam_machanic/archive/tags/Scripts/default.aspx">Scripts</category><category domain="http://sqlblog.com/blogs/adam_machanic/archive/tags/who+is+active/default.aspx">who is active</category></item><item><title>Did You Know? You, too, can be a Geek!</title><link>http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/30/you-too-can-be-a-geek.aspx</link><pubDate>Wed, 31 Dec 2008 03:33:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10824</guid><dc:creator>Kalen Delaney</dc:creator><slash:comments>5</slash:comments><description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Danny Gould has a new (beta) version of his Internals Viewer, that you can download from Codeplex at &lt;A title=http://www.codeplex.com/InternalsViewer href="http://www.codeplex.com/InternalsViewer"&gt;http://www.codeplex.com/InternalsViewer&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I've just started playing around with it, and the coolest thing is that it integrates right with your Management Studio!&lt;/P&gt;
&lt;P&gt;The codeplex site include a Troubleshooting Guide and a User Guide.&lt;/P&gt;
&lt;P&gt;It does look like it can display SQL Server 2008 data pages that have been compressed. For pages with ROW compression you'll be able to see the data, but for PAGE compression, no translation is done. &lt;/P&gt;
&lt;P&gt;You can also request to have information from the transaction log displayed, but it's not the same as the 3rd party log reader tools, in that it doesn't give you the complete set of values that were inserted&amp;nbsp; or deleted. &lt;/P&gt;
&lt;P&gt;I'm still exploring its nuances, and now you can too!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Have fun!&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff00ff size=4&gt;~Kalen&lt;/FONT&gt;&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=Did You Know? You, too, can be a Geek!&amp;amp;body=Seen on SQLblog.com: %0A%0A%09Did You Know? You, too, can be a Geek!%0A%0Ahttp://sqlblog.com/blogs/kalen_delaney/archive/2008/12/30/you-too-can-be-a-geek.aspx" target="_blank" title = "Email Did You Know? You, too, can be a Geek!"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/30/you-too-can-be-a-geek.aspx&amp;amp;title=Did+You+Know%3f+You%2c+too%2c+can+be+a+Geek!" target="_blank" title = "Submit Did You Know? You, too, can be a Geek! to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/30/you-too-can-be-a-geek.aspx&amp;amp;phase=2" target="_blank" title = "Submit Did You Know? You, too, can be a Geek! to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/30/you-too-can-be-a-geek.aspx&amp;amp;title=Did+You+Know%3f+You%2c+too%2c+can+be+a+Geek!" target="_blank" title = "Submit Did You Know? You, too, can be a Geek! to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/30/you-too-can-be-a-geek.aspx&amp;amp;title=Did+You+Know%3f+You%2c+too%2c+can+be+a+Geek!" target="_blank" title = "Submit Did You Know? You, too, can be a Geek! to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/30/you-too-can-be-a-geek.aspx&amp;amp;title=Did+You+Know%3f+You%2c+too%2c+can+be+a+Geek!&amp;amp;;top=1" target="_blank" title = "Add Did You Know? You, too, can be a Geek! to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10824" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/kalen_delaney/archive/tags/internals/default.aspx">internals</category></item><item><title>Performance impact: file fragmentation and SAN - Part VI</title><link>http://sqlblog.com/blogs/linchi_shea/archive/2008/12/30/performance-impact-file-fragmentation-and-san-part-vi.aspx</link><pubDate>Tue, 30 Dec 2008 21:19:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10822</guid><dc:creator>Linchi Shea</dc:creator><slash:comments>3</slash:comments><description>&lt;P&gt;&lt;STRONG&gt;A script to fragment a test file&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Well, this post won't cover any actual test results and is not specific to SAN. But in the spirit of full disclosure, I've attached the script I used to control the fragmentation level of&amp;nbsp;the test files mentioned in this series of posts. The script is written in Perl, but can be easily done in any language.&lt;/P&gt;
&lt;P&gt;The script does not itself fragment any&amp;nbsp;file. Rather, it fragments the entire disk drive into&amp;nbsp;non-contiguous blocks, or fragments,&amp;nbsp;of a given size.&amp;nbsp;A file (such as a database file) created afterwards is then necessarily fragmented into these&amp;nbsp;fragments.&lt;/P&gt;
&lt;P&gt;It takes three parameters at the beginning of the script: (1) $DRIVE to specify which drive the test file will be placed, (2) $FRAGMENT_SIZE to specify the size of the fragments in bytes, and (3) $FREE_SIZE to specify how much free space you want to have after the script completes. So if you want to&amp;nbsp;examine the behavior of a 10GB test file that is fragmented into 128KB fragments, you may want to specify $FREE_SIZE to be slightly bigger than 10GB.&lt;/P&gt;
&lt;P&gt;The script begins by creating an empty directory tree with enough directories so that each directory will hold 200 files of the specified size. It then proceeds to create 200 files in each of these directories until the drive is completely filled up. Finally, it randomly deletes some of these files until the free space on the drive reaches the value specified by $FREE_SIZE.&lt;/P&gt;
&lt;P&gt;Hope you&amp;nbsp;find this script useful in case you'd like to check&amp;nbsp;out the impact of file fragmentation yourself.&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=Performance impact: file fragmentation and SAN - Part VI&amp;amp;body=Seen on SQLblog.com: %0A%0A%09Performance impact: file fragmentation and SAN - Part VI%0A%0Ahttp://sqlblog.com/blogs/linchi_shea/archive/2008/12/30/performance-impact-file-fragmentation-and-san-part-vi.aspx" target="_blank" title = "Email Performance impact: file fragmentation and SAN - Part VI"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/30/performance-impact-file-fragmentation-and-san-part-vi.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+-+Part+VI" target="_blank" title = "Submit Performance impact: file fragmentation and SAN - Part VI to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/30/performance-impact-file-fragmentation-and-san-part-vi.aspx&amp;amp;phase=2" target="_blank" title = "Submit Performance impact: file fragmentation and SAN - Part VI to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/30/performance-impact-file-fragmentation-and-san-part-vi.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+-+Part+VI" target="_blank" title = "Submit Performance impact: file fragmentation and SAN - Part VI to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/30/performance-impact-file-fragmentation-and-san-part-vi.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+-+Part+VI" target="_blank" title = "Submit Performance impact: file fragmentation and SAN - Part VI to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/30/performance-impact-file-fragmentation-and-san-part-vi.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+-+Part+VI&amp;amp;;top=1" target="_blank" title = "Add Performance impact: file fragmentation and SAN - Part VI to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10822" width="1" height="1"&gt;</description><enclosure url="http://sqlblog.com/blogs/linchi_shea/attachment/10822.ashx" length="968" type="application/x-zip-compressed" /><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Disk+I_2F00_O/default.aspx">Disk I/O</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Perl/default.aspx">Perl</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Scripts/default.aspx">Scripts</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Storage/default.aspx">Storage</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Restoring master database</title><link>http://sqlblog.com/blogs/michael_zilberstein/archive/2008/12/30/10816.aspx</link><pubDate>Tue, 30 Dec 2008 17:03:44 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10816</guid><dc:creator>Michael Zilberstein</dc:creator><slash:comments>14</slash:comments><description>Disclaimer: I'm not an infrastructure DBA.Probably everything below is just bullshit. Recently our talented IT guys destroyed disk on a virtual machine. They chose the disk carefully - it was the one with master database. How do you restore master db from backup? Start SQL Server service from command line in single user mode and execute RESTORE DATABASE command. OK, start in single user mode fails because it doesn't find master database files. At this point I would like to take backup file and instead...(&lt;a href="http://sqlblog.com/blogs/michael_zilberstein/archive/2008/12/30/10816.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10816" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/michael_zilberstein/archive/tags/Internals/default.aspx">Internals</category><category domain="http://sqlblog.com/blogs/michael_zilberstein/archive/tags/Misc/default.aspx">Misc</category></item><item><title>A response to Linchi Shea's excellent posts on fragmentation</title><link>http://sqlblog.com/blogs/james_luetkehoelter/archive/2008/12/29/a-response-to-linchi-shea-s-excellent-posts-on-fragmentation.aspx</link><pubDate>Mon, 29 Dec 2008 23:08:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10796</guid><dc:creator>James Luetkehoelter</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;In case this is your first visit to SQLBlog.com, Linchi Shea does very methodical analysis of the performance and behaviour of disk arrays. His most recent &lt;A class="" href="http://sqlblog.com/blogs/linchi_shea/archive/2008/12/29/performance-impact-file-fragmentation-and-san-part-v.aspx" target=_blank&gt;listings&lt;/A&gt;&amp;nbsp;specifically explore file fragmentation and its affects on performance on storage. The posts sort of&amp;nbsp;give one the impression that there is no significant impact on performance when the disk storage is a SAN. I'd be inclined to agree, and his data certainly backs that up. But in many in the posts he does compare direct attached storage, where we do see degradation.&lt;/P&gt;
&lt;P&gt;I'm writing this little blurb because my hunch is, at least from what I've encountered, the majority of SQL installations use DAS or "quasi-SANs" (Linchi, I'm sure you've run into some of these devices that claim to be SANs but are sorely lacking). In those cases, especially ones where databases are unmonitored and auto-grow occurs on a regular basis (or transaction log auto-grow/manual shrink accordianism), Linchi actually demonstrates that there will be performance degradation. This is one of the most common performance issues I run into out in the "jungle". Fragmentation. &lt;/P&gt;
&lt;P&gt;My message - those of you on direct storage or if you aren't certain of fragmentation affects, error on the safe side and defragment. Or at the very least investigate how physically fragmented your arrays are. Please.&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=A response to Linchi Shea's excellent posts on fragmentation&amp;amp;body=Seen on SQLblog.com: %0A%0A%09A response to Linchi Shea's excellent posts on fragmentation%0A%0Ahttp://sqlblog.com/blogs/james_luetkehoelter/archive/2008/12/29/a-response-to-linchi-shea-s-excellent-posts-on-fragmentation.aspx" target="_blank" title = "Email A response to Linchi Shea's excellent posts on fragmentation"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/james_luetkehoelter/archive/2008/12/29/a-response-to-linchi-shea-s-excellent-posts-on-fragmentation.aspx&amp;amp;title=A+response+to+Linchi+Shea%27s+excellent+posts+on+fragmentation" target="_blank" title = "Submit A response to Linchi Shea's excellent posts on fragmentation to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/james_luetkehoelter/archive/2008/12/29/a-response-to-linchi-shea-s-excellent-posts-on-fragmentation.aspx&amp;amp;phase=2" target="_blank" title = "Submit A response to Linchi Shea's excellent posts on fragmentation to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/james_luetkehoelter/archive/2008/12/29/a-response-to-linchi-shea-s-excellent-posts-on-fragmentation.aspx&amp;amp;title=A+response+to+Linchi+Shea%27s+excellent+posts+on+fragmentation" target="_blank" title = "Submit A response to Linchi Shea's excellent posts on fragmentation to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/james_luetkehoelter/archive/2008/12/29/a-response-to-linchi-shea-s-excellent-posts-on-fragmentation.aspx&amp;amp;title=A+response+to+Linchi+Shea%27s+excellent+posts+on+fragmentation" target="_blank" title = "Submit A response to Linchi Shea's excellent posts on fragmentation to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/james_luetkehoelter/archive/2008/12/29/a-response-to-linchi-shea-s-excellent-posts-on-fragmentation.aspx&amp;amp;title=A+response+to+Linchi+Shea%27s+excellent+posts+on+fragmentation&amp;amp;;top=1" target="_blank" title = "Add A response to Linchi Shea's excellent posts on fragmentation to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10796" width="1" height="1"&gt;</description></item><item><title>Performance impact: file fragmentation and SAN – Part V</title><link>http://sqlblog.com/blogs/linchi_shea/archive/2008/12/29/performance-impact-file-fragmentation-and-san-part-v.aspx</link><pubDate>Mon, 29 Dec 2008 21:36:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10793</guid><dc:creator>Linchi Shea</dc:creator><slash:comments>4</slash:comments><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;SQL Server workloads&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;So far, the discussions in all the previous posts (&lt;/FONT&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/12/07/performance-impact-file-fragmentation-and-san.aspx"&gt;&lt;FONT face="Times New Roman" color=#606420 size=3&gt;1&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt;, &lt;/FONT&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/12/08/performance-impact-file-fragmentation-and-san-part-ii.aspx"&gt;&lt;FONT face="Times New Roman" color=#606420 size=3&gt;2&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt;, &lt;/FONT&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/12/10/performance-impact-file-fragmentation-and-san-part-iii.aspx"&gt;&lt;FONT face="Times New Roman" color=#606420 size=3&gt;3&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt;, and &lt;/FONT&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/12/22/performance-impact-file-fragmentation-and-san-part-iv.aspx"&gt;&lt;FONT face="Times New Roman" color=#606420 size=3&gt;4&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt;) on the performance impact of file fragmentation on a drive presented from a high-end enterprise-class disk array are related to disk I/O workloads. Ultimately, you want to know how file fragmentation may impact your SQL Server workloads.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;In this post, I share with you some results from running three SQL Server workloads: (1) database backups, (2) checkpoints, and (3) table scans. These SQL Server workloads were run in the same three test scenarios as used in all the previous four posts:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoList3 style="MARGIN:0in 0in 0pt 0.8in;"&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;Non-fragmented&lt;/B&gt;. The database files were created on an empty drive,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoList3 style="MARGIN:0in 0in 0pt 0.8in;"&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;2MB fragments&lt;/B&gt;. The database files were created on a drive whose free space had been fragmented into non-contiguous chunks with each chunk being contiguous and 2MB in size,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoList3 style="MARGIN:0in 0in 0pt 0.8in;"&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;128KB fragments&lt;/B&gt;. The database files were created on a drive whose free space had been fragmented into non-contiguous chunks with each chunk being contiguous and 128KB in size,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;The same database was used in all the tests. The database was about 9.5GB in size, and the table on which table scan was performed had 10 million rows and was about 4GB in size. DBCC DROPCLEANBUFFERS was run prior to each table scan. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;The following chart is a summary of the SQL Server workload test results:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://sqlblog.com/blogs/linchi_shea/attachment/10793.ashx"&gt; &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Clearly, file fragmentation did not have any significant performance impact on these SQL Server workloads. Because the performance of these workloads is dependent on the disk I/O throughput, we could have predicted this&amp;nbsp;from the results of our disk I/O tests as reported in the previous four posts. However, it’s still comforting to see the prediction validated with real data points.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;This concludes this series of posts on the performance impact of file fragmentation on a drive that is presented from a high-end enterprise class disk array. Overall, the impact was significantly less than what we have seen on a traditional directly attached disk drive. For I/O throughput, there was little to no impact. For I/O latency (or response time), file fragmentation can cause some I/O request to take much longer to complete.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;In a future post(s), I’ll explore whether the same holds true with a drive presented from a lower end disk array.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=Performance impact: file fragmentation and SAN – Part V&amp;amp;body=Seen on SQLblog.com: %0A%0A%09Performance impact: file fragmentation and SAN – Part V%0A%0Ahttp://sqlblog.com/blogs/linchi_shea/archive/2008/12/29/performance-impact-file-fragmentation-and-san-part-v.aspx" target="_blank" title = "Email Performance impact: file fragmentation and SAN – Part V"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/29/performance-impact-file-fragmentation-and-san-part-v.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+%e2%80%93+Part+V" target="_blank" title = "Submit Performance impact: file fragmentation and SAN – Part V to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/29/performance-impact-file-fragmentation-and-san-part-v.aspx&amp;amp;phase=2" target="_blank" title = "Submit Performance impact: file fragmentation and SAN – Part V to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/29/performance-impact-file-fragmentation-and-san-part-v.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+%e2%80%93+Part+V" target="_blank" title = "Submit Performance impact: file fragmentation and SAN – Part V to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/29/performance-impact-file-fragmentation-and-san-part-v.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+%e2%80%93+Part+V" target="_blank" title = "Submit Performance impact: file fragmentation and SAN – Part V to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/29/performance-impact-file-fragmentation-and-san-part-v.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+%e2%80%93+Part+V&amp;amp;;top=1" target="_blank" title = "Add Performance impact: file fragmentation and SAN – Part V to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10793" width="1" height="1"&gt;</description><enclosure url="http://sqlblog.com/blogs/linchi_shea/attachment/10793.ashx" length="13376" type="image/gif" /><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Disk+I_2F00_O/default.aspx">Disk I/O</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/SAN/default.aspx">SAN</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Storage/default.aspx">Storage</category></item><item><title>Season's Greetings!</title><link>http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/29/seasons-greetings.aspx</link><pubDate>Mon, 29 Dec 2008 18:50:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10792</guid><dc:creator>Kalen Delaney</dc:creator><slash:comments>3</slash:comments><description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I was catching up on my blog reading and came across a very nice post on &lt;A href="http://blogs.technet.com/wardpond/archive/2008/12/24/a-seasonal-query.aspx" target=_blank&gt;Ward Pond's blog&lt;/A&gt;;&amp;nbsp; he gives us some TSQL code that produces a holiday message. It's a few days late, but it's the thought that counts, right?&lt;/P&gt;
&lt;P&gt;I did have a few problems with the code on Ward's site... when I copied and pasted to SSMS, there were no line breaks at all, so everything appeared as one huge long line. That made it hard to interpret, and hard to troubleshoot when a syntax error was reported. It turned out that not only did no line breaks appear, but whatever was in the code to break the lines before the word 'cross' got swallowed up, so the last part of the code was:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;from firstTablecross join SecondTablecross join ThirdTablecross join ForthTablewhere therow%2!=0&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So I fixed up the code to add line breaks, to separate the 'cross' from the preceding table names, and to fix a spelling error. &lt;/P&gt;
&lt;P&gt;Enjoy... and thanks, Ward! &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;with FirstTable as (select top 14 row_number() &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; over (order by name) therow &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from master.sys.objects)&lt;BR&gt;&amp;nbsp;&amp;nbsp; , SecondTable as (select replicate(char(32),15) theLine)&lt;BR&gt;&amp;nbsp;&amp;nbsp; , ThirdTable as (Select replicate(char(124),3) theOtherLine)&lt;BR&gt;&amp;nbsp;&amp;nbsp; , FourthTable as (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select&amp;nbsp; (select left(db_name(4),1) ) + (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select substring(db_name(2),2,1) ) + (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select replicate(substring(db_name(1),6,1),2) ) + (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select replace(schema_name(4),'s','') ) + (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select char(max_length * 2)&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from master.sys.types &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where system_type_id = 36) + (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select top 1 substring(wait_type,10,2) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from master.sys.dm_os_wait_stats &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where wait_type like 'PageIO%' ) + (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select substring(@@version,4,1) ) + (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select substring(object_name(55),4,2) ) + (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select convert(char(1),(reverse(convert(char(7),name)))) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from sys.configurations &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where configuration_id = 124 ) + (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select left(db_name(1),3) ) theEnd &lt;BR&gt;&amp;nbsp; )&lt;BR&gt;select case therow&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when 11 then &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stuff( theLine,(datalength(theLine)/2) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - 1,3,TheOtherLine)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when 13 then upper(theEnd )&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else stuff( theLine,(datalength(theLine)/2) - &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (theRow/2),therow,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; replicate(char(42),therow)) end ' '&lt;BR&gt;from firstTable &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cross join SecondTable &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cross join ThirdTable &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cross join FourthTable&lt;BR&gt;where therow%2!=0;&lt;/FONT&gt; 
&lt;P&gt;Happy New Year!&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff00ff size=4&gt;~Kalen&lt;/FONT&gt;&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=Season's Greetings!&amp;amp;body=Seen on SQLblog.com: %0A%0A%09Season's Greetings!%0A%0Ahttp://sqlblog.com/blogs/kalen_delaney/archive/2008/12/29/seasons-greetings.aspx" target="_blank" title = "Email Season's Greetings!"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/29/seasons-greetings.aspx&amp;amp;title=Season%27s+Greetings!" target="_blank" title = "Submit Season's Greetings! to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/29/seasons-greetings.aspx&amp;amp;phase=2" target="_blank" title = "Submit Season's Greetings! to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/29/seasons-greetings.aspx&amp;amp;title=Season%27s+Greetings!" target="_blank" title = "Submit Season's Greetings! to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/29/seasons-greetings.aspx&amp;amp;title=Season%27s+Greetings!" target="_blank" title = "Submit Season's Greetings! to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/29/seasons-greetings.aspx&amp;amp;title=Season%27s+Greetings!&amp;amp;;top=1" target="_blank" title = "Add Season's Greetings! to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10792" width="1" height="1"&gt;</description></item><item><title>LINQ to SQL: Does it have much of a future?</title><link>http://sqlblog.com/blogs/greg_low/archive/2008/12/24/linq-to-sql-does-it-have-much-of-a-future.aspx</link><pubDate>Tue, 23 Dec 2008 22:10:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10736</guid><dc:creator>Greg Low</dc:creator><slash:comments>8</slash:comments><description>&lt;P&gt;Kevin Kline &lt;A class="" href="http://sqlblog.com/blogs/kevin_kline/archive/2008/12/23/linq-enabling-or-entangling.aspx"&gt;recently posted&lt;/A&gt;, wondering about the directions for LINQ.&lt;/P&gt;
&lt;P&gt;When people refer to LINQ, they're often referring to "LINQ to SQL" instead. &lt;/P&gt;
&lt;P&gt;LINQ as a language enhancement is pretty cool. It provides a way to easy navigate enumerable objects. The only thing that puzzles me is why they picked SQL-like syntax for this instead of something more appropriate for objects. &lt;/P&gt;
&lt;P&gt;On the other hand, LINQ to SQL I can't get excited about. The main issues are that it's tied to SQL Server and only gives you a one-to-one mapping of tables to objects. That leaves you with either a lousy database design&amp;nbsp;or a lousy object model. &lt;/P&gt;
&lt;P&gt;The easiest example is anything that involves many to many relationships. If I have a flights table and a passengers table, I'd typically have a linking table (like flightmanifests) that records which passengers are on which flights. That's good database design but I wouldn't want an object model based directly on those three tables. What I'd want at the object level is a passenger object with a flights collection and a flight object with a passengers collection. &lt;/P&gt;
&lt;P&gt;The Entity Framework lets you cope with both the issues mentioned and seems to be more likely to be the direction that Microsoft will keep heading. It also adds some interesting constructs in the ESQL language. However, its generic nature means you need to work with a very constrained set of data types. You lose the rich data types available with SQL Server in the trade off with&amp;nbsp;the ability to write more generic code.&lt;/P&gt;
&lt;P&gt;From the database end, LINQ to SQL can generate quite poor TSQL and the way people often use it ends up causing plan cache pollution issues, much the same as anyone using AddWithValue() to add parameters to a SqlParameters collection in ADO.NET would. &lt;/P&gt;
&lt;P&gt;Every time I show people the TSQL code generated from some simple LINQ to SQL queries, I see two reactions. People with a developer background usually say "I'm glad I didn't have to write that". People with a database background say "No-one should write that - it's horrible code". And LINQ to Entities generates even more generic code (as you would imagine it needs to when it doesn't even know what database engine it's targeting).&lt;/P&gt;
&lt;P&gt;This is usually all justified by increased developer productivity. "As long as it works well enough and it's done quickly, who cares if what's going on under the covers isn't great?" And that's 100% true for small or simple applications. However, the places I see Microsoft pushing this technology is to ISVs and large enterprise clients. These are likely to be the people it's least appropriate for.&lt;/P&gt;
&lt;P&gt;The ADO.NET group seems to have adopted LINQ to SQL now but I know they really don't love it and the Entity Framework is what they're interested in. So I can't see LINQ to SQL having much of a future at all. LINQ to Entities is much more likely to stay around.&lt;/P&gt;
&lt;P&gt;The other big issue I see in this area is maintenance. Microsoft have made big strides with the Database Edition of Visual Studio Team System but every time I ask questions about what the plans are for allowing it to "see" all the mapping files from these coding technologies, I get very blank stares back. Many DBAs can't make any changes to their databases today because they have a sea of Access applications all over the organisation and they don't know what will break when they change something. Are LINQ to SQL and Entity Framework mapping files going to be the next generation of Access-database-style management issues?&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=LINQ to SQL: Does it have much of a future?&amp;amp;body=Seen on SQLblog.com: %0A%0A%09LINQ to SQL: Does it have much of a future?%0A%0Ahttp://sqlblog.com/blogs/greg_low/archive/2008/12/24/linq-to-sql-does-it-have-much-of-a-future.aspx" target="_blank" title = "Email LINQ to SQL: Does it have much of a future?"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/greg_low/archive/2008/12/24/linq-to-sql-does-it-have-much-of-a-future.aspx&amp;amp;title=LINQ+to+SQL%3a+Does+it+have+much+of+a+future%3f" target="_blank" title = "Submit LINQ to SQL: Does it have much of a future? to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/greg_low/archive/2008/12/24/linq-to-sql-does-it-have-much-of-a-future.aspx&amp;amp;phase=2" target="_blank" title = "Submit LINQ to SQL: Does it have much of a future? to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/greg_low/archive/2008/12/24/linq-to-sql-does-it-have-much-of-a-future.aspx&amp;amp;title=LINQ+to+SQL%3a+Does+it+have+much+of+a+future%3f" target="_blank" title = "Submit LINQ to SQL: Does it have much of a future? to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/greg_low/archive/2008/12/24/linq-to-sql-does-it-have-much-of-a-future.aspx&amp;amp;title=LINQ+to+SQL%3a+Does+it+have+much+of+a+future%3f" target="_blank" title = "Submit LINQ to SQL: Does it have much of a future? to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/greg_low/archive/2008/12/24/linq-to-sql-does-it-have-much-of-a-future.aspx&amp;amp;title=LINQ+to+SQL%3a+Does+it+have+much+of+a+future%3f&amp;amp;;top=1" target="_blank" title = "Add LINQ to SQL: Does it have much of a future? to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10736" width="1" height="1"&gt;</description></item><item><title>More updates for SQL Server 2005 Service Pack 3</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2008/12/23/more-updates-for-sql-server-2005-service-pack-3.aspx</link><pubDate>Tue, 23 Dec 2008 20:13:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10729</guid><dc:creator>AaronBertrand</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;As promised, upon return from a trip to the frozen tundra of Northern Ontario, I am posting the latest updates from last week's release of SQL Server 2005 Service Pack 3.&amp;nbsp; For those who have been waiting to test the service pack until the post-SP3 cumulative update is available, you can get it in &lt;a href="http://support.microsoft.com/kb/959195" title="KB #959195" target="_blank"&gt;KB #959195&lt;/a&gt; and read more about it over at the &lt;a href="http://blogs.msdn.com/sqlreleaseservices/archive/2008/12/20/cumulative-update-1-for-sql-server-2005-service-pack-3.aspx" title="http://blogs.msdn.com/sqlreleaseservices/archive/2008/12/20/cumulative-update-1-for-sql-server-2005-service-pack-3.aspx" target="_blank"&gt;SQL Server Release Services blog&lt;/a&gt;.&amp;nbsp; I apologize for being a few days behind, as the release was pushed out on Saturday, but I had very little access to anything during my trip.&lt;/p&gt;&lt;p&gt;For those of you keeping track, SP3 would bump your SQL Server instance to build # 9.00.4035, while the CU#1 update will bump it all the way up to 9.00.4207. &lt;br&gt;&lt;/p&gt;&lt;p&gt;Also, if you are not ready to migrate to Service Pack 3, there is a security bulletin you should be aware of, surrounding an exploit using the extended stored procedure&lt;i&gt;&lt;span style="text-decoration:none;"&gt; sp_replwritetovarbin&lt;/span&gt;&lt;/i&gt;.&amp;nbsp; You can read about the issue &lt;font size="2"&gt;in &lt;/font&gt;&lt;font size="2"&gt;&lt;a href="http://www.microsoft.com/technet/security/advisory/961040.mspx" title="http://www.microsoft.com/technet/security/advisory/961040.mspx" target="_blank"&gt;Microsoft Security Advisory (961040)&lt;/a&gt; and get some more background information &lt;/font&gt;&lt;font size="2"&gt;at the &lt;a href="http://blogs.technet.com/msrc/archive/2008/12/22/microsoft-security-advisory-961040.aspx" title="http://blogs.technet.com/msrc/archive/2008/12/22/microsoft-security-advisory-961040.aspx" target="_blank"&gt;MSRC&lt;/a&gt; and &lt;a href="http://blogs.technet.com/swi/archive/2008/12/22/more-information-about-the-sql-stored-procedure-vulnerability.aspx" title="http://blogs.technet.com/swi/archive/2008/12/22/more-information-about-the-sql-stored-procedure-vulnerability.aspx" target="_blank"&gt;SVRD&lt;/a&gt; blogs.&lt;/font&gt;&lt;b&gt;&lt;font size="2"&gt;&amp;nbsp; &lt;/font&gt;&lt;/b&gt;&lt;font size="2"&gt;Note that SQL Server 2005 instances patched with SP3 or later are not affected by this vulnerability, nor is any RTM+ build of SQL Server 2008.&lt;/font&gt;&lt;b&gt;&lt;font size="2"&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=More updates for SQL Server 2005 Service Pack 3&amp;amp;body=Seen on SQLblog.com: %0A%0A%09More updates for SQL Server 2005 Service Pack 3%0A%0Ahttp://sqlblog.com/blogs/aaron_bertrand/archive/2008/12/23/more-updates-for-sql-server-2005-service-pack-3.aspx" target="_blank" title = "Email More updates for SQL Server 2005 Service Pack 3"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/aaron_bertrand/archive/2008/12/23/more-updates-for-sql-server-2005-service-pack-3.aspx&amp;amp;title=More+updates+for+SQL+Server+2005+Service+Pack+3" target="_blank" title = "Submit More updates for SQL Server 2005 Service Pack 3 to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/aaron_bertrand/archive/2008/12/23/more-updates-for-sql-server-2005-service-pack-3.aspx&amp;amp;phase=2" target="_blank" title = "Submit More updates for SQL Server 2005 Service Pack 3 to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/aaron_bertrand/archive/2008/12/23/more-updates-for-sql-server-2005-service-pack-3.aspx&amp;amp;title=More+updates+for+SQL+Server+2005+Service+Pack+3" target="_blank" title = "Submit More updates for SQL Server 2005 Service Pack 3 to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/aaron_bertrand/archive/2008/12/23/more-updates-for-sql-server-2005-service-pack-3.aspx&amp;amp;title=More+updates+for+SQL+Server+2005+Service+Pack+3" target="_blank" title = "Submit More updates for SQL Server 2005 Service Pack 3 to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/aaron_bertrand/archive/2008/12/23/more-updates-for-sql-server-2005-service-pack-3.aspx&amp;amp;title=More+updates+for+SQL+Server+2005+Service+Pack+3&amp;amp;;top=1" target="_blank" title = "Add More updates for SQL Server 2005 Service Pack 3 to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10729" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/aaron_bertrand/archive/tags/patches/default.aspx">patches</category><category domain="http://sqlblog.com/blogs/aaron_bertrand/archive/tags/security/default.aspx">security</category><category domain="http://sqlblog.com/blogs/aaron_bertrand/archive/tags/service+pack+3/default.aspx">service pack 3</category><category domain="http://sqlblog.com/blogs/aaron_bertrand/archive/tags/SP3/default.aspx">SP3</category><category domain="http://sqlblog.com/blogs/aaron_bertrand/archive/tags/SQL+Server+2005+SP3/default.aspx">SQL Server 2005 SP3</category></item><item><title>LINQ: Enabling or Entangling?</title><link>http://sqlblog.com/blogs/kevin_kline/archive/2008/12/23/linq-enabling-or-entangling.aspx</link><pubDate>Tue, 23 Dec 2008 19:49:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10730</guid><dc:creator>KKline</dc:creator><slash:comments>8</slash:comments><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;FONT face="Times New Roman" size=3&gt;There’s been a lot of positive press for LINQ, such as the article about LINQ by Mike Otey at &lt;/FONT&gt;&lt;A href="http://www.sqlmag.com/Article/ArticleID/48759/sql_server_48759.html"&gt;&lt;FONT face="Times New Roman" color=#800080 size=3&gt;http://www.sqlmag.com/Article/ArticleID/48759/sql_server_48759.html&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt;.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;You can also find lots of glowing reviews and info about LINQ by Troy Magennis at &lt;/FONT&gt;&lt;A href="http://blog.aspiring-technology.com/"&gt;&lt;FONT face="Times New Roman" color=#800080 size=3&gt;http://blog.aspiring-technology.com/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;I've been trying to figure out exactly how I feel about LINQ, along with several other developer-oriented technologies that Microsoft has launched over the years, such as CLR.&amp;nbsp; Ambivalence is the emotion that bubbles to the top most frequently.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;It's pretty obvious to me that Transact-SQL is the red-headed step child within Microsoft's overall ranking of languages.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;One of the big problems I have with Microsoft’s approach is that it’s too tactical.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Every 2-3 years, Microsoft launches TNBT (“the next big thing”).&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;TNBT will make our code better, our developers faster, our applications more efficient, walk your dog, wash your cat, tie your shoelaces, end world hunger, and otherwise make everything better.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;The only problem is that TNBT is usually put together by one subteam of a major group, such as the languages group inside of the SQL Server development team.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;These small teams, while brilliant, often don’t get the top-down support to institute a major sweeping change to how things work.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Consequently, we get a feature set that, while useful, doesn’t give us &lt;I style="mso-bidi-font-style:normal;"&gt;everything&lt;/I&gt; we need to sweep out the old and introduce the new.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="COLOR:black;"&gt;This sort of 50% solution manifests itself in a lot of different ways, usually by making some aspects of the development process better and other aspects worse.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;My friend and fellow SQL Server MVP Andrew Kelly has an interesting blog post and subsequent comments at &lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://sqlblog.com/blogs/andrew_kelly/archive/2007/09/06/linq-to-the-rescue.aspx"&gt;&lt;FONT face="Times New Roman" color=#800080 size=3&gt;http://sqlblog.com/blogs/andrew_kelly/archive/2007/09/06/linq-to-the-rescue.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt; which strongly illustrates this idea.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Basically, (most) developers still don’t understand the basics of building an efficient database solution.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;The thing that most improves database applications is proper planning and design.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;But tools like LINQ and the entity framework most obviously help developers speed up development process, in effect encouraging even less planning and design than ever before.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;A recipe for disaster?&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Almost certainly.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;I hate to think that the language that I’m best at is the most likely to lose overall support.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;On the other hand, I’d love to get in on TNBT (“the next big thing”) while it’s still in its genesis.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;However, figuring out what, exactly, they are planning to replace Transact-SQL with is yet to be seen since each new offering is, IMO, sadly lacking in value.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;As an administrator, I’m putting a lot of eggs into the PowerShell basket – the first major scripting/programming language in many years that I’m taking the time to get really good at.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;However, I still don’t think we’ve hit TNBT in development languages and we probably won’t until Microsoft takes the time to convene a high-powered team composed of members from both the SQL Server and Visual Studio organizations.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=LINQ: Enabling or Entangling?&amp;amp;body=Seen on SQLblog.com: %0A%0A%09LINQ: Enabling or Entangling?%0A%0Ahttp://sqlblog.com/blogs/kevin_kline/archive/2008/12/23/linq-enabling-or-entangling.aspx" target="_blank" title = "Email LINQ: Enabling or Entangling?"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/kevin_kline/archive/2008/12/23/linq-enabling-or-entangling.aspx&amp;amp;title=LINQ%3a+Enabling+or+Entangling%3f" target="_blank" title = "Submit LINQ: Enabling or Entangling? to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/kevin_kline/archive/2008/12/23/linq-enabling-or-entangling.aspx&amp;amp;phase=2" target="_blank" title = "Submit LINQ: Enabling or Entangling? to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/kevin_kline/archive/2008/12/23/linq-enabling-or-entangling.aspx&amp;amp;title=LINQ%3a+Enabling+or+Entangling%3f" target="_blank" title = "Submit LINQ: Enabling or Entangling? to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/kevin_kline/archive/2008/12/23/linq-enabling-or-entangling.aspx&amp;amp;title=LINQ%3a+Enabling+or+Entangling%3f" target="_blank" title = "Submit LINQ: Enabling or Entangling? to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/kevin_kline/archive/2008/12/23/linq-enabling-or-entangling.aspx&amp;amp;title=LINQ%3a+Enabling+or+Entangling%3f&amp;amp;;top=1" target="_blank" title = "Add LINQ: Enabling or Entangling? to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10730" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/kevin_kline/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://sqlblog.com/blogs/kevin_kline/archive/tags/SQL+Programming/default.aspx">SQL Programming</category></item><item><title>Did You Know? My Book Had Too Many Pages!</title><link>http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/22/too-many-pages.aspx</link><pubDate>Mon, 22 Dec 2008 21:58:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10703</guid><dc:creator>Kalen Delaney</dc:creator><slash:comments>15</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Some of you are aware that I am writing an (almost) weekly commentary for a &lt;a href="http://windowsitpro.com/email/" target="_blank"&gt;SQL Server Magazine e-newsletter&lt;/a&gt; called &lt;em&gt;SQL Server Magazine UPDATE&lt;/em&gt;.&amp;nbsp; I was told that I could write about anything related to SQL Server, but that turned out not to be true. There has to be at least some technical or business value to my commentary. A few weeks ago, I wrote a commentary about my publishers' page count limitations on my books, and it was rejected. :-( &lt;/p&gt; &lt;p&gt;So I guess I I'll just have to post it here, since so far Adam and Peter haven't rejected anything I've written. :-)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#0000ff"&gt;In my &lt;a href="http://www.sqlmag.com/Article/ArticleID/100037/Too_Much_SQL_Server_2008_Information.html" target="_blank"&gt;commentary of August 14&lt;/a&gt;, I talked about “Too much information”, and listed many different sources where you could get details about the features and behavior of SQL Server 2008. When I referred to “too much”, I was talking about too many different places to have to look. I am currently faced with a problem of having too much information in one book: my upcoming &lt;i&gt;SQL Server 2008 Internals&lt;/i&gt; book. However, it’s not readers or information seekers saying that it is too much, it is the publisher.&lt;/font&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;When I sign a contract to write a book, the publisher always asks for a page estimate. However, before I start researching a new topic, I have no idea how many pages it will take to explain the topic well. For example, before I knew anything at all about SQL Server 2008 compression, I had to figure out how many pages I was going to write about it. I always tell my editors that I just can’t say, and they reply that they just need an estimate, and not to worry. So I have always given a lower limit, trying to figure out the fewest number of pages I might need. I always assumed that the publisher wanted something in the contract that would assure that the book would have some substantial content, and not just be something fluffy written in a hurry to meet a deadline. So I always thought the estimate was a minimum. But I was wrong.&lt;/font&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;Suppose you have a contract to work for someone for 40 hours a week. Is that ‘at most’ 40 hours, or ‘at least’? Is your boss going to tell you to go home once you’ve been there for 40 hours? If I have a contract to work 20 hours on a project for a fixed rate and end up working 25, is my client going to complain? &lt;/font&gt; &lt;p&gt;&lt;font color="#0000ff"&gt;I was quite surprised when during my last month of writing my &lt;i&gt;SQL Server 2008 Internals&lt;/i&gt; book, my project editor wrote to me and said we already had 70% of the page count for only about 50% of the chapters, and she hoped the rest of the chapters would be very short. In fact, the longest chapter had not been submitted yet. So I had a week of not writing while we tried to figure out what we could cut, and we tried to get the publisher to agree to increase the limit. It was very hard to get an increase, because the lower number was in my contract.&lt;/font&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;This got me thinking of a line from the 1984 movie Amadeus, when Emperor Joseph tells Mozart: &lt;i&gt;“Your work is ingenious. It's quality work. And there are simply too many notes, that's all. Just cut a few and it will be perfect.”&lt;/i&gt; And Mozart replies: &lt;i&gt;“Which few did you have in mind?&lt;/i&gt;” &lt;/font&gt;&lt;a href="http://www.imdb.com/title/tt0086879/quotes"&gt;&lt;font color="#0000ff"&gt;http://www.imdb.com/title/tt0086879/quotes&lt;/font&gt;&lt;/a&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;The outline of the book had been carefully planned and all the co-authors and I had either finished writing or were almost finished. What researched, tested and polished information about SQL Server internals should we remove?&lt;/font&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;I finally came to a somewhat satisfactory arrangement with the editors for my &lt;i&gt;Internals&lt;/i&gt; book (although it’s still not clear if the introduction, foreword and index will count against the total or not), and I thought that I wouldn’t have to worry about anything like that for a while, because not every publisher could be so short-sighted as to sacrifice quality by trying to reduce immediate costs. But again I was wrong. I am also working as a co-editor on a book of SQL Server tips and best practices, written by a group of over 40 SQL Server MVPs. We are not getting any payment of any kind, but will donate all our royalties to a children’s charity. We’re also doing all the technical editing among ourselves, so the publisher has very little work to do. But I just found out that we also will have a severe page limit on this book. So again we have to decide what to cut and what to keep. &lt;/font&gt; &lt;p&gt;&lt;font color="#0000ff"&gt;I’m sure the publishers have their reasons for this limit (although it never came up on any of my earlier books), but it seems like reasons can always be re-evaluated. I’m just glad there are more places that my readers can look for information, so anything that doesn’t fit in my book, my readers can find out more about in my blog, in a class, in a conference session, or in one of the “too many different places” that I have already told you about. &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Happy Reading!  &lt;p&gt;&lt;font color="#ff00ff" size="4"&gt;~Kalen&lt;/font&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=Did You Know? My Book Had Too Many Pages!&amp;amp;body=Seen on SQLblog.com: %0A%0A%09Did You Know? My Book Had Too Many Pages!%0A%0Ahttp://sqlblog.com/blogs/kalen_delaney/archive/2008/12/22/too-many-pages.aspx" target="_blank" title = "Email Did You Know? My Book Had Too Many Pages!"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/22/too-many-pages.aspx&amp;amp;title=Did+You+Know%3f+My+Book+Had+Too+Many+Pages!" target="_blank" title = "Submit Did You Know? My Book Had Too Many Pages! to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/22/too-many-pages.aspx&amp;amp;phase=2" target="_blank" title = "Submit Did You Know? My Book Had Too Many Pages! to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/22/too-many-pages.aspx&amp;amp;title=Did+You+Know%3f+My+Book+Had+Too+Many+Pages!" target="_blank" title = "Submit Did You Know? My Book Had Too Many Pages! to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/22/too-many-pages.aspx&amp;amp;title=Did+You+Know%3f+My+Book+Had+Too+Many+Pages!" target="_blank" title = "Submit Did You Know? My Book Had Too Many Pages! to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/22/too-many-pages.aspx&amp;amp;title=Did+You+Know%3f+My+Book+Had+Too+Many+Pages!&amp;amp;;top=1" target="_blank" title = "Add Did You Know? My Book Had Too Many Pages! to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10703" width="1" height="1"&gt;</description></item><item><title>Performance impact: file fragmentation and SAN – Part IV</title><link>http://sqlblog.com/blogs/linchi_shea/archive/2008/12/22/performance-impact-file-fragmentation-and-san-part-iv.aspx</link><pubDate>Mon, 22 Dec 2008 16:34:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10688</guid><dc:creator>Linchi Shea</dc:creator><slash:comments>9</slash:comments><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;Lies, damned lies, and statistics!&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;If you have read my three previous posts (&lt;/FONT&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/12/07/performance-impact-file-fragmentation-and-san.aspx"&gt;&lt;FONT face="Times New Roman" color=#606420 size=3&gt;1&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt;, &lt;/FONT&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/12/08/performance-impact-file-fragmentation-and-san-part-ii.aspx"&gt;&lt;FONT face="Times New Roman" color=#606420 size=3&gt;2&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt;, &lt;/FONT&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/12/10/performance-impact-file-fragmentation-and-san-part-iii.aspx"&gt;&lt;FONT face="Times New Roman" color=#606420 size=3&gt;3&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt;), you may walk away with an impression that on a drive presented from a high-end enterprise class disk array, Windows file fragmentation does not have a significant performance impact. And I’ve given you empirical data—oh yeah, statistics—to support that impression. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;But that is not the whole story! No, I didn’t lie to you. The numbers I presented were solid. It’s just that the story is not yet finished. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;In these previous posts on the performance impact of file fragmentation, I presented the I/O throughput data as the evidence. The arguments were valid, especially we did see file fragmentation causing the I/O throughput to degrade in a directly attached storage. But I/O throughput is but one I/O performance metric, and it is not enough to look at the I/O throughput alone.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Let me start with an analogy. So suppose we have an eight-lane super highway going from New York City to Los Angles. As we pumping (okay, driving) more cars from NYC to LA, we take measure at a checkpoint in LA to find out how many cars are crossing that checkpoint every hour, i.e. we are measuring the throughput of the super highway. Now, instead of building the eight-lane super highway straight from NYC to LA, we have it take a detour via Boston. At that same checkpoint in LA, we again measure the throughput. Everything else being equal, we should get the same throughput. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;However, for a given car, the trip from NYC to LA would take a lot longer on this detoured highway. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;An I/O path is similar to a super highway. While its throughput is an important measure, how long it takes for an I/O request to complete—I/O latency or response time—is also an important measure. The question is, will file fragmentation take your I/O traffic for a detour?&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Indeed, empirical test data show that when a file is severely fragmented, the maximum I/O latency of large sequential reads and writes (e.g. 256KB reads and writes) can suffer significantly. The following chart shows the impact of file fragmentation on the maximum I/O latency. The data were obtained from the same tests whose throughputs were reported in &lt;/FONT&gt;&lt;A href="http://sqlblog.com/blogs/linchi_shea/archive/2008/12/10/performance-impact-file-fragmentation-and-san-part-iii.aspx"&gt;&lt;FONT face="Times New Roman" color=#606420 size=3&gt;Part III&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Times New Roman" size=3&gt; of this series of posts.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://sqlblog.com/blogs/linchi_shea/attachment/10688.ashx"&gt; &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Clearly, when the test file was fragmented into numerous 128KB disconnected pieces, some of the 256KB reads suffered terribly latency degradation. And if your applications happen to be issuing these I/Os, you would most likely experience a performance degradation regardless whether the I/O path can maintain the same I/O throughput.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;FONT face="Times New Roman" size=3&gt;Having some valid statistics may seem to add force to an argument, which makes it so much easier to be misleading if the whole story is not told, and technically everything is valid, and nobody is lying. By the way, this is a trick often employed by the vendors, who tend to conveniently ignore the bad news, or intentionally bury it with statistics on the good news. In my book, that would be lies, damned lies, and statistics.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=Performance impact: file fragmentation and SAN – Part IV&amp;amp;body=Seen on SQLblog.com: %0A%0A%09Performance impact: file fragmentation and SAN – Part IV%0A%0Ahttp://sqlblog.com/blogs/linchi_shea/archive/2008/12/22/performance-impact-file-fragmentation-and-san-part-iv.aspx" target="_blank" title = "Email Performance impact: file fragmentation and SAN – Part IV"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/22/performance-impact-file-fragmentation-and-san-part-iv.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+%e2%80%93+Part+IV" target="_blank" title = "Submit Performance impact: file fragmentation and SAN – Part IV to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/22/performance-impact-file-fragmentation-and-san-part-iv.aspx&amp;amp;phase=2" target="_blank" title = "Submit Performance impact: file fragmentation and SAN – Part IV to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/22/performance-impact-file-fragmentation-and-san-part-iv.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+%e2%80%93+Part+IV" target="_blank" title = "Submit Performance impact: file fragmentation and SAN – Part IV to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/22/performance-impact-file-fragmentation-and-san-part-iv.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+%e2%80%93+Part+IV" target="_blank" title = "Submit Performance impact: file fragmentation and SAN – Part IV to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/linchi_shea/archive/2008/12/22/performance-impact-file-fragmentation-and-san-part-iv.aspx&amp;amp;title=Performance+impact%3a+file+fragmentation+and+SAN+%e2%80%93+Part+IV&amp;amp;;top=1" target="_blank" title = "Add Performance impact: file fragmentation and SAN – Part IV to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10688" width="1" height="1"&gt;</description><enclosure url="http://sqlblog.com/blogs/linchi_shea/attachment/10688.ashx" length="5147" type="image/gif" /><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Disk+I_2F00_O/default.aspx">Disk I/O</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Performance/default.aspx">Performance</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/SAN/default.aspx">SAN</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Storage/default.aspx">Storage</category><category domain="http://sqlblog.com/blogs/linchi_shea/archive/tags/Testing/default.aspx">Testing</category></item><item><title>For better precision cast decimals before calculations</title><link>http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx</link><pubDate>Sun, 21 Dec 2008 03:38:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10671</guid><dc:creator>Alexander Kuznetsov</dc:creator><slash:comments>3</slash:comments><description>I frequently do calculations against decimal values. In some cases casting decimal values to float ASAP, prior to any calculations, yields better accuracy. For example, in the following script both expressions should return 12100.0: SELECT POWER ( POWER ( 12100.0 , 0.01 ), 100 ), POWER ( POWER ( CAST ( 12100.0 AS FLOAT ), 0.01 ), 100 ) --------------------------------------- ---------------------- 13780.6 12100 Another example demonstrates poor accuracy of averaging decimals as compared to averaging...(&lt;a href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10671" width="1" height="1"&gt;</description></item><item><title>Geek City: Splitting a page into multiple pages</title><link>http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/splitting-a-page-into-multiple-pages.aspx</link><pubDate>Sat, 20 Dec 2008 23:45:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10667</guid><dc:creator>Kalen Delaney</dc:creator><slash:comments>6</slash:comments><description>&lt;P&gt;You know about page splits... if a table has a clustered index, any new row has to be inserted into the appropriate page, based on the clustered index key order. However, if the page where the new row belongs is full, SQL Server will split the page into two pages, and then put the new row on one of the now half empty (I know, I know, I should say "half full") pages. &lt;/P&gt;
&lt;P&gt;But what if the new row is bigger than 4000 bytes (half a page) in size? I always knew that sometimes a page might have to split into three to allow big rows to be inserted, but I just found out it could be worse than that. If a page is split into two, and the new row still won't fit, one of the half full pages is split again. But if the row is so big, it still won't fit, another split could occur. And if the row is still too big.... well, you get the idea. One of the SQL Server engineers at Microsoft made note of what he called a 'corner case' where one page split into 17! &lt;/P&gt;
&lt;P&gt;I read about that right before I shut down my machine one night, but I couldn't stop thinking about it. I woke up early the next morning, and my first thought was, "Why am I such a geek?" But I am what I am, and I was still thinking about a 17 way split. I wondered if I could duplicate that...So I got up and started trying. I spent several hours on it, but the most I could get was one page splitting into 10. It's always good to have something to work towards. Maybe next time I'm on a long plane flight (see my &lt;A href="http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/2009-schedule.aspx" target=_blank&gt;next year's schedule&lt;/A&gt; for possibilities), I'll try some more. &lt;/P&gt;
&lt;P&gt;So here's how I did it. I probably should have called the table &lt;EM&gt;&lt;A href="http://en.wikipedia.org/wiki/Sybil_(book)" target=_blank&gt;Sybil&lt;/A&gt;&lt;/EM&gt;, but I called it &lt;EM&gt;split_page&lt;/EM&gt; instead. &lt;/P&gt;
&lt;P&gt;You can use any database; I used &lt;EM&gt;tempdb&lt;/EM&gt;. &lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=1&gt;-- Create the table &lt;BR&gt;USE tempdb;&lt;BR&gt;GO&lt;BR&gt;SET NOCOUNT ON&lt;BR&gt;GO&lt;BR&gt;IF EXISTS (SELECT * FROM sys.tables&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE name = 'split_page')&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DROP TABLE split_page;&lt;BR&gt;GO&lt;BR&gt;CREATE TABLE split_page &lt;BR&gt;(id int identity(0,2) PRIMARY KEY,&lt;BR&gt;id2 bigint default 0,&lt;BR&gt;data1 varchar(33) null, &lt;BR&gt;data2 varchar(8000) null);&lt;BR&gt;GO&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=1&gt;-- fill page until no more rows fit&lt;BR&gt;INSERT INTO split_page DEFAULT VALUES;&lt;BR&gt;GO 385&lt;/FONT&gt; 
&lt;P&gt;&lt;FONT face="Courier New" size=1&gt;-- verify that there is only one data page &lt;BR&gt;DBCC IND(tempdb, split_page, -1);&lt;BR&gt;GO&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;DBCC IND should return one IAM page (PageType = 10) and one data page (PageType = 1). If you want to see how full the page is, you can run DBCC PAGE and look at just the header.&amp;nbsp; For your third parameter to DBCC PAGE, you should use the number for the data page that DBCC IND returned.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new" size=1&gt;DBCC TRACEON(3604);&lt;BR&gt;DBCC PAGE(tempdb, 1, 177, 0); &lt;BR&gt;GO&lt;/FONT&gt; 
&lt;P&gt;The header has a value it it called m_freeCnt, and it told me there were only 11 free bytes left on the page, which is not enough for another one of these rows. (The INT primary key is always 4 bytes, and the BIGINT is always 8, so even without any overhead bytes, we need more than 11.) 
&lt;P&gt;&lt;FONT face="courier new " size=1&gt;-- Now insert one more row, this time filling the VARCHARs to the maximum length. &lt;BR&gt;SET IDENTITY_INSERT split_page&amp;nbsp; ON;&lt;BR&gt;GO&lt;BR&gt;INSERT INTO split_page (id, id2, data1, data2)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT 111, 0, replicate('a', 33), replicate('b', 8000);&lt;BR&gt;GO&lt;BR&gt;SET IDENTITY_INSERT split_page&amp;nbsp; OFF;&lt;BR&gt;GO&lt;/FONT&gt; 
&lt;P&gt;When you look at DBCC IND again, you should see that the table now has 10 data pages! (Plus one IAM page, and one index page for the clustered index root, which has PageType = 2) 
&lt;P&gt;&lt;FONT face="Courier New" size=1&gt;DBCC IND(tempdb, split_page, -1);&lt;BR&gt;GO&lt;BR&gt;&lt;/FONT&gt;
&lt;P&gt;Here's my output:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/kalen_delaney/WindowsLiveWriter/GeekCitySplittingapageintomultiplepages_D718/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height=87 alt=image src="http://sqlblog.com/blogs/kalen_delaney/WindowsLiveWriter/GeekCitySplittingapageintomultiplepages_D718/image_thumb_1.png" width=244 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;(I really don't know how to make the screen shot any clearer. If you click on it, it should open in a browser window by itself and be a little easier to read. If I try to enlarge it when pasting it here, it becomes very blurred.)&lt;/P&gt;
&lt;P&gt;Have fun!&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff00ff size=4&gt;~Kalen&lt;/FONT&gt;&lt;/P&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=Geek City: Splitting a page into multiple pages&amp;amp;body=Seen on SQLblog.com: %0A%0A%09Geek City: Splitting a page into multiple pages%0A%0Ahttp://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/splitting-a-page-into-multiple-pages.aspx" target="_blank" title = "Email Geek City: Splitting a page into multiple pages"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/splitting-a-page-into-multiple-pages.aspx&amp;amp;title=Geek+City%3a+Splitting+a+page+into+multiple+pages" target="_blank" title = "Submit Geek City: Splitting a page into multiple pages to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/splitting-a-page-into-multiple-pages.aspx&amp;amp;phase=2" target="_blank" title = "Submit Geek City: Splitting a page into multiple pages to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/splitting-a-page-into-multiple-pages.aspx&amp;amp;title=Geek+City%3a+Splitting+a+page+into+multiple+pages" target="_blank" title = "Submit Geek City: Splitting a page into multiple pages to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/splitting-a-page-into-multiple-pages.aspx&amp;amp;title=Geek+City%3a+Splitting+a+page+into+multiple+pages" target="_blank" title = "Submit Geek City: Splitting a page into multiple pages to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/splitting-a-page-into-multiple-pages.aspx&amp;amp;title=Geek+City%3a+Splitting+a+page+into+multiple+pages&amp;amp;;top=1" target="_blank" title = "Add Geek City: Splitting a page into multiple pages to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10667" width="1" height="1"&gt;</description></item><item><title>Did You Know? My 2009 Schedule</title><link>http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/2009-schedule.aspx</link><pubDate>Sat, 20 Dec 2008 22:00:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10666</guid><dc:creator>Kalen Delaney</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;I am already pretty booked for the entire first half of the new year.&amp;nbsp; March and April include three separate trips to Scandinavia and in June I head down under for a four-city tour in Australia. I've also got several public training classes scheduled. &lt;/p&gt; &lt;p&gt;Check out my schedule &lt;a href="http://www.insidesqlserver.com/schedule" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;There are quite a few open weeks in the first couple of months of the year, but during that time I will be writing a couple of whitepapers for Microsoft, managing several others, finishing the upgrade of my course to SQL Server 2008, planning for a preconference seminar at TechEd in Los Angeles and updating &lt;a href="http://www.insidesqlserver.com/" target="_blank"&gt;my web site&lt;/a&gt;. I think that should keep me busy. &lt;/p&gt; &lt;p&gt;I frequently get asked about my travel plans, and many people say something like: "Do you ever come to &amp;lt;insert a city name here&amp;gt;?" The answer is, there are only a couple of places I go to regularly, where I have public training partners, and those cities are Bellevue (Seattle area),&amp;nbsp; Beaverton (Portland area) and Minneapolis.&amp;nbsp; Other than that, I don't know where I will be going before I get scheduled to go there. And I get scheduled by someone asking me to come to their city or their company. Last year I taught private courses in Portland, Dallas, Austin, and Danbury, CT.&amp;nbsp; In addition to my regular training partners, I taught a public class in Brisbane, Australia. I gave a seminar in Kansas City, and a four-city roadshow in Sweden.&amp;nbsp; I didn't plan any of those; I was invited to come. &lt;/p&gt; &lt;p&gt;If I know I'm going to be visiting a city, it's on &lt;a href="http://schedule.kalendelaney.com" target="_blank"&gt;my schedule&lt;/a&gt;. If it's not on &lt;a href="http://schedule.kalendelaney.com" target="_blank"&gt;my schedule&lt;/a&gt;, I have no plans &lt;em&gt;yet&lt;/em&gt; to make a trip there.&lt;/p&gt; &lt;p&gt;So if you would like my &lt;a href="http://www.insidesqlserver.com/Course%20Description%20and%20Outline%202008.htm" target="_blank"&gt;5-day SQL Server Internals class&lt;/a&gt; to be offered in your city, talk to your boss. Several companies could get together to bring me in and share the cost.&amp;nbsp; Or you could get your local user group to arrange a one day seminar, which is what happened in Kansas City last year. (Unless there are several one day seminars, as I will be doing in Australia, a one day seminar is only possible in cities that are relatively easy to get to from Seattle.)&lt;/p&gt; &lt;p&gt;Although there are costs associated with the classes and seminars, I do frequently speak at local user group meetings for no charge. If you see that I will be in your city, and you'd like me to speak at your user group, just let me know!&lt;/p&gt; &lt;p&gt;Have a great new year!&lt;/p&gt; &lt;p&gt;&lt;font color="#ff00ff" size="4"&gt;~Kalen&lt;/font&gt;&lt;/p&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=Did You Know? My 2009 Schedule&amp;amp;body=Seen on SQLblog.com: %0A%0A%09Did You Know? My 2009 Schedule%0A%0Ahttp://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/2009-schedule.aspx" target="_blank" title = "Email Did You Know? My 2009 Schedule"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/2009-schedule.aspx&amp;amp;title=Did+You+Know%3f+My+2009+Schedule" target="_blank" title = "Submit Did You Know? My 2009 Schedule to del.icio.us"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/2009-schedule.aspx&amp;amp;phase=2" target="_blank" title = "Submit Did You Know? My 2009 Schedule to digg.com"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/2009-schedule.aspx&amp;amp;title=Did+You+Know%3f+My+2009+Schedule" target="_blank" title = "Submit Did You Know? My 2009 Schedule to reddit.com"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/2009-schedule.aspx&amp;amp;title=Did+You+Know%3f+My+2009+Schedule" target="_blank" title = "Submit Did You Know? My 2009 Schedule to DotNetKicks"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/2009-schedule.aspx&amp;amp;title=Did+You+Know%3f+My+2009+Schedule&amp;amp;;top=1" target="_blank" title = "Add Did You Know? My 2009 Schedule to Live Bookmarks"&gt;live it!&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://info.sqlblog.com/a.aspx?ZoneID=0&amp;BannerID=12&amp;AdvertiserID=1&amp;CampaignID=12&amp;Task=Get&amp;Mode=TEXT&amp;SiteID=1&amp;RandomNumber=463323" width="1" height="1" border="0"&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=10666" width="1" height="1"&gt;</description></item><item><title>What time do you have?</title><link>http://sqlblog.com/blogs/andrew_kelly/archive/2008/12/20/what-time-do-you-have.aspx</link><pubDate>Sat, 20 Dec 2008 13:12:43 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:10661</guid><dc:creator>Andrew Kelly</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;The way in which SQL Server has treated Time has been a very misunderstood subject for as long as I can remember. The largest part of that was the fact that SQL Server was only accurate to 3.33ms. I would like to point you to an excellent article on this and other details surrounding Datetime in SQL Server by Tibor Karaszi found here:&amp;#160; &lt;a title="http://www.karaszi.com/SQLServer/info_datetime.asp" href="http://www.karaszi.com/SQLServer/info_datetime.asp"&gt;http://www.karaszi.com/SQLServer/info_datetime.asp&lt;/a&gt;&amp;#160; Well now with the release of SP3 for SQL Server 2005 (and of course SQL 2008 as well) SQL Server no longer uses the inaccurate techniques associated with the RDTSC component of Windows. Since there is a lot to explain about how this all works I will again point you to another link which goes into much greater detail.&amp;#160; &lt;a title="http://blogs.msdn.com/psssql/archive/2008/12/16/how-it-works-sql-server-no-longer-uses-rdtsc-for-timings-in-sql-2008-and-sql-2005-service-pack-3-sp3.aspx" href="http://blogs.msdn.com/psssql/archive/2008/12/16/how-it-works-sql-server-no-longer-uses-rdtsc-for-timings-in-sql-2008-and-sql-2005-service-pack-3-sp3.aspx"&gt;http://blogs.msdn.com/psssql/archive/2008/12/16/how-it-works-sql-server-no-longer-uses-rdtsc-for-timings-in-sql-2008-and-sql-2005-service-pack-3-sp3.aspx&lt;/a&gt;&amp;#160; I for one say it is about time:).&lt;/p&gt;
&lt;BR&gt;&lt;div class = "shareblock"&gt;&lt;span class = "shareblockTitle"&gt;Share this post:&lt;/span&gt;&lt;span class = "shareblockLink"&gt; &lt;a href = "mailto:?subject=What time do you have?&amp;amp;body=Seen on SQLblog.com: %0A%0A%09What time do you have?%0A%0Ahttp://sqlblog.com/blogs/andrew_kelly/archive/2008/12/20/what-time-do-you-have.aspx" target="_blank" title = "Email What time do you have?"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://sqlblog.com/blogs/andrew_kelly/archive/2008/12/20/what-time-do-you-have.aspx&amp;amp;title=What+time+do+you+have%3f" 