<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tim laqua dot com &#187; sql server 2008</title>
	<atom:link href="http://timlaqua.com/tag/sql-server-2008/feed/" rel="self" type="application/rss+xml" />
	<link>http://timlaqua.com</link>
	<description>Thoughts and Code from Tim Laqua</description>
	<lastBuildDate>Sun, 09 May 2010 15:25:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Trending SQL Server Agent Job Duration by Hour</title>
		<link>http://timlaqua.com/2009/12/trending-sql-server-agent-job-duration-by-hour/</link>
		<comments>http://timlaqua.com/2009/12/trending-sql-server-agent-job-duration-by-hour/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 03:07:38 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Scripts & Code]]></category>
		<category><![CDATA[agent job]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server 2008]]></category>

		<guid isPermaLink="false">http://timlaqua.com/?p=302</guid>
		<description><![CDATA[Earlier today I noticed a SQL Server Agent job taking a little longer than usual (or what I thought was longer than usual). Let's face it, we're not staring at the Job Activity monitor all day, so unless you've written a report to monitor job run times - on occasion you ask yourself "is that [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier today I noticed a SQL Server Agent job taking a little longer than usual (or what I thought was longer than usual).  Let's face it, we're not staring at the Job Activity monitor all day, so unless you've written a report to monitor job run times - on occasion you ask yourself "is that a normal run time for this thing?"  The job I was curious about happened to be a job that runs throughout the day and should only have real work to do once or twice an hour - and it should run roughly the same amount of time on any given business day for a given hour (i.e. at 1:00 PM on any given business day, this thing should do the same amount of work).</p>
<p>So I came up with the following query to PIVOT the run duration on the hour the job executed:<span id="more-302"></span></p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;"><span style="color: #0000FF;">DECLARE</span> @JobName <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">255</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'Agent Job Name'</span>
&nbsp;
;WITH JobHistory <span style="color: #0000FF;">AS</span>
<span style="color: #808080;">&#40;</span>
  <span style="color: #0000FF;">SELECT</span>
     a.<span style="color: #202020;">run_date</span>
    ,a.<span style="color: #202020;">run_time</span> <span style="color: #808080;">/</span> <span style="color: #000;">10000</span> <span style="color: #0000FF;">AS</span> <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">HOUR</span><span style="color: #808080;">&#93;</span>
    ,<span style="color: #808080;">&#40;</span>a.<span style="color: #202020;">run_duration</span> <span style="color: #808080;">/</span> <span style="color: #000;">10000</span> <span style="color: #808080;">*</span> <span style="color: #000;">60</span> <span style="color: #808080;">*</span> <span style="color: #000;">60</span>	<span style="color: #008080;">-- Hours</span>
     <span style="color: #808080;">+</span> a.<span style="color: #202020;">run_duration</span> <span style="color: #808080;">%</span> <span style="color: #000;">10000</span> <span style="color: #808080;">/</span> <span style="color: #000;">100</span> <span style="color: #808080;">*</span> <span style="color: #000;">60</span>	<span style="color: #008080;">-- Minutes</span>
     <span style="color: #808080;">+</span> a.<span style="color: #202020;">run_duration</span> <span style="color: #808080;">%</span> <span style="color: #000;">100</span>			<span style="color: #008080;">-- Seconds</span>
     <span style="color: #808080;">&#41;</span> <span style="color: #808080;">/</span> <span style="color: #000;">60.0</span> <span style="color: #0000FF;">AS</span> <span style="color: #808080;">&#91;</span>DurationMinutes<span style="color: #808080;">&#93;</span>
  <span style="color: #0000FF;">FROM</span>
    msdb.<span style="color: #202020;">dbo</span>.<span style="color: #202020;">sysjobhistory</span> a <span style="color: #0000FF;">WITH</span><span style="color: #808080;">&#40;</span>NOLOCK<span style="color: #808080;">&#41;</span>
    <span style="color: #0000FF;">INNER</span> <span style="color: #808080;">JOIN</span> msdb.<span style="color: #202020;">dbo</span>.<span style="color: #202020;">sysjobs</span> b <span style="color: #0000FF;">WITH</span><span style="color: #808080;">&#40;</span>NOLOCK<span style="color: #808080;">&#41;</span>
    <span style="color: #0000FF;">ON</span> 
      a.<span style="color: #808080;">&#91;</span>job_id<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> b.<span style="color: #808080;">&#91;</span>job_id<span style="color: #808080;">&#93;</span>
      <span style="color: #808080;">AND</span> b.<span style="color: #808080;">&#91;</span>name<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> @JobName
      <span style="color: #808080;">AND</span> step_id <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
      <span style="color: #808080;">AND</span> run_status <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">SELECT</span> <span style="color: #808080;">*</span>
<span style="color: #0000FF;">FROM</span>
  JobHistory	
  PIVOT
  <span style="color: #808080;">&#40;</span> <span style="color: #FF00FF;">SUM</span><span style="color: #808080;">&#40;</span>DurationMinutes<span style="color: #808080;">&#41;</span>
    <span style="color: #0000FF;">FOR</span> <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">HOUR</span><span style="color: #808080;">&#93;</span> 
    <span style="color: #808080;">IN</span>  <span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>00<span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span>01<span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span>02<span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span>03<span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span>04<span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span>05<span style="color: #808080;">&#93;</span>
        ,<span style="color: #808080;">&#91;</span>06<span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span>07<span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span>08<span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span>09<span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">10</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">11</span><span style="color: #808080;">&#93;</span>
        ,<span style="color: #808080;">&#91;</span><span style="color: #000;">12</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">13</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">14</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">15</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">16</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">17</span><span style="color: #808080;">&#93;</span>
        ,<span style="color: #808080;">&#91;</span><span style="color: #000;">18</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">19</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">20</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">21</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">22</span><span style="color: #808080;">&#93;</span>,<span style="color: #808080;">&#91;</span><span style="color: #000;">23</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span>
  <span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> p</pre></div></div>

<p><em>UPDATE: Added <strong>AND run_status = 1</strong></em><br/></p>
<p>Then made a table (not sure why, but I can't resist doing the heatmap thing):<br />
<a href="http://timlaqua.com/wp-content/uploads/2009/12/agentJobDurationTable.png"><img src="http://timlaqua.com/wp-content/uploads/2009/12/agentJobDurationTable-300x52.png" alt="" title="agentJobDurationTable" width="300" height="52" class="alignnone size-medium wp-image-304" /></a><br/><em>click the image to enlarge</em></p>
<p>And, of course, the chart so you can point at a picture should you have to explain something to somebody in the future:<br />
<a href="http://timlaqua.com/wp-content/uploads/2009/12/agentJobDurationChart.png"><img src="http://timlaqua.com/wp-content/uploads/2009/12/agentJobDurationChart-300x146.png" alt="" title="agentJobDurationChart" width="300" height="146" class="alignnone size-medium wp-image-305" /></a><br/><em>click the image to enlarge</em></p>
]]></content:encoded>
			<wfw:commentRss>http://timlaqua.com/2009/12/trending-sql-server-agent-job-duration-by-hour/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Estimating the Size of a Table in SQL Server 2008</title>
		<link>http://timlaqua.com/2009/10/estimating-the-size-of-a-table-in-sql-server-2008/</link>
		<comments>http://timlaqua.com/2009/10/estimating-the-size-of-a-table-in-sql-server-2008/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 02:35:00 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Scripts & Code]]></category>
		<category><![CDATA[msdn]]></category>
		<category><![CDATA[mssql 2008]]></category>
		<category><![CDATA[sql server 2008]]></category>
		<category><![CDATA[tsql]]></category>

		<guid isPermaLink="false">http://timlaqua.com/?p=250</guid>
		<description><![CDATA[I have read this (http://msdn.microsoft.com/en-us/library/ms178085.aspx) article at least 6, maybe 7 times in the past - and every time I say to myself "this is ridiculous - someone has to have written a script to do this by now" and every time, I google for hours and fail to find anything. So I finally gave [...]]]></description>
			<content:encoded><![CDATA[<p>I have read this (<a href="http://msdn.microsoft.com/en-us/library/ms178085.aspx">http://msdn.microsoft.com/en-us/library/ms178085.aspx</a>) article at least 6, maybe 7 times in the past - and every time I say to myself "this is ridiculous - someone has to have written a script to do this by now" and every time, I google for hours and fail to find anything.  So I finally gave up and wrote something to do it.  Note, I've only verified it on 100% fixed width tables.  I compared its output to a 600+ million row table and it came out somewhere around 3% higher - fine with me as I'd rather over-estimate space requirements than under-estimate.<br />
<span id="more-250"></span><br />
First, we have to create a table type to hold our table column definitions.  the datatype is required, length is required for anything that allows length (MAX is not handled for any types), and the worst case scenario is always used so if you know you won't be filling those VARCHAR(255)s, feel free to use a smaller, more average, number.  IsKey is a BIT value that tells the proc to use those columns as part of the index key.  The rest of it is all calculated.</p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;"><span style="color: #0000FF;">CREATE</span> TYPE TableColumnDefinition <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">TABLE</span>
	<span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">NOT</span> <span style="color: #808080;">NULL</span>
	,<span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">INT</span>
	,<span style="color: #808080;">&#91;</span>IsKey<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">BIT</span>
	,<span style="color: #808080;">&#91;</span>DataLength<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">AS</span>
		<span style="color: #0000FF;">CASE</span> 
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'BIT'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">0.125</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'TINYINT'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">1</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'SMALLINT'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">2</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">IN</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #FF0000;">'SMALLMONEY'</span>, <span style="color: #FF0000;">'REAL'</span>, <span style="color: #FF0000;">'SMALLDATETIME'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">4</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">IN</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'BIGINT'</span>, <span style="color: #FF0000;">'DATETIME'</span>, <span style="color: #FF0000;">'MONEY'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">8</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'UNIQUEIDENTIFIER'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">16</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'NVARCHAR'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">*</span> <span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #000;">2</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'VARCHAR'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">+</span> <span style="color: #000;">2</span>	<span style="color: #008080;">-- DOESN'T SUPPORT MAX</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Datatype<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'DATE'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">3</span> 
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Datatype<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'TIME'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">5</span> <span style="color: #008080;">-- Worst case</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Datatype<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'DATETIME2'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">8</span> <span style="color: #008080;">-- Worst case</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Datatype<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'DATETIMEOFFSET'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">10</span> <span style="color: #008080;">-- Worst case</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'CHAR'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'NCHAR'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">*</span> <span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #000;">2</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'BINARY'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'VARBINARY'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">+</span> <span style="color: #000;">2</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Datatype<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'TIMESTAMP'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">8</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'XML'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span>	<span style="color: #008080;">-- Estimate an average size in bytes, 2GB max</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">IN</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'DECIMAL'</span>, <span style="color: #FF0000;">'NUMERIC'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">THEN</span> 
				<span style="color: #0000FF;">CASE</span> 
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">1</span> <span style="color: #808080;">AND</span> <span style="color: #000;">9</span>	<span style="color: #0000FF;">THEN</span> <span style="color: #000;">5</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">10</span> <span style="color: #808080;">AND</span> <span style="color: #000;">19</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">9</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">20</span> <span style="color: #808080;">AND</span> <span style="color: #000;">28</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">13</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">29</span> <span style="color: #808080;">AND</span> <span style="color: #000;">38</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">17</span>
				<span style="color: #0000FF;">END</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'FLOAT'</span> <span style="color: #0000FF;">THEN</span>
				<span style="color: #0000FF;">CASE</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">1</span> <span style="color: #808080;">AND</span> <span style="color: #000;">24</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">4</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">25</span> <span style="color: #808080;">AND</span> <span style="color: #000;">53</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">8</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">IS</span> <span style="color: #808080;">NULL</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">8</span>	<span style="color: #008080;">-- Default n is 53</span>
				<span style="color: #0000FF;">END</span>
			<span style="color: #0000FF;">ELSE</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">END</span>
	,<span style="color: #808080;">&#91;</span>IsVariableLength<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">AS</span>
		<span style="color: #0000FF;">CASE</span> 
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">IN</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'VARCHAR'</span>, <span style="color: #FF0000;">'NVARCHAR'</span>, <span style="color: #FF0000;">'VARBINARY'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">1</span>
			<span style="color: #0000FF;">ELSE</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">END</span><span style="color: #808080;">&#41;</span></pre></div></div>

<p>Now for the proc that attempts to replicate the methodology outlined on the aforementioned MSDN article.  The results appeared to be accurate or over the actual value, which was exactly what I needed, so I went with it and moved on.  I'm completely open to corrections, suggestions, improvements, etc.  Just make a comment and I'll integrate them (assuming they work <img src='http://timlaqua.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;"><span style="color: #008080;">/*************************************************************************************
***
*** Procedure:  		[Utility_EstimateClusteredIndexSize]
*** Purpose:		    Estimates the amount of space needed for a given clustered index
*** Methodology:		http://msdn.microsoft.com/en-us/library/ms178085.aspx
***			
***			
*** Author:		      Tim Laqua
*** Date Created:	  2009-10-15 
*** 
*** Revision History
*** Date		Author			Description
*** 2009-10-15	tl				Created
*************************************************************************************/</span>
<span style="color: #0000FF;">ALTER</span> <span style="color: #0000FF;">PROCEDURE</span> <span style="color: #808080;">&#91;</span>dbo<span style="color: #808080;">&#93;</span>.<span style="color: #808080;">&#91;</span>Utility_EstimateClusteredIndexSize<span style="color: #808080;">&#93;</span>
<span style="color: #808080;">&#40;</span>
	 @Num_Rows <span style="color: #0000FF;">FLOAT</span>
	,@ClusteredIndexIsUnique <span style="color: #0000FF;">BIT</span>
	,@Fill_Factor <span style="color: #0000FF;">FLOAT</span>
	,@TableColumn TableColumnDefinition READONLY
<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">AS</span> 
&nbsp;
<span style="color: #0000FF;">SET</span> <span style="color: #0000FF;">NOCOUNT</span> <span style="color: #0000FF;">ON</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span>
	 @Num_Cols <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>					<span style="color: #008080;">-- total number of columns (fixed-length and variable-length)</span>
	,@Fixed_Data_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>			<span style="color: #008080;">-- total byte size of all fixed-length columns</span>
	,@Num_Variable_Cols <span style="color: #0000FF;">FLOAT</span>	<span style="color: #808080;">=</span> <span style="color: #000;">0</span>			<span style="color: #008080;">-- number of variable-length columns</span>
	,@Max_Var_Size <span style="color: #0000FF;">FLOAT</span>	<span style="color: #808080;">=</span> <span style="color: #000;">0</span>				<span style="color: #008080;">-- maximum byte size of all variable-length columns</span>
	,@Variable_Data_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">TABLE</span>
	<span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>Name<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">64</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">FLOAT</span>
	,<span style="color: #808080;">&#91;</span>DisplayValue<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">AS</span>
		<span style="color: #0000FF;">CASE</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #FF00FF;">LOWER</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>Name<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">LIKE</span> <span style="color: #FF0000;">'%size%'</span> <span style="color: #808080;">OR</span> <span style="color: #FF00FF;">LOWER</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>Name<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">LIKE</span> <span style="color: #FF0000;">'%space%'</span> <span style="color: #0000FF;">THEN</span>
				<span style="color: #0000FF;">CASE</span> 
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span> <span style="color: #808080;">&lt;</span> <span style="color: #000;">1024</span> <span style="color: #0000FF;">THEN</span> <span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">ROUND</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span>, <span style="color: #000;">3</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">NUMERIC</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span>,<span style="color: #000;">0</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' B'</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span> <span style="color: #808080;">&lt;</span> <span style="color: #000;">1024</span><span style="color: #808080;">*</span><span style="color: #000;">1024</span> <span style="color: #0000FF;">THEN</span> <span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">ROUND</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span>, <span style="color: #000;">3</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">NUMERIC</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span>,<span style="color: #000;">3</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' KB'</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span> <span style="color: #808080;">&lt;</span> <span style="color: #000;">1024</span><span style="color: #808080;">*</span><span style="color: #000;">1024</span><span style="color: #808080;">*</span><span style="color: #000;">1024</span> <span style="color: #0000FF;">THEN</span> <span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">ROUND</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span>, <span style="color: #000;">3</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">NUMERIC</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span>,<span style="color: #000;">3</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' MB'</span>
					<span style="color: #0000FF;">ELSE</span> <span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">ROUND</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span>, <span style="color: #000;">3</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">NUMERIC</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span>,<span style="color: #000;">3</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' GB'</span>
				<span style="color: #0000FF;">END</span>
			<span style="color: #0000FF;">ELSE</span> <span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">FLOOR</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
		<span style="color: #0000FF;">END</span><span style="color: #808080;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #008080;">-- Leaf level data</span>
<span style="color: #0000FF;">SELECT</span> 
	 @Num_Variable_Cols <span style="color: #808080;">=</span> <span style="color: #FF00FF;">COUNT</span><span style="color: #808080;">&#40;</span><span style="color: #000;">1</span><span style="color: #808080;">&#41;</span>
	,@Max_Var_Size <span style="color: #808080;">=</span> IS<span style="color: #808080;">NULL</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">SUM</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>DataLength<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">FROM</span> @TableColumn <span style="color: #0000FF;">WHERE</span> <span style="color: #808080;">&#91;</span>IsVariableLength<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
&nbsp;
<span style="color: #0000FF;">SELECT</span> 
	 @Num_Cols <span style="color: #808080;">=</span> <span style="color: #FF00FF;">COUNT</span><span style="color: #808080;">&#40;</span><span style="color: #000;">1</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> @Num_Variable_Cols
	,@Fixed_Data_Size <span style="color: #808080;">=</span> <span style="color: #FF00FF;">CEILING</span><span style="color: #808080;">&#40;</span>IS<span style="color: #808080;">NULL</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">SUM</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>DataLength<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">FROM</span> @TableColumn <span style="color: #0000FF;">WHERE</span> <span style="color: #808080;">&#91;</span>IsVariableLength<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
&nbsp;
&nbsp;
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Fixed_Data_Size'</span>, @Fixed_Data_Size<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">IF</span> @ClusteredIndexIsUnique <span style="color: #808080;">&lt;&gt;</span> <span style="color: #000;">0</span>
<span style="color: #0000FF;">BEGIN</span>
	<span style="color: #0000FF;">SET</span> @Num_Cols <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
	<span style="color: #0000FF;">IF</span> @Num_Variable_Cols <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">SET</span> @Num_Variable_Cols <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
	<span style="color: #0000FF;">IF</span> @Max_Var_Size <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">SET</span> @Max_Var_Size <span style="color: #808080;">+=</span> <span style="color: #000;">4</span>
<span style="color: #0000FF;">END</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Null_Bitmap <span style="color: #0000FF;">INT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">CEILING</span><span style="color: #808080;">&#40;</span><span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #808080;">&#40;</span><span style="color: #808080;">&#40;</span>@Num_Cols <span style="color: #808080;">+</span> <span style="color: #000;">7</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">/</span> <span style="color: #000;">8</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Null_Bitmap'</span>, @Null_Bitmap<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #008080;">-- if there are variable columns</span>
<span style="color: #0000FF;">IF</span> @Num_Variable_Cols <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
	<span style="color: #0000FF;">SET</span> @Variable_Data_Size <span style="color: #808080;">=</span> <span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #808080;">&#40;</span>@Num_Variable_Cols <span style="color: #808080;">*</span> <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> @Max_Var_Size 
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Cols'</span>, @Num_Cols<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Variable_Cols'</span>, @Num_Variable_Cols<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Max_Var_Size'</span>, @Max_Var_Size<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Row_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">CEILING</span><span style="color: #808080;">&#40;</span>@Fixed_Data_Size <span style="color: #808080;">+</span> @Variable_Data_Size <span style="color: #808080;">+</span> @Null_Bitmap <span style="color: #808080;">+</span> <span style="color: #000;">4</span> <span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Row_Size'</span>, @Row_Size<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Rows_Per_Page <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">FLOOR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">8096</span> <span style="color: #808080;">/</span> <span style="color: #808080;">&#40;</span>@Row_Size <span style="color: #808080;">+</span> <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Rows_Per_Page'</span>, @Rows_Per_Page<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Free_Rows_Per_Page <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">FLOOR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">8096</span> <span style="color: #808080;">*</span> <span style="color: #808080;">&#40;</span><span style="color: #808080;">&#40;</span><span style="color: #000;">100</span> <span style="color: #808080;">-</span> @Fill_Factor<span style="color: #808080;">&#41;</span> <span style="color: #808080;">/</span> <span style="color: #000;">100</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">/</span> <span style="color: #808080;">&#40;</span>@Row_Size <span style="color: #808080;">+</span> <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Free_Rows_Per_Page'</span>, @Free_Rows_Per_Page<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Num_Leaf_Pages <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">CEILING</span><span style="color: #808080;">&#40;</span>@Num_Rows <span style="color: #808080;">/</span> <span style="color: #808080;">&#40;</span>@Rows_Per_Page <span style="color: #808080;">-</span> @Free_Rows_Per_Page<span style="color: #808080;">&#41;</span> <span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Leaf_Pages'</span>, @Num_Leaf_Pages<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Leaf_space_used <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">8192</span> <span style="color: #808080;">*</span> @Num_Leaf_Pages
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Leaf_space_used'</span>, @Leaf_space_used<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #008080;">-- Index Information</span>
<span style="color: #0000FF;">DECLARE</span>
	 @Num_Key_Cols <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>			<span style="color: #008080;">-- total number of key columns (fixed-length and variable-length)</span>
	,@Fixed_Key_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>			<span style="color: #008080;">-- total byte size of all fixed-length key columns</span>
	,@Num_Variable_Key_Cols <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>	<span style="color: #008080;">-- number of variable-length key columns</span>
	,@Max_Var_Key_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>		<span style="color: #008080;">-- maximum byte size of all variable-length key columns</span>
&nbsp;
&nbsp;
<span style="color: #0000FF;">SELECT</span> 
	 @Num_Variable_Key_Cols <span style="color: #808080;">=</span> <span style="color: #FF00FF;">COUNT</span><span style="color: #808080;">&#40;</span><span style="color: #000;">1</span><span style="color: #808080;">&#41;</span>
	,@Max_Var_Key_Size <span style="color: #808080;">=</span> IS<span style="color: #808080;">NULL</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">SUM</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>DataLength<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">FROM</span> @TableColumn 
<span style="color: #0000FF;">WHERE</span> 
	<span style="color: #808080;">&#91;</span>IsVariableLength<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span> 
	<span style="color: #808080;">AND</span> <span style="color: #808080;">&#91;</span>IsKey<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
&nbsp;
<span style="color: #0000FF;">SELECT</span> 
	 @Num_Key_Cols <span style="color: #808080;">=</span> <span style="color: #FF00FF;">COUNT</span><span style="color: #808080;">&#40;</span><span style="color: #000;">1</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> @Num_Variable_Key_Cols
	,@Fixed_Key_Size <span style="color: #808080;">=</span> IS<span style="color: #808080;">NULL</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">SUM</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>DataLength<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">FROM</span> @TableColumn 
<span style="color: #0000FF;">WHERE</span> 
	<span style="color: #808080;">&#91;</span>IsVariableLength<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
	<span style="color: #808080;">AND</span> <span style="color: #808080;">&#91;</span>IsKey<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
&nbsp;
<span style="color: #0000FF;">IF</span> @ClusteredIndexIsUnique <span style="color: #808080;">&lt;&gt;</span> <span style="color: #000;">0</span>
<span style="color: #0000FF;">BEGIN</span>
	<span style="color: #0000FF;">SET</span> @Num_Key_Cols <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
	<span style="color: #0000FF;">IF</span> @Num_Variable_Key_Cols <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">SET</span> @Num_Variable_Key_Cols <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
	<span style="color: #0000FF;">IF</span> @Max_Var_Key_Size <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">SET</span> @Max_Var_Key_Size <span style="color: #808080;">+=</span> <span style="color: #000;">4</span>
<span style="color: #0000FF;">END</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Variable_Key_Cols'</span>, @Num_Variable_Key_Cols<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Max_Var_Key_Size'</span>, @Max_Var_Key_Size<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Key_Cols'</span>, @Num_Key_Cols<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #008080;">-- Who would seriously have a nullable key column?  ridiculous.</span>
<span style="color: #0000FF;">DECLARE</span> @Index_Null_Bitmap <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #808080;">&#40;</span><span style="color: #808080;">&#40;</span>@Num_Key_Cols <span style="color: #808080;">+</span> <span style="color: #000;">7</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">/</span> <span style="color: #000;">8</span><span style="color: #808080;">&#41;</span> 
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Index_Null_Bitmap'</span>, @Index_Null_Bitmap<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Variable_Key_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
&nbsp;
<span style="color: #0000FF;">IF</span> @Max_Var_Key_Size <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
	<span style="color: #0000FF;">SET</span> @Variable_Key_Size <span style="color: #808080;">=</span> <span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #808080;">&#40;</span>@Num_Variable_Key_Cols <span style="color: #808080;">*</span> <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> @Max_Var_Key_Size 
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Variable_Key_Size'</span>, @Variable_Key_Size<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Index_Row_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> @Fixed_Key_Size <span style="color: #808080;">+</span> @Variable_Key_Size <span style="color: #808080;">+</span> @Index_Null_Bitmap <span style="color: #808080;">+</span> <span style="color: #000;">1</span> <span style="color: #808080;">+</span> <span style="color: #000;">6</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Index_Row_Size'</span>,@Index_Row_Size <span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Index_Rows_Per_Page  <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">FLOOR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">8096</span> <span style="color: #808080;">/</span> <span style="color: #808080;">&#40;</span>@Index_Row_Size <span style="color: #808080;">+</span> <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Index_Rows_Per_Page'</span>, @Index_Rows_Per_Page<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Non_Leaf_Levels <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
&nbsp;
<span style="color: #008080;">-- Log base @Non_Leaf_Levels hack</span>
<span style="color: #0000FF;">WHILE</span> <span style="color: #808080;">&#40;</span>@Num_Leaf_Pages <span style="color: #808080;">/</span> @Index_Rows_Per_Page<span style="color: #808080;">&#41;</span> <span style="color: #808080;">&gt;</span> <span style="color: #FF00FF;">POWER</span><span style="color: #808080;">&#40;</span>@Index_Rows_Per_Page,@Non_Leaf_Levels<span style="color: #808080;">&#41;</span>
	<span style="color: #0000FF;">SET</span> @Non_Leaf_Levels <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
&nbsp;
<span style="color: #0000FF;">SET</span> @Non_Leaf_Levels <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Non_Leaf_Levels'</span>, @Non_Leaf_Levels<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #008080;">-- Summation hack</span>
<span style="color: #0000FF;">DECLARE</span> 
	 @Num_Index_Pages <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
	,@Summand <span style="color: #0000FF;">INT</span> <span style="color: #808080;">=</span> @Non_Leaf_Levels
&nbsp;
<span style="color: #0000FF;">WHILE</span> @Summand <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
<span style="color: #0000FF;">BEGIN</span>
	<span style="color: #0000FF;">SET</span> @Num_Index_Pages <span style="color: #808080;">+=</span> <span style="color: #FF00FF;">CEILING</span><span style="color: #808080;">&#40;</span>@Num_Leaf_Pages<span style="color: #808080;">/</span><span style="color: #FF00FF;">POWER</span><span style="color: #808080;">&#40;</span>@Index_Rows_Per_Page, @Summand<span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
	<span style="color: #0000FF;">SET</span> @Summand <span style="color: #808080;">-=</span> <span style="color: #000;">1</span>
<span style="color: #0000FF;">END</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Index_Pages'</span>, @Num_Index_Pages<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Index_Space_Used <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">8192</span> <span style="color: #808080;">*</span> @Num_Index_Pages 
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Index_Space_Used'</span>, @Index_Space_Used<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Clustered_Index_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> @Leaf_Space_Used <span style="color: #808080;">+</span> @Index_Space_used
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Clustered_Index_Size'</span>, @Clustered_Index_Size<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">SELECT</span> <span style="color: #808080;">*</span> <span style="color: #0000FF;">FROM</span> @<span style="color: #FF00FF;">VAR</span></pre></div></div>

<p>Now for an example of how to run this doodad.  This particular estimate was for a staging table - I needed the UNIQUEIDENTIFER as the key and the CreatedTime field had to be part of the clustered index for the partition scheme.</p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;"><span style="color: #0000FF;">DECLARE</span> @TableColumn TableColumnDefinition
&nbsp;
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @TableColumn
<span style="color: #0000FF;">VALUES</span> 
	 <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'UNIQUEIDENTIFIER'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">1</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'DATETIME'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">1</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">EXEC</span> <span style="color: #808080;">&#91;</span>dbo<span style="color: #808080;">&#93;</span>.<span style="color: #808080;">&#91;</span>Utility_EstimateClusteredIndexSize<span style="color: #808080;">&#93;</span>	
 @Num_Rows <span style="color: #808080;">=</span> <span style="color: #000;">750000</span>		<span style="color: #008080;">-- number of rows in the table</span>
,@ClusteredIndexIsUnique <span style="color: #808080;">=</span> <span style="color: #000;">1</span> 	<span style="color: #008080;">-- is it?</span>
,@Fill_Factor <span style="color: #808080;">=</span> <span style="color: #000;">90</span>			<span style="color: #008080;">-- page fill factor</span>
,@TableColumn <span style="color: #808080;">=</span> @TableColumn	<span style="color: #008080;">-- definition of table columns</span></pre></div></div>

<p>As for what the output looks like, I wanted it to output all the variables used so I could validate along the way with th emanual method.  The results look something like this</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Name                                                             Value                  DisplayValue
---------------------------------------------------------------- ---------------------- -------------------
@Fixed_Data_Size                                                 60                     60 B
@Null_Bitmap                                                     5                      5
@Num_Cols                                                        12                     12
@Num_Variable_Cols                                               0                      0
@Max_Var_Size                                                    0                      0 B
@Row_Size                                                        69                     69 B
@Rows_Per_Page                                                   114                    114
@Free_Rows_Per_Page                                              11                     11
@Num_Leaf_Pages                                                  7282                   7282
@Leaf_space_used                                                 59654144               56.891 MB
@Num_Variable_Key_Cols                                           0                      0
@Max_Var_Key_Size                                                0                      0 B
@Num_Key_Cols                                                    3                      3
@Index_Null_Bitmap                                               3.25                   3
@Variable_Key_Size                                               0                      0 B
@Index_Row_Size                                                  34.25                  34 B
@Index_Rows_Per_Page                                             223                    223
@Non_Leaf_Levels                                                 2                      2
@Num_Index_Pages                                                 34                     34
@Index_Space_Used                                                278528                 272.000 KB
@Clustered_Index_Size                                            59932672               57.156 MB</pre></div></div>

<p>So now you may ask "but what about estimating Non-Clustered Indexes and Heaps?"  Well, good question as this is the methodology for estimating the size of a Clustered Index.  I ran this for a fact table with two non-clustered indexes in addition to the clustered index by basically defining the index (so pretending the index was a table for the purposes of this proc - included columns would just be non-key columns).  All in all, it came out +3.31% on 600+ million rows, so I called that methodology good enough <img src='http://timlaqua.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://timlaqua.com/2009/10/estimating-the-size-of-a-table-in-sql-server-2008/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Determining when RESTORE DATABASE command will complete (SQL Server 2008)</title>
		<link>http://timlaqua.com/2009/09/determining-when-restore-database-command-will-complete-sql-server-2008/</link>
		<comments>http://timlaqua.com/2009/09/determining-when-restore-database-command-will-complete-sql-server-2008/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 17:48:22 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Scripts & Code]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[RESTORE DATABASE]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server 2008]]></category>

		<guid isPermaLink="false">http://timlaqua.com/?p=238</guid>
		<description><![CDATA[Ah, I see you just started restoring that 1TB monster and now everyone wants to know when it's going to be finished, where you're at in the process, etc. Fear not, Microsoft is very good at making up fictional numbers for us to use as rough estimates! I usually add 10-20% on top of these [...]]]></description>
			<content:encoded><![CDATA[<p>Ah, I see you just started restoring that 1TB monster and now everyone wants to know when it's going to be finished, where you're at in the process, etc.  Fear not, Microsoft is very good at making up fictional numbers for us to use as rough estimates!  I usually add 10-20% on top of these estimates just incase the database gremlins wander by to ruin your day again.  Or incase you encounter "storage issues."</p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;"><span style="color: #0000FF;">SELECT</span> 
	 percent_complete <span style="color: #0000FF;">AS</span> <span style="color: #808080;">&#91;</span>PercentComplete<span style="color: #808080;">&#93;</span>
	,estimated_completion_time<span style="color: #808080;">/</span><span style="color: #000;">1000.0</span><span style="color: #808080;">/</span><span style="color: #000;">60.0</span> <span style="color: #0000FF;">AS</span> <span style="color: #808080;">&#91;</span>RemainingMinutes<span style="color: #808080;">&#93;</span>
	,total_elapsed_time<span style="color: #808080;">/</span><span style="color: #000;">1000.0</span><span style="color: #808080;">/</span><span style="color: #000;">60.0</span> <span style="color: #0000FF;">AS</span> <span style="color: #808080;">&#91;</span>ElapsedMinutes<span style="color: #808080;">&#93;</span>
	,<span style="color: #808080;">&#40;</span>estimated_completion_time<span style="color: #808080;">+</span>total_elapsed_time<span style="color: #808080;">&#41;</span><span style="color: #808080;">/</span><span style="color: #000;">1000.0</span><span style="color: #808080;">/</span><span style="color: #000;">60.0</span> <span style="color: #0000FF;">AS</span> <span style="color: #808080;">&#91;</span>TotalMinutes<span style="color: #808080;">&#93;</span>
	,<span style="color: #FF00FF;">DATEADD</span><span style="color: #808080;">&#40;</span>MILLISECOND, estimated_completion_time, <span style="color: #FF00FF;">GETDATE</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #808080;">&#91;</span>EstimatedTimeOfCompletion<span style="color: #808080;">&#93;</span>
	,st.<span style="color: #0000FF;">TEXT</span> <span style="color: #0000FF;">AS</span> <span style="color: #808080;">&#91;</span>CommandSQL<span style="color: #808080;">&#93;</span>
<span style="color: #0000FF;">FROM</span> sys.<span style="color: #202020;">dm_exec_requests</span> r
	cross apply sys.<span style="color: #202020;">dm_exec_sql_text</span><span style="color: #808080;">&#40;</span>r.<span style="color: #202020;">sql_handle</span><span style="color: #808080;">&#41;</span> st
<span style="color: #0000FF;">WHERE</span> command <span style="color: #808080;">LIKE</span> <span style="color: #FF0000;">'%RESTORE DATABASE%'</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://timlaqua.com/2009/09/determining-when-restore-database-command-will-complete-sql-server-2008/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Determining how long a database will be IN RECOVERY (SQL Server 2008)</title>
		<link>http://timlaqua.com/2009/09/determining-how-long-a-database-will-be-in-recovery-sql-server-2008/</link>
		<comments>http://timlaqua.com/2009/09/determining-how-long-a-database-will-be-in-recovery-sql-server-2008/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 14:16:16 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Scripts & Code]]></category>
		<category><![CDATA[errorlog]]></category>
		<category><![CDATA[in recovery]]></category>
		<category><![CDATA[kill]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[rollback]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server 2008]]></category>
		<category><![CDATA[xp_readerrorlog]]></category>

		<guid isPermaLink="false">http://timlaqua.com/?p=233</guid>
		<description><![CDATA[So, your MSSQL service crashed in the middle of a big transaction? Or you bumped the service while it was rolling back some gigantic schema change (like say a column add on a 800 million row table)? Well, as you prepare your resume in preparation for the fallout from this debockle, you can use the [...]]]></description>
			<content:encoded><![CDATA[<p>So, your MSSQL service crashed in the middle of a big transaction?  Or you bumped the service while it was rolling back some gigantic schema change (like say a column add on a 800 million row table)?  Well, as you prepare your resume in preparation for the fallout from this debockle, you can use the following query to see how much time you have left.  Or, I should say, how much time it thinks you have left... which seems to swing wildly up and down...  microsoft math ftw.</p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;">&nbsp;
<span style="color: #0000FF;">DECLARE</span> @DBName <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">64</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'databasename'</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @ErrorLog <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">TABLE</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>LogDate<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">CHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">24</span><span style="color: #808080;">&#41;</span>, <span style="color: #808080;">&#91;</span>ProcessInfo<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">64</span><span style="color: #808080;">&#41;</span>, <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">MAX</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @ErrorLog
<span style="color: #0000FF;">EXEC</span> sys.<span style="color: #202020;">xp_readerrorlog</span> <span style="color: #000;">0</span>, <span style="color: #000;">1</span>, <span style="color: #FF0000;">'Recovery of database'</span>, @DBName
&nbsp;
<span style="color: #0000FF;">SELECT</span> <span style="color: #0000FF;">TOP</span> <span style="color: #000;">5</span>
	 <span style="color: #808080;">&#91;</span>LogDate<span style="color: #808080;">&#93;</span>
	,<span style="color: #FF00FF;">SUBSTRING</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span>, <span style="color: #FF00FF;">CHARINDEX</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">') is '</span>, <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #000;">4</span>,<span style="color: #FF00FF;">CHARINDEX</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">' complete ('</span>, <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">-</span> <span style="color: #FF00FF;">CHARINDEX</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">') is '</span>, <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">-</span> <span style="color: #000;">4</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> PercentComplete
	,<span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">SUBSTRING</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span>, <span style="color: #FF00FF;">CHARINDEX</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'approximately'</span>, <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #000;">13</span>,<span style="color: #FF00FF;">CHARINDEX</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">' seconds remain'</span>, <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">-</span> <span style="color: #FF00FF;">CHARINDEX</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'approximately'</span>, <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">-</span> <span style="color: #000;">13</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">FLOAT</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">/</span><span style="color: #000;">60.0</span> <span style="color: #0000FF;">AS</span> MinutesRemaining
	,<span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">SUBSTRING</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span>, <span style="color: #FF00FF;">CHARINDEX</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'approximately'</span>, <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #000;">13</span>,<span style="color: #FF00FF;">CHARINDEX</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">' seconds remain'</span>, <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">-</span> <span style="color: #FF00FF;">CHARINDEX</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'approximately'</span>, <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">-</span> <span style="color: #000;">13</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">FLOAT</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">/</span><span style="color: #000;">60.0</span><span style="color: #808080;">/</span><span style="color: #000;">60.0</span> <span style="color: #0000FF;">AS</span> HoursRemaining
	,<span style="color: #808080;">&#91;</span><span style="color: #0000FF;">TEXT</span><span style="color: #808080;">&#93;</span>
&nbsp;
<span style="color: #0000FF;">FROM</span> @ErrorLog <span style="color: #0000FF;">ORDER</span> <span style="color: #0000FF;">BY</span> <span style="color: #808080;">&#91;</span>LogDate<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">DESC</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://timlaqua.com/2009/09/determining-how-long-a-database-will-be-in-recovery-sql-server-2008/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
