<?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>SQL Fool &#187; twitter</title>
	<atom:link href="http://sqlfool.com/tag/twitter/feed/" rel="self" type="application/rss+xml" />
	<link>http://sqlfool.com</link>
	<description>Adventures in SQL Tuning - a blog for the rest of us</description>
	<lastBuildDate>Wed, 02 Nov 2011 20:39:11 +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>SQL Agent Job Script</title>
		<link>http://sqlfool.com/2010/12/sql-agent-job-script/</link>
		<comments>http://sqlfool.com/2010/12/sql-agent-job-script/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 00:00:28 +0000</pubDate>
		<dc:creator>Michelle Ufford</dc:creator>
				<category><![CDATA[SQL Tips]]></category>
		<category><![CDATA[Syndication]]></category>
		<category><![CDATA[T-SQL Scripts]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[TSQL]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://sqlfool.com/?p=1457</guid>
		<description><![CDATA[This blog post is brought to you by the awesomeness that is the SQL Server Twitter community. Contributions were made by several awesome Tweeples, including Denny Cherry, Kendra Little, Ken Simmons, and Magnus Ahlkvist, among others. What started this is something you've all probably run into at one time or another. We're currently having some [...]]]></description>
			<content:encoded><![CDATA[<p>This blog post is brought to you by the awesomeness that is the SQL Server Twitter community.  Contributions were made by several awesome Tweeples, including <a href="http://www.twitter.com/mrdenny" target="_blank">Denny Cherry</a>, <a href="http://www.twitter.com/Kendra_Little" target="_blank">Kendra Little</a>, <a href="http://www.twitter.com/KenSimmons" target="_blank">Ken Simmons</a>, and <a href="http://www.twitter.com/MagnusAhlkvist" target="_blank">Magnus Ahlkvist</a>, among others.  </p>
<p>What started this is something you've all probably run into at one time or another.  We're currently having some resource contention on our server when a ton of processes kickoff and overlap in the morning.  Now, <a href="http://sqlfool.com/2009/02/view-sql-agent-jobs-tsql/" target="_blank">I have a script that I've used in the past</a> for monitoring SQL agent jobs, but this time I wanted to add some historical run-time information.  I know the sysjobhistory table contains the information I need, but it has some... let's say, creative ways of storing the data.  Opinions on the reasons why vary:<br />
<br />
<a href="http://sqlfool.com/wp-content/uploads/2010/12/tweets.jpg"><img src="http://sqlfool.com/wp-content/uploads/2010/12/tweets-187x300.jpg" alt="" title="tweets" width="187" height="300" class="aligncenter size-medium wp-image-1458" /></a><br />
<br />
Regardless the reason, I needed to do some conversions. <a href="http://itknowledgeexchange.techtarget.com/sql-server/" target="_blank">Denny</a> shared with us the msdb.dbo.agent_datetime function to convert run_date and run_time into an actual datetime value.  I have to say, this certainly cleans up the code quite a bit!  Then Magnus shared a method to convert run_duration into seconds, which he modified from a script on <a href="http://www.sqlservercentral.com/Forums/Topic206218-5-1.aspx" target="_blank">SQLServerCentral</a>.  I was able to use these two tidbits to update my old script.  You can now run this script to get back a list of all enabled procs, a script that will disable them, a breakdown of the schedule, and a historical run-time average.</p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;"><span style="color: #008080;">/*  How many days do you want to include in your run-time average?
    Recent values tend to be more useful. */</span>
<span style="color: #0000FF;">Declare</span> @daysToAverage <span style="color: #0000FF;">smallint</span> <span style="color: #808080;">=</span> <span style="color: #000;">30</span>;
&nbsp;
<span style="color: #0000FF;">Declare</span> @avgRunTime <span style="color: #0000FF;">Table</span>
<span style="color: #808080;">&#40;</span>
      job_id      <span style="color: #0000FF;">uniqueidentifier</span>
    , avgRunTime  <span style="color: #0000FF;">int</span>
<span style="color: #808080;">&#41;</span>;
&nbsp;
<span style="color: #008080;">/* We need to parse the schedule into something we can understand */</span>
<span style="color: #0000FF;">Declare</span> @weekDay <span style="color: #0000FF;">Table</span> <span style="color: #808080;">&#40;</span>
      mask       <span style="color: #0000FF;">int</span>
    , maskValue  <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">32</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> @weekDay
<span style="color: #0000FF;">Select</span> <span style="color: #000;">1</span>, <span style="color: #FF0000;">'Sunday'</span>  <span style="color: #0000FF;">Union</span> All
<span style="color: #0000FF;">Select</span> <span style="color: #000;">2</span>, <span style="color: #FF0000;">'Monday'</span>  <span style="color: #0000FF;">Union</span> All
<span style="color: #0000FF;">Select</span> <span style="color: #000;">4</span>, <span style="color: #FF0000;">'Tuesday'</span>  <span style="color: #0000FF;">Union</span> All
<span style="color: #0000FF;">Select</span> <span style="color: #000;">8</span>, <span style="color: #FF0000;">'Wednesday'</span>  <span style="color: #0000FF;">Union</span> All
<span style="color: #0000FF;">Select</span> <span style="color: #000;">16</span>, <span style="color: #FF0000;">'Thursday'</span>  <span style="color: #0000FF;">Union</span> All
<span style="color: #0000FF;">Select</span> <span style="color: #000;">32</span>, <span style="color: #FF0000;">'Friday'</span>  <span style="color: #0000FF;">Union</span> All
<span style="color: #0000FF;">Select</span> <span style="color: #000;">64</span>, <span style="color: #FF0000;">'Saturday'</span>;
&nbsp;
<span style="color: #008080;">/* First, let's get our run-time average */</span>
<span style="color: #0000FF;">Insert</span> <span style="color: #0000FF;">Into</span> @avgRunTime
<span style="color: #0000FF;">Select</span> job_id
    , <span style="color: #FF00FF;">Avg</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#40;</span>run_duration<span style="color: #808080;">/</span><span style="color: #000;">10000</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">*</span> <span style="color: #000;">3600</span> <span style="color: #808080;">+</span> <span style="color: #808080;">&#40;</span>run_duration<span style="color: #808080;">/</span><span style="color: #000;">100</span><span style="color: #808080;">%</span>100<span style="color: #808080;">&#41;</span><span style="color: #808080;">*</span><span style="color: #000;">60</span> <span style="color: #808080;">+</span> run_duration<span style="color: #808080;">%</span>100<span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'avgRunTime'</span> <span style="color: #008080;">/* convert HHMMSS to seconds */</span>
<span style="color: #0000FF;">From</span> msdb.<span style="color: #202020;">dbo</span>.<span style="color: #202020;">sysjobhistory</span>
<span style="color: #0000FF;">Where</span> step_id <span style="color: #808080;">=</span> <span style="color: #000;">0</span> <span style="color: #008080;">-- only grab our total run-time</span>
    And run_status <span style="color: #808080;">=</span> <span style="color: #000;">1</span> <span style="color: #008080;">-- only grab successful executions</span>
    And msdb.<span style="color: #202020;">dbo</span>.<span style="color: #202020;">agent_datetime</span><span style="color: #808080;">&#40;</span>run_date, run_time<span style="color: #808080;">&#41;</span> <span style="color: #808080;">&gt;=</span> <span style="color: #FF00FF;">DateAdd</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">day</span>, <span style="color: #808080;">-</span>@daysToAverage, <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;">Group</span> <span style="color: #0000FF;">By</span> job_id;
&nbsp;
<span style="color: #008080;">/* Now let's get our schedule information */</span>
<span style="color: #0000FF;">With</span> myCTE
<span style="color: #0000FF;">As</span><span style="color: #808080;">&#40;</span>
    <span style="color: #0000FF;">Select</span> sched.<span style="color: #202020;">name</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'scheduleName'</span>
        , sched.<span style="color: #202020;">schedule_id</span>
        , jobsched.<span style="color: #202020;">job_id</span>
        , <span style="color: #0000FF;">Case</span> <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'Once'</span> 
            <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">4</span> 
                And sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span> 
                    <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'Daily'</span>
            <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">4</span> 
                <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'Every '</span> <span style="color: #808080;">+</span> <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">freq_interval</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">5</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' days'</span>
            <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">8</span> <span style="color: #0000FF;">Then</span> 
                <span style="color: #FF00FF;">Replace</span><span style="color: #808080;">&#40;</span> <span style="color: #FF00FF;">Replace</span><span style="color: #808080;">&#40;</span> <span style="color: #FF00FF;">Replace</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#40;</span> 
                    <span style="color: #0000FF;">Select</span> maskValue 
                    <span style="color: #0000FF;">From</span> @weekDay <span style="color: #0000FF;">As</span> x 
                    <span style="color: #0000FF;">Where</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">&amp;</span> x.<span style="color: #202020;">mask</span> <span style="color: #808080;">&lt;&gt;</span> <span style="color: #000;">0</span> 
                    <span style="color: #0000FF;">Order</span> <span style="color: #0000FF;">By</span> mask <span style="color: #0000FF;">For</span> XML Raw<span style="color: #808080;">&#41;</span>
                , <span style="color: #FF0000;">'&quot;/&gt;&lt;row maskValue=&quot;'</span>, <span style="color: #FF0000;">', '</span><span style="color: #808080;">&#41;</span>, <span style="color: #FF0000;">'&lt;row maskValue=&quot;'</span>, <span style="color: #FF0000;">''</span><span style="color: #808080;">&#41;</span>, <span style="color: #FF0000;">'&quot;/&gt;'</span>, <span style="color: #FF0000;">''</span><span style="color: #808080;">&#41;</span> 
                <span style="color: #808080;">+</span> <span style="color: #0000FF;">Case</span> <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_recurrence_factor</span> <span style="color: #808080;">&lt;&gt;</span> <span style="color: #000;">0</span> 
                        And sched.<span style="color: #202020;">freq_recurrence_factor</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span> 
                            <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'; weekly'</span> 
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_recurrence_factor</span> <span style="color: #808080;">&lt;&gt;</span> <span style="color: #000;">0</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'; every '</span> 
                <span style="color: #808080;">+</span> <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">freq_recurrence_factor</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">10</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' weeks'</span> <span style="color: #0000FF;">End</span>
            <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">16</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'On day '</span> 
                <span style="color: #808080;">+</span> <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">freq_interval</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">10</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' of every '</span>
                <span style="color: #808080;">+</span> <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">freq_recurrence_factor</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">10</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' months'</span> 
            <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">32</span> <span style="color: #0000FF;">Then</span> 
                <span style="color: #0000FF;">Case</span> <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_relative_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'First'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_relative_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">2</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'Second'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_relative_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">4</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'Third'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_relative_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">8</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'Fourth'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_relative_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">16</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'Last'</span>
                <span style="color: #0000FF;">End</span> <span style="color: #808080;">+</span> 
                <span style="color: #0000FF;">Case</span> <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' Sunday'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">2</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' Monday'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">3</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' Tuesday'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">4</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' Wednesday'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">5</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' Thursday'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">6</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' Friday'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">7</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' Saturday'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">8</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' Day'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">9</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' Weekday'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_interval</span> <span style="color: #808080;">=</span> <span style="color: #000;">10</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' Weekend'</span>
                <span style="color: #0000FF;">End</span>
                <span style="color: #808080;">+</span> <span style="color: #0000FF;">Case</span> <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_recurrence_factor</span> <span style="color: #808080;">&lt;&gt;</span> <span style="color: #000;">0</span> 
                        And sched.<span style="color: #202020;">freq_recurrence_factor</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'; monthly'</span>
                    <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_recurrence_factor</span> <span style="color: #808080;">&lt;&gt;</span> <span style="color: #000;">0</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'; every '</span> 
                <span style="color: #808080;">+</span> <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">freq_recurrence_factor</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">10</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' months'</span> <span style="color: #0000FF;">End</span>
            <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">64</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'StartUp'</span>
            <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">128</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">'Idle'</span>
          <span style="color: #0000FF;">End</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'frequency'</span>
        , IsNull<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'Every '</span> <span style="color: #808080;">+</span> <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">freq_subday_interval</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">10</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> 
            <span style="color: #0000FF;">Case</span> <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_subday_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">2</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' seconds'</span>
                <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_subday_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">4</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' minutes'</span>
                <span style="color: #0000FF;">When</span> sched.<span style="color: #202020;">freq_subday_type</span> <span style="color: #808080;">=</span> <span style="color: #000;">8</span> <span style="color: #0000FF;">Then</span> <span style="color: #FF0000;">' hours'</span>
            <span style="color: #0000FF;">End</span>, <span style="color: #FF0000;">'Once'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'subFrequency'</span>
        , <span style="color: #FF00FF;">Replicate</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'0'</span>, <span style="color: #000;">6</span> <span style="color: #808080;">-</span> <span style="color: #FF00FF;">Len</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">active_start_time</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> 
            <span style="color: #808080;">+</span> <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">active_start_time</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">6</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'startTime'</span>
        , <span style="color: #FF00FF;">Replicate</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'0'</span>, <span style="color: #000;">6</span> <span style="color: #808080;">-</span> <span style="color: #FF00FF;">Len</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">active_end_time</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> 
            <span style="color: #808080;">+</span> <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">active_end_time</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">6</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'endTime'</span>
        , <span style="color: #FF00FF;">Replicate</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'0'</span>, <span style="color: #000;">6</span> <span style="color: #808080;">-</span> <span style="color: #FF00FF;">Len</span><span style="color: #808080;">&#40;</span>jobsched.<span style="color: #202020;">next_run_time</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> 
            <span style="color: #808080;">+</span> <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>jobsched.<span style="color: #202020;">next_run_time</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">6</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'nextRunTime'</span>
        , <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>jobsched.<span style="color: #202020;">next_run_date</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">char</span><span style="color: #808080;">&#40;</span><span style="color: #000;">8</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'nextRunDate'</span>
    <span style="color: #0000FF;">From</span> msdb.<span style="color: #202020;">dbo</span>.<span style="color: #202020;">sysschedules</span> <span style="color: #0000FF;">As</span> sched
    Join msdb.<span style="color: #202020;">dbo</span>.<span style="color: #202020;">sysjobschedules</span> <span style="color: #0000FF;">As</span> jobsched
        <span style="color: #0000FF;">On</span> sched.<span style="color: #202020;">schedule_id</span> <span style="color: #808080;">=</span> jobsched.<span style="color: #202020;">schedule_id</span>
    <span style="color: #0000FF;">Where</span> sched.<span style="color: #202020;">enabled</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #008080;">/* Finally, let's look at our actual jobs and tie it all together */</span>
<span style="color: #0000FF;">Select</span> job.<span style="color: #202020;">name</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'jobName'</span>
    , sched.<span style="color: #202020;">scheduleName</span>
    , sched.<span style="color: #202020;">frequency</span>
    , sched.<span style="color: #202020;">subFrequency</span>
    , <span style="color: #FF00FF;">SubString</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">startTime</span>, <span style="color: #000;">1</span>, <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">':'</span> 
        <span style="color: #808080;">+</span> <span style="color: #FF00FF;">SubString</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">startTime</span>, <span style="color: #000;">3</span>, <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' - '</span> 
        <span style="color: #808080;">+</span> <span style="color: #FF00FF;">SubString</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">endTime</span>, <span style="color: #000;">1</span>, <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">':'</span> 
        <span style="color: #808080;">+</span> <span style="color: #FF00FF;">SubString</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">endTime</span>, <span style="color: #000;">3</span>, <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> 
        <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'scheduleTime'</span> <span style="color: #008080;">-- HH:MM</span>
    , <span style="color: #FF00FF;">SubString</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">nextRunDate</span>, <span style="color: #000;">1</span>, <span style="color: #000;">4</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">'/'</span> 
        <span style="color: #808080;">+</span> <span style="color: #FF00FF;">SubString</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">nextRunDate</span>, <span style="color: #000;">5</span>, <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">'/'</span> 
        <span style="color: #808080;">+</span> <span style="color: #FF00FF;">SubString</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">nextRunDate</span>, <span style="color: #000;">7</span>, <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' '</span> 
        <span style="color: #808080;">+</span> <span style="color: #FF00FF;">SubString</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">nextRunTime</span>, <span style="color: #000;">1</span>, <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">':'</span> 
        <span style="color: #808080;">+</span> <span style="color: #FF00FF;">SubString</span><span style="color: #808080;">&#40;</span>sched.<span style="color: #202020;">nextRunTime</span>, <span style="color: #000;">3</span>, <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'nextRunDate'</span>
      <span style="color: #008080;">/* Note: the sysjobschedules table refreshes every 20 min, 
        so nextRunDate may be out of date */</span>
    , <span style="color: #FF0000;">'Execute msdb.dbo.sp_update_job @job_id = '</span><span style="color: #FF0000;">''</span> 
        <span style="color: #808080;">+</span> <span style="color: #0000FF;">Cast</span><span style="color: #808080;">&#40;</span>job.<span style="color: #202020;">job_id</span> <span style="color: #0000FF;">As</span> <span style="color: #0000FF;">char</span><span style="color: #808080;">&#40;</span><span style="color: #000;">36</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">''</span><span style="color: #FF0000;">', @enabled = 0;'</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'disableScript'</span>
    , art.<span style="color: #202020;">avgRunTime</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'avgRunTime_inSec'</span> <span style="color: #008080;">-- in seconds</span>
    , <span style="color: #808080;">&#40;</span>art.<span style="color: #202020;">avgRunTime</span> <span style="color: #808080;">/</span> <span style="color: #000;">60</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">As</span> <span style="color: #FF0000;">'avgRunTime_inMin'</span> <span style="color: #008080;">-- convert to minutes</span>
<span style="color: #0000FF;">From</span> msdb.<span style="color: #202020;">dbo</span>.<span style="color: #202020;">sysjobs</span> <span style="color: #0000FF;">As</span> job
Join myCTE <span style="color: #0000FF;">As</span> sched
    <span style="color: #0000FF;">On</span> job.<span style="color: #202020;">job_id</span> <span style="color: #808080;">=</span> sched.<span style="color: #202020;">job_id</span>
<span style="color: #0000FF;">Left</span> Join @avgRunTime <span style="color: #0000FF;">As</span> art
    <span style="color: #0000FF;">On</span> job.<span style="color: #202020;">job_id</span> <span style="color: #808080;">=</span> art.<span style="color: #202020;">job_id</span>
<span style="color: #0000FF;">Where</span> job.<span style="color: #202020;">enabled</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span> <span style="color: #008080;">-- do not display disabled jobs</span>
<span style="color: #0000FF;">Order</span> <span style="color: #0000FF;">By</span> nextRunDate;</pre></div></div>

<p>If this doesn't do exactly what you want, check out <a href="http://sqlsoft.co.uk/sqljobvis.php" target="_blank">SQLJobVis</a>, which Ken recommended.  It's a free tool that helps visualize the job history of SQL jobs.  </p>
]]></content:encoded>
			<wfw:commentRss>http://sqlfool.com/2010/12/sql-agent-job-script/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Find Missing Indexes in Stored Procs with T-SQL</title>
		<link>http://sqlfool.com/2009/03/find-missing-indexes/</link>
		<comments>http://sqlfool.com/2009/03/find-missing-indexes/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 16:11:37 +0000</pubDate>
		<dc:creator>Michelle Ufford</dc:creator>
				<category><![CDATA[Performance & Tuning]]></category>
		<category><![CDATA[SQL Tips]]></category>
		<category><![CDATA[Syndication]]></category>
		<category><![CDATA[T-SQL Scripts]]></category>
		<category><![CDATA[indexes]]></category>
		<category><![CDATA[missing indexes]]></category>
		<category><![CDATA[query plan]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://sqlfool.com/?p=572</guid>
		<description><![CDATA[This post should probably be called "The Power of Twitter." I've said it before, I'll say it again: I love Twitter. I mostly follow SQL Server people, so it's become a great source of new information and help when I feel like banging my head against the wall when I get stumped. So last week, [...]]]></description>
			<content:encoded><![CDATA[<p>This post should probably be called "The Power of Twitter."  I've said it before, I'll say it again: I love Twitter.  I mostly follow SQL Server people, so it's become a great source of new information and help <span style="text-decoration: line-through;">when I feel like banging my head against the wall</span> when I get stumped.</p>
<p>So last week, <a href="http://sqlblog.com/blogs/jonathan_kehayias" target="_blank">Jonathan Kehayias</a> (<a href="http://twitter.com/jmkehayias" target="_blank">@jmkehayias</a>) posted a link to a <a href="http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/71814032-cd8d-4802-80de-7fb2bee80f41" target="_blank">missing index script</a> on the MSDN forums.  Jonathan's script is modified from something he put together for a question posed by <a href="http://facility9.com" target="_blank">Jeremiah Peschka</a> (<a href="http://twitter.com/peschkaj" target="_blank">@peschkaj</a>).  </p>
<p>Jonathan's script intrigued me.  I'd never tried to search a query plan's XML before, and it certainly presents some interesting possibilities.  After dealing with a missing index in production a few weeks ago (caused by an index change), I thought it'd be a great idea to put a regular monitor in place.  </p>
<p>Everything was going well until I ran into a problem where I couldn't get the proc name returned.  The results spanned numerous databases; I had the object_id and database_id, but I wanted to store the proc name instead.  I tried several different methods, including sp_msforeachdb and sp_executeSQL, and while I had a working solution, it was a little more clunky than I liked.  So I asked my awesome followers on Twitter for any tips and within minutes I had half a dozen responses.  In the end, <a href="http://twitter.com/MladenPrajdic" target="_blank">@MladenPrajdic</a> solved my problem with a pretty simple solution: put 'Use ?;' at the start of my sp_msforeachdb statement.  Thanks again, Mladen!</p>
<p>I've now had this process running on my server for a few days now, with good success.  The stored procedure below will return the database name, proc name, and query plan XML for any stored proc with a missing index.  This is a centralized proc that will store the results in a table for later action.  If you click on the XML, you should see the actual query plan with the missing index details.  Because this looks at cached query plans, your best bet is to run it fairly regularly (maybe daily) to increase your chances of catching any problem procs.</p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;"><span style="color: #008080;">/* Create a stored procedure skeleton */</span>
<span style="color: #0000FF;">If</span> <span style="color: #FF00FF;">ObjectProperty</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">Object_ID</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'dbo.dba_missingIndexStoredProc_sp'</span><span style="color: #808080;">&#41;</span>, N<span style="color: #FF0000;">'IsProcedure'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">Is</span> Null
<span style="color: #0000FF;">Begin</span>
    <span style="color: #0000FF;">Execute</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'Create Procedure dbo.dba_missingIndexStoredProc_sp As Print '</span><span style="color: #FF0000;">'Hello World!'</span><span style="color: #FF0000;">''</span><span style="color: #808080;">&#41;</span>
    <span style="color: #0000FF;">RaisError</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'Procedure dba_missingIndexStoredProc_sp created.'</span>, <span style="color: #000;">10</span>, <span style="color: #000;">1</span><span style="color: #808080;">&#41;</span>;
<span style="color: #0000FF;">End</span>;
Go
&nbsp;
<span style="color: #008080;">/* Drop our table if it already exists */</span>
<span style="color: #0000FF;">If</span> Exists<span style="color: #808080;">&#40;</span><span style="color: #0000FF;">Select</span> <span style="color: #FF00FF;">Object_ID</span> <span style="color: #0000FF;">From</span> sys.<span style="color: #202020;">tables</span> <span style="color: #0000FF;">Where</span> <span style="color: #808080;">&#91;</span>name<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> N<span style="color: #FF0000;">'dba_missingIndexStoredProc'</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">Begin</span>
    <span style="color: #0000FF;">Drop</span> <span style="color: #0000FF;">Table</span> dbo.<span style="color: #202020;">dba_missingIndexStoredProc</span>
    <span style="color: #0000FF;">Print</span> <span style="color: #FF0000;">'dba_missingIndexStoredProc table dropped!'</span>;
<span style="color: #0000FF;">End</span>
&nbsp;
<span style="color: #008080;">/* Create our table */</span>
<span style="color: #0000FF;">Create</span> <span style="color: #0000FF;">Table</span> dbo.<span style="color: #202020;">dba_missingIndexStoredProc</span>
<span style="color: #808080;">&#40;</span>
      missingIndexSP_id <span style="color: #0000FF;">int</span> <span style="color: #0000FF;">Identity</span><span style="color: #808080;">&#40;</span><span style="color: #000;">1</span>,<span style="color: #000;">1</span><span style="color: #808080;">&#41;</span>   Not Null
    , databaseName      <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">128</span><span style="color: #808080;">&#41;</span>        Not Null
    , databaseID        <span style="color: #0000FF;">int</span>                 Not Null
    , objectName        <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">128</span><span style="color: #808080;">&#41;</span>        Not Null
    , objectID          <span style="color: #0000FF;">int</span>                 Not Null
    , query_plan        xml                 Not Null
    , executionDate     <span style="color: #0000FF;">smalldatetime</span>       Not Null
&nbsp;
    <span style="color: #0000FF;">Constraint</span> PK_missingIndexStoredProc
        <span style="color: #0000FF;">Primary</span> <span style="color: #0000FF;">Key</span> <span style="color: #0000FF;">Clustered</span><span style="color: #808080;">&#40;</span>missingIndexSP_id<span style="color: #808080;">&#41;</span>
<span style="color: #808080;">&#41;</span>;
&nbsp;
<span style="color: #0000FF;">Print</span> <span style="color: #FF0000;">'dba_missingIndexStoredProc Table Created'</span>;
&nbsp;
<span style="color: #008080;">/* Configure our settings */</span>
<span style="color: #0000FF;">Set</span> ANSI_Nulls <span style="color: #0000FF;">On</span>;
<span style="color: #0000FF;">Set</span> Quoted_Identifier <span style="color: #0000FF;">On</span>;
Go
&nbsp;
<span style="color: #0000FF;">Alter</span> <span style="color: #0000FF;">Procedure</span> dbo.<span style="color: #202020;">dba_missingIndexStoredProc_sp</span>
&nbsp;
        <span style="color: #008080;">/* Declare Parameters */</span>
            @lastExecuted_inDays    <span style="color: #0000FF;">int</span> <span style="color: #808080;">=</span> <span style="color: #000;">7</span>
          , @minExecutionCount      <span style="color: #0000FF;">int</span> <span style="color: #808080;">=</span> <span style="color: #000;">7</span>
          , @logResults             <span style="color: #0000FF;">bit</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
          , @displayResults         <span style="color: #0000FF;">bit</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
&nbsp;
<span style="color: #0000FF;">As</span>
<span style="color: #008080;">/*********************************************************************************
    Name:       dba_missingIndexStoredProc_sp
&nbsp;
    Author:     Michelle Ufford, http://sqlfool.com
&nbsp;
    Purpose:    Retrieves stored procedures with missing indexes in their
                cached query plans.
&nbsp;
                @lastExecuted_inDays = number of days old the cached query plan
                                       can be to still appear in the results;
                                       the HIGHER the number, the longer the
                                       execution time.
&nbsp;
                @minExecutionCount = minimum number of executions the cached
                                     query plan can have to still appear 
                                     in the results; the LOWER the number,
                                     the longer the execution time.
&nbsp;
                @logResults = store results in dba_missingIndexStoredProc
&nbsp;
                @displayResults = return results to the caller
&nbsp;
    Notes:      This is not 100% guaranteed to catch all missing indexes in
                a stored procedure.  It will only catch it if the stored proc's
                query plan is still in cache.  Run regularly to help minimize
                the chance of missing a proc.
&nbsp;
    Called by:  DBA and/or SQL Agent Job
&nbsp;
    Date        User    Description
    ----------------------------------------------------------------------------
    2009-03-02  MFU     Initial Release for public consumption
*********************************************************************************
    Exec dbo.dba_missingIndexStoredProc_sp
          @lastExecuted_inDays  = 30
        , @minExecutionCount    = 5
        , @logResults           = 1
        , @displayResults       = 1;
*********************************************************************************/</span>
&nbsp;
<span style="color: #0000FF;">Set</span> <span style="color: #0000FF;">NoCount</span> <span style="color: #0000FF;">On</span>;
<span style="color: #0000FF;">Set</span> XACT_Abort <span style="color: #0000FF;">On</span>;
<span style="color: #0000FF;">Set</span> Ansi_Padding <span style="color: #0000FF;">On</span>;
<span style="color: #0000FF;">Set</span> Ansi_Warnings <span style="color: #0000FF;">On</span>;
<span style="color: #0000FF;">Set</span> ArithAbort <span style="color: #0000FF;">On</span>;
<span style="color: #0000FF;">Set</span> Concat_Null_Yields_Null <span style="color: #0000FF;">On</span>;
<span style="color: #0000FF;">Set</span> Numeric_RoundAbort <span style="color: #0000FF;">Off</span>;
&nbsp;
<span style="color: #0000FF;">Begin</span>
&nbsp;
    <span style="color: #008080;">/* Declare Variables */</span>
    <span style="color: #0000FF;">Declare</span> @currentDateTime <span style="color: #0000FF;">smalldatetime</span>;
&nbsp;
    <span style="color: #0000FF;">Set</span> @currentDateTime <span style="color: #808080;">=</span> <span style="color: #FF00FF;">GetDate</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#41;</span>;
&nbsp;
    <span style="color: #0000FF;">Declare</span> @plan_handles <span style="color: #0000FF;">Table</span>
    <span style="color: #808080;">&#40;</span>
        plan_handle     <span style="color: #0000FF;">varbinary</span><span style="color: #808080;">&#40;</span><span style="color: #000;">64</span><span style="color: #808080;">&#41;</span>   Not Null
    <span style="color: #808080;">&#41;</span>;
&nbsp;
    <span style="color: #0000FF;">Create</span> <span style="color: #0000FF;">Table</span> #missingIndexes
    <span style="color: #808080;">&#40;</span>
          databaseID    <span style="color: #0000FF;">int</span>             Not Null
        , objectID      <span style="color: #0000FF;">int</span>             Not Null
        , query_plan    xml             Not Null
&nbsp;
        <span style="color: #0000FF;">Constraint</span> PK_temp_missingIndexes <span style="color: #0000FF;">Primary</span> <span style="color: #0000FF;">Key</span> <span style="color: #0000FF;">Clustered</span>
        <span style="color: #808080;">&#40;</span>
            databaseID, objectID
        <span style="color: #808080;">&#41;</span>
    <span style="color: #808080;">&#41;</span>;
&nbsp;
    <span style="color: #0000FF;">Begin</span> Try
&nbsp;
        <span style="color: #008080;">/* Perform some data validation */</span>
        <span style="color: #0000FF;">If</span> @logResults <span style="color: #808080;">=</span> <span style="color: #000;">0</span> And @displayResults <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
        <span style="color: #0000FF;">Begin</span>
&nbsp;
            <span style="color: #008080;">/* Log the fact that there were open transactions */</span>
            <span style="color: #0000FF;">Execute</span> dbo.<span style="color: #202020;">dba_logError_sp</span>
                  @errorType            <span style="color: #808080;">=</span> <span style="color: #FF0000;">'app'</span>
                , @app_errorProcedure   <span style="color: #808080;">=</span> <span style="color: #FF0000;">'dba_missingIndexStoredProc_sp'</span>
                , @app_errorMessage     <span style="color: #808080;">=</span> <span style="color: #FF0000;">'@logResults = 0 and @displayResults = 0; no action taken, exiting stored proc.'</span>
                , @forceExit            <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
                , @returnError          <span style="color: #808080;">=</span> <span style="color: #000;">1</span>;  
&nbsp;
        <span style="color: #0000FF;">End</span>;
&nbsp;
        <span style="color: #0000FF;">Begin</span> <span style="color: #0000FF;">Transaction</span>;
&nbsp;
        <span style="color: #008080;">/* Retrieve distinct plan handles to minimize dm_exec_query_plan lookups */</span>
        <span style="color: #0000FF;">Insert</span> <span style="color: #0000FF;">Into</span> @plan_handles
        <span style="color: #0000FF;">Select</span> <span style="color: #0000FF;">Distinct</span> plan_handle
        <span style="color: #0000FF;">From</span> sys.<span style="color: #202020;">dm_exec_query_stats</span>
        <span style="color: #0000FF;">Where</span> last_execution_time <span style="color: #808080;">&gt;</span> <span style="color: #FF00FF;">DateAdd</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">day</span>, <span style="color: #808080;">-</span>@lastExecuted_inDays, @currentDateTime<span style="color: #808080;">&#41;</span>
            And execution_count <span style="color: #808080;">&gt;</span> @minExecutionCount;
&nbsp;
        <span style="color: #0000FF;">With</span> xmlNameSpaces <span style="color: #808080;">&#40;</span>
            <span style="color: #0000FF;">Default</span> <span style="color: #FF0000;">'http://schemas.microsoft.com/sqlserver/2004/07/showplan'</span>
        <span style="color: #808080;">&#41;</span>
&nbsp;
        <span style="color: #008080;">/* Retrieve our query plan's XML if there's a missing index */</span>
        <span style="color: #0000FF;">Insert</span> <span style="color: #0000FF;">Into</span> #missingIndexes
        <span style="color: #0000FF;">Select</span> deqp.<span style="color: #808080;">&#91;</span>dbid<span style="color: #808080;">&#93;</span>
            , deqp.<span style="color: #202020;">objectid</span>
            , deqp.<span style="color: #202020;">query_plan</span> 
        <span style="color: #0000FF;">From</span> @plan_handles <span style="color: #0000FF;">As</span> ph
        Cross Apply sys.<span style="color: #202020;">dm_exec_query_plan</span><span style="color: #808080;">&#40;</span>ph.<span style="color: #202020;">plan_handle</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">As</span> deqp 
        <span style="color: #0000FF;">Where</span> deqp.<span style="color: #202020;">query_plan</span>.<span style="color: #202020;">exist</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'//MissingIndex'</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
            And deqp.<span style="color: #202020;">objectid</span> <span style="color: #0000FF;">Is</span> Not Null;
&nbsp;
        <span style="color: #008080;">/* Do we want to store the results of our process? */</span>
        <span style="color: #0000FF;">If</span> @logResults <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
        <span style="color: #0000FF;">Begin</span>
            <span style="color: #0000FF;">Insert</span> <span style="color: #0000FF;">Into</span> dbo.<span style="color: #202020;">dba_missingIndexStoredProc</span>
            <span style="color: #0000FF;">Execute</span> sp_msForEachDB <span style="color: #FF0000;">'Use ?; 
                                    Select '</span><span style="color: #FF0000;">'?'</span><span style="color: #FF0000;">'
                                        , mi.databaseID
                                        , Object_Name(o.object_id)
                                        , o.object_id
                                        , mi.query_plan
                                        , GetDate()
                                    From sys.objects As o 
                                    Join #missingIndexes As mi 
                                        On o.object_id = mi.objectID 
                                    Where databaseID = DB_ID();'</span>;
&nbsp;
        <span style="color: #0000FF;">End</span>
        <span style="color: #008080;">/* We're not logging it, so let's display it */</span>
        <span style="color: #0000FF;">Else</span>
        <span style="color: #0000FF;">Begin</span>
            <span style="color: #0000FF;">Execute</span> sp_msForEachDB <span style="color: #FF0000;">'Use ?; 
                                    Select '</span><span style="color: #FF0000;">'?'</span><span style="color: #FF0000;">'
                                        , mi.databaseID
                                        , Object_Name(o.object_id)
                                        , o.object_id
                                        , mi.query_plan
                                        , GetDate()
                                    From sys.objects As o 
                                    Join #missingIndexes As mi 
                                        On o.object_id = mi.objectID 
                                    Where databaseID = DB_ID();'</span>;
        <span style="color: #0000FF;">End</span>;
&nbsp;
        <span style="color: #008080;">/* See above; this part will only work if we've 
           logged our data. */</span>
        <span style="color: #0000FF;">If</span> @displayResults <span style="color: #808080;">=</span> <span style="color: #000;">1</span> And @logResults <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
        <span style="color: #0000FF;">Begin</span>
            <span style="color: #0000FF;">Select</span> <span style="color: #808080;">*</span>
            <span style="color: #0000FF;">From</span> dbo.<span style="color: #202020;">dba_missingIndexStoredProc</span>
            <span style="color: #0000FF;">Where</span> executionDate <span style="color: #808080;">&gt;=</span> @currentDateTime;
        <span style="color: #0000FF;">End</span>;
&nbsp;
        <span style="color: #008080;">/* If you have an open transaction, commit it */</span>
        <span style="color: #0000FF;">If</span> <span style="color: #FF00FF;">@@TranCount</span> <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
            <span style="color: #0000FF;">Commit</span> <span style="color: #0000FF;">Transaction</span>;
&nbsp;
    <span style="color: #0000FF;">End</span> Try
    <span style="color: #0000FF;">Begin</span> Catch
&nbsp;
        <span style="color: #008080;">/* Whoops, there was an error... rollback! */</span>
        <span style="color: #0000FF;">If</span> <span style="color: #FF00FF;">@@TranCount</span> <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
            <span style="color: #0000FF;">Rollback</span> <span style="color: #0000FF;">Transaction</span>;
&nbsp;
        <span style="color: #008080;">/* Return an error message and log it */</span>
        <span style="color: #0000FF;">Execute</span> dbo.<span style="color: #202020;">dba_logError_sp</span>;
&nbsp;
    <span style="color: #0000FF;">End</span> Catch;
&nbsp;
    <span style="color: #008080;">/* Clean-Up! */</span>
    <span style="color: #0000FF;">Drop</span> <span style="color: #0000FF;">Table</span> #missingIndexes;
&nbsp;
    <span style="color: #0000FF;">Set</span> <span style="color: #0000FF;">NoCount</span> <span style="color: #0000FF;">Off</span>;
    <span style="color: #0000FF;">Return</span> <span style="color: #000;">0</span>;
<span style="color: #0000FF;">End</span>
Go</pre></div></div>

<p>Not know what "EXECUTE dbo.dba_logError_sp;" is doing?  Check out my blog post on <a href="http://sqlfool.com/2008/12/error-handling-in-t-sql/">Error Handling in T-SQL</a>.</p>
<p>HTH!</p>
<p>Michelle</p>
<p>Source: <a href="http://sqlfool.com/2009/03/find-missing-indexes/">http://sqlfool.com/2009/03/find-missing-indexes/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sqlfool.com/2009/03/find-missing-indexes/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

