<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0QMSX89fip7ImA9WhRRFEk.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079</id><updated>2011-11-27T16:49:48.166-08:00</updated><category term="mssqlsystemresource" /><category term="TRANSACTIONLOG" /><category term="setup" /><category term="disk arrays" /><category term="SQL Agent" /><category term="Performance" /><category term="RESTORE" /><category term="SQLIO" /><category term="INDEX" /><category term="day to day maintenance" /><category term="hosting" /><category term="T_SQL" /><category term="storage" /><category term="RECOVERY" /><category term="Error log" /><category term="CHECKDB" /><category term="INDEXES AUTO CREATE DROP" /><category term="New weblog on SQL Server" /><category term="STATISTICS" /><category term="code catalog" /><category term="Upgrade" /><category term="STATISTICS IO" /><category term="SQL 2000" /><category term="Alerts" /><category term="DMV" /><category term="differential" /><category term="REORGANIZE" /><category term="MSDB" /><category term="DBCC" /><category term="datetime" /><category term="Windows OS" /><category term="T-SQL" /><category term="raid" /><category term="REBUILD" /><category term="TempDB" /><category term="defrag" /><category term="backup" /><category term="Cursors" /><category term="Books" /><title>Microsoft SQL Server Advisor</title><subtitle type="html">Don't optimize the workload, reduce the workload</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://sqlserveradvisor.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/MDvk" /><feedburner:info uri="blogspot/mdvk" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DE4BR3gyeip7ImA9WxJVFEo.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-5408979055213956262</id><published>2009-06-28T12:28:00.000-07:00</published><updated>2009-07-01T12:35:56.692-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-01T12:35:56.692-07:00</app:edited><title>tablediff: howto compare all database tables</title><content type="html">tablediff.exe is a command-line utility that you can you to compare tables from different database / servers&lt;br /&gt;It is located in the ...\ Program Files\Microsoft SQL Server\90\COM folder.&lt;br /&gt;&lt;br /&gt;It is a handy tool that can compare tables at an amazingly high speed and create sync scripts along the way.&lt;br /&gt;Downside is that it doesn't accept wildcards like: compare all tables of a database,&lt;br /&gt;you have to pass all object info to the tool via the command line.&lt;br /&gt;&lt;br /&gt;The purpose of this T-SQL script is to build a full tablediff.exe command line for every object in the specified databases and print it in the messages window. You can then copy paste it in a .bat file and execute it from a cmd.exe window.&lt;br /&gt;&lt;br /&gt;Log file and sync scripts are placed in c:\ folder with 'tablediff' + table name as file name and .sql or .txt as extention.&lt;br /&gt;&lt;br /&gt;Tips;&lt;br /&gt;Primary keys must be defined on all the tables for the tool to work ok&lt;br /&gt;Sync'ing of blob datatypes (like varchar(max) or varbinary(max)) is not supported -unfortunately-,&lt;br /&gt;You can use the bcp utility or a linked server to accomplish this.&lt;br /&gt;Script presented here uses integrated security, so you have to log on with the right privileges&lt;br /&gt;or use the SQL Server service account for the script to work ok.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tsql"  style="border: 1px solid rgb(208, 208, 208); color: rgb(0, 0, 102); background-color: rgb(240, 240, 240);font-family:monospace;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;USE&lt;/span&gt; your_db_here &lt;span style="color: rgb(0, 128, 128);"&gt;-- for selection of the objects from INFORMATION_SCHEMA.TABLES&lt;/span&gt;&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;DECLARE&lt;/span&gt; @compareschema &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;100&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;, @comparetable &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;400&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;DECLARE&lt;/span&gt; @sourceserver &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;100&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;, @destinationserver &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;100&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;DECLARE&lt;/span&gt; @sourcedatabase &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;100&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;, @destinationdatabase &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;100&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;DECLARE&lt;/span&gt; @tablediffpath &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;512&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;DECLARE&lt;/span&gt; @command &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;4000&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;SET&lt;/span&gt; @sourceserver &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'Server1'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;SET&lt;/span&gt; @sourcedatabase &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'CodeCatalog'&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;-- or db_name()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;SET&lt;/span&gt; @destinationserver &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'Server2'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;SET&lt;/span&gt; @destinationdatabase &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'CodeCatalog'&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;-- or db_name(), if same name&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;-- set the right path here....&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;SET&lt;/span&gt; @tablediffpath&lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'"C:&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;\P&lt;/span&gt;rogram Files&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;\M&lt;/span&gt;icrosoft SQL Server&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;\9&lt;/span&gt;0&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;\C&lt;/span&gt;OM&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;\t&lt;/span&gt;ablediff.exe"'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;DECLARE&lt;/span&gt; tablenames_cursor &lt;span style="color: rgb(0, 0, 255);"&gt;CURSOR&lt;/span&gt; FAST_F&lt;span style="color: rgb(128, 128, 128);"&gt;OR&lt;/span&gt;WARD &lt;span style="color: rgb(0, 0, 255);"&gt;LOCAL&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;FOR&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 0, 255);"&gt;SELECT&lt;/span&gt; TABLE_SCHEMA,TABLE_NAME&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;FROM&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;IN&lt;/span&gt;F&lt;span style="color: rgb(128, 128, 128);"&gt;OR&lt;/span&gt;MATION_SCHEMA.&lt;span style="color: rgb(32, 32, 32);"&gt;TABLES&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 0, 255);"&gt;WHERE&lt;/span&gt; TABLE_TYPE &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'BASE TABLE'&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 0, 255);"&gt;ORDER&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;BY&lt;/span&gt; TABLE_NAME&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;OPEN&lt;/span&gt; tablenames_cursor&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;FETCH&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;NEXT&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;FROM&lt;/span&gt; tablenames_cursor &lt;span style="color: rgb(0, 0, 255);"&gt;INTO&lt;/span&gt; @compareschema, @comparetable&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;WHILE&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;@@FETCH_STATUS&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;-&lt;/span&gt;1&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 0, 255);"&gt;SET&lt;/span&gt; @command &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; @tablediffpath &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;' -sourceserver '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @sourceserver &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;' -sourcedatabase '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @sourcedatabase &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;' -sourceschema '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @compareschema &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;' -sourcetable '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt;&lt;br /&gt;            @comparetable &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;' -destinationserver '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @destinationserver &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;' -destinationdatabase '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @destinationdatabase &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;' -destinationschema '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @compareschema &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: rgb(255, 0, 0);"&gt;' -destinationtable '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;' -f C:&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;\t&lt;/span&gt;ablediff-'&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'.sql'&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;' -o C:&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;\t&lt;/span&gt;ablediff-'&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'.txt'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 0, 255);"&gt;PRINT&lt;/span&gt; @command &lt;span style="color: rgb(0, 128, 128);"&gt;-- output to messages window/tab&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 0, 255);"&gt;FETCH&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;NEXT&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;FROM&lt;/span&gt; tablenames_cursor &lt;span style="color: rgb(0, 0, 255);"&gt;INTO&lt;/span&gt; @compareschema, @comparetable&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;CLOSE&lt;/span&gt; tablenames_cursor&lt;br /&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;DEALLOCATE&lt;/span&gt; tablenames_cursor&lt;/div&gt;&lt;br /&gt;see &lt;a href="http://msdn.microsoft.com/en-us/library/ms162843.aspx" target="_blank"&gt;MSDN&lt;/a&gt; for more info on the supported command-line parameters of tablediff.exe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-5408979055213956262?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cFdIoT37agq0MVJ_NGDtnfdMQcs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cFdIoT37agq0MVJ_NGDtnfdMQcs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cFdIoT37agq0MVJ_NGDtnfdMQcs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cFdIoT37agq0MVJ_NGDtnfdMQcs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/5408979055213956262/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=5408979055213956262" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/5408979055213956262?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/5408979055213956262?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/26dIV9VWqDM/tablediff-howto-compare-database-tables.html" title="tablediff: howto compare all database tables" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/06/tablediff-howto-compare-database-tables.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4MQX4-eip7ImA9WxJVFEo.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-6808700170289803617</id><published>2009-06-28T12:12:00.000-07:00</published><updated>2009-07-01T12:36:20.052-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-01T12:36:20.052-07:00</app:edited><title>Howto compare all database tables using T-SQL</title><content type="html">Extension on post from &lt;a href="http://weblogs.sqlteam.com/jeffs/archive/2007/05/02/60194.aspx" target="_blank"&gt;Jeff&lt;/a&gt; on comparing tables.&lt;br /&gt;By looping through the INFORMATION_SCHEMA.TABLES collection and construct the T-SQL&lt;br /&gt;along the way, you have a simple and easy method for comparing databases.&lt;br /&gt;&lt;br /&gt;&lt;div class="tsql"  style="border: 1px solid rgb(208, 208, 208); color: rgb(0, 0, 102); background-color: rgb(240, 240, 240);font-family:monospace;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;USE&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; your_source_db&lt;span style="color: rgb(128, 128, 128);"&gt;-&lt;/span&gt;for_comparison_here &lt;span style="color: rgb(0, 128, 128);"&gt;--(to select the right tables from sys.objects)&lt;/span&gt;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;DECLARE&lt;/span&gt; @compareschema &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;100&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;DECLARE&lt;/span&gt; @comparetable1 &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;400&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;, @comparetable2 &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;400&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;DECLARE&lt;/span&gt; @dbtocompare &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;200&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;, @command &lt;span style="color: rgb(0, 0, 255);"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;4000&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;SET&lt;/span&gt; @dbtocompare &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'dbtocompare'&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;-- db  to compare&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;-- or set @dbtocompare = 'LINKEDSQLSERVER.dbtocompare' -- or db plus linked server if required&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;DECLARE&lt;/span&gt; tablenames_cursor &lt;span style="color: rgb(0, 0, 255);"&gt;CURSOR&lt;/span&gt; FAST_F&lt;span style="color: rgb(128, 128, 128);"&gt;OR&lt;/span&gt;WARD &lt;span style="color: rgb(0, 0, 255);"&gt;LOCAL&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;FOR&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;SELECT&lt;/span&gt; TABLE_SCHEMA,TABLE_NAME&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;FROM&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;IN&lt;/span&gt;F&lt;span style="color: rgb(128, 128, 128);"&gt;OR&lt;/span&gt;MATION_SCHEMA.&lt;span style="color: rgb(32, 32, 32);"&gt;TABLES&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;WHERE&lt;/span&gt; TABLE_TYPE &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'BASE TABLE'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;ORDER&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;BY&lt;/span&gt; TABLE_NAME&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;OPEN&lt;/span&gt; tablenames_cursor&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;FETCH&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;NEXT&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;FROM&lt;/span&gt; tablenames_cursor &lt;span style="color: rgb(0, 0, 255);"&gt;INTO&lt;/span&gt; @compareschema, @comparetable1&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;WHILE&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;@@FETCH_STATUS&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;-&lt;/span&gt;1&lt;span style="color: rgb(128, 128, 128);"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;SET&lt;/span&gt; @comparetable1&lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; @compareschema &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'.'&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable1&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;SET&lt;/span&gt; @comparetable2 &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; @dbtocompare &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'.'&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable1&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;PRINT&lt;/span&gt; @comparetable1 &lt;span style="color: rgb(0, 128, 128);"&gt;-- print tables in the messages window/tab&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;PRINT&lt;/span&gt; @comparetable2&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;SET&lt;/span&gt; @command &lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'select '&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;''&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable1 &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;''&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;' CompTable, *  from&lt;br /&gt;   (select * from '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable1 &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;br /&gt;    except&lt;br /&gt;    select * from '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable2 &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;') as CompTable&lt;br /&gt; union all&lt;br /&gt; select '&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;''&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable2 &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;''&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;' CompTable, *  from&lt;br /&gt;   (select * from '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable2 &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;br /&gt;    except&lt;br /&gt; select * from '&lt;/span&gt; &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt; @comparetable1 &lt;span style="color: rgb(128, 128, 128);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;') as CompTable '&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;EXEC&lt;/span&gt; &lt;span style="color: rgb(175, 0, 0);"&gt;SP_EXECUTESQL&lt;/span&gt; @command&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;FETCH&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;NEXT&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;FROM&lt;/span&gt; tablenames_cursor &lt;span style="color: rgb(0, 0, 255);"&gt;INTO&lt;/span&gt; @compareschema, @comparetable1&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;CLOSE&lt;/span&gt; tablenames_cursor&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;DEALLOCATE&lt;/span&gt; tablenames_cursor&lt;/div&gt;&lt;br /&gt;Because of the 'except' this construction works for SQL Server 2005 and higher only, and you can't use the the -older- text, ntext and image datatypes in comparisons.&lt;br /&gt;You have to convert them to the newer varchar(max), nvarchar(max), and varbinary(max) data types first. (see my post on &lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/sql-server-2000-post-upgrade-steps.html" target="blank"&gt;SQL Server 2000 post upgrade steps&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;This is the error you get when you do use older data types&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; Msg 421, Level 16, State 1, Line 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;The text data type cannot be selected as DISTINCT because it is not comparable.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Msg 402, Level 16, State 1, Line 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;The data types text and text are incompatible in the is operator.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-6808700170289803617?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-7z6Ze6zqTAUsJNsiECl4wyHmnE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-7z6Ze6zqTAUsJNsiECl4wyHmnE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-7z6Ze6zqTAUsJNsiECl4wyHmnE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-7z6Ze6zqTAUsJNsiECl4wyHmnE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/6808700170289803617/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=6808700170289803617" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/6808700170289803617?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/6808700170289803617?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/_OJWl5FReP8/howto-compare-database-tables-t-sql-sql.html" title="Howto compare all database tables using T-SQL" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/06/howto-compare-database-tables-t-sql-sql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04MQXc-fip7ImA9WxVbGEg.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-5968381806179207678</id><published>2009-04-04T07:20:00.000-07:00</published><updated>2009-04-04T07:39:40.956-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-04T07:39:40.956-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T_SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="TempDB" /><category scheme="http://www.blogger.com/atom/ns#" term="Cursors" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>How to use SQL Server T-SQL cursors</title><content type="html">&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The general advice within the SQL Server community is do not use any T-SQL cursors at any time.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;I must say that I have to agree, although if you have browsed my blog you've noticed that there are a couple of occasions when I do use cursors &lt;/span&gt;&lt;span style="font-family:arial;"&gt;but only when the following is true:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;- All cursors are read_only / forward-only for optimum speed.&lt;br /&gt;- They're not used in OLTP environments.&lt;br /&gt;- Datasources are small sets, usually system objects, like a list of databases / tables.&lt;br /&gt;- The impact the cursor is many times smaller then the processing steps taken with the row results.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;(like a cursor based on sys.databases and with the result of each row a full database backup is made).&lt;br /&gt;&lt;br /&gt;Coding guidelines:&lt;br /&gt;- Avoid using cursors and try solve the problem by using set based operations.&lt;br /&gt;- Try to base them on readonly tables or local (#temptable) temporarily objects.&lt;br /&gt;- Cleanup! Always CLOSE and DEALLOCATE cursors.&lt;br /&gt;- Specify the 'LOCAL' option.&lt;br /&gt;- Specify the FAST_FORWARD clause on DECLARE CURSOR. This opens an optimized forward-only, read-only cursor.&lt;br /&gt;- Never use cursors in OLTP environments.&lt;br /&gt;- Never use them as source of an update: UPDATE table SET col1 = 2 WHERE CURRENT OF the_cursor;&lt;br /&gt;- Cursors are memory intensive; base them on smaller sets (less 5,000-10,000 rows, your site could differ: test!).&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;template:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;DECLARE&lt;/span&gt; the_cursor &lt;span style="color: #0000FF;"&gt;CURSOR&lt;/span&gt; FAST_F&lt;span style="color: #808080;"&gt;OR&lt;/span&gt;WARD &lt;span style="color: #0000FF;"&gt;LOCAL&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;FOR&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; col1,col2,col3&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; dbo.&lt;span style="color: #202020;"&gt;mytable&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;OPEN&lt;/span&gt; the_cursor&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;FETCH&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;NEXT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; the_cursor &lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt; @col1,@col2,@col3&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;WHILE&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;@@FETCH_STATUS&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="color: #000;"&gt;1&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;FETCH&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;NEXT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; the_cursor &lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt; @col1,@col2,@col3&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;CLOSE&lt;/span&gt; the_cursor&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;DEALLOCATE&lt;/span&gt; the_cursor&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;TIP:&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;If you do need cursors in high load OLTP environments because of some complex calculation that can't be done set based take the following approach: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Copy the required result set in a temporary object. Retrieve only the rows and columns you need, but do include all the fields of the primary key.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;create #temptable (CalcValue int, pkCol int)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;INSERT INTO #temptable (CalcValue, pkCol)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SELECT 0, PrimaryKeyCol&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;FROM dbo.HighLoadOLTPtable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;WHERE &lt;span style="color:#009900;"&gt;-- your where clause here&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#009900;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Base your cursor on the temp. object.&lt;br /&gt;&lt;br /&gt;Loop the cursor, perform your calculation and store the result in the temp. object row:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;UPDATE #temptable SET CalcValue=complex_calculated_value &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;WHERE pkCol=pk_fields_as_fetched_by_cursor&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;When done looping close/deallocate the cursor, and update the high load OLTP source table(s) set based by primarykey, use a BEGIN TRANSACTION / COMMIT if required:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;UPDATE dbo.HighLoadOLTPtable SET CalculatedValue = #temptable.CalcValueFROM dbo.HighLoadOLTPtable, #temptableWHERE dbo.HighLoadOLTPtable.PrimaryKeyCol = #temptable.pkCol&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;see my posts on &lt;/span&gt;&lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/how-to-configure-sql-server-tempdb.html" target="blank"&gt;&lt;span style="font-family:arial;"&gt;TempDB configuration&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; and &lt;/span&gt;&lt;a href="http://sqlserveradvisor.blogspot.com/2009/04/sqlserver-tempdb-objects-t-sql-howto.html" target="blank"&gt;&lt;span style="font-family:arial;"&gt;TempDB objects&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-5968381806179207678?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Nud7JClNlLjCWxK1ohM9xFb1m84/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Nud7JClNlLjCWxK1ohM9xFb1m84/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Nud7JClNlLjCWxK1ohM9xFb1m84/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Nud7JClNlLjCWxK1ohM9xFb1m84/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/5968381806179207678/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=5968381806179207678" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/5968381806179207678?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/5968381806179207678?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/IdoXkT-H-SQ/sqlserver-cursor-usage-howto-sql-server.html" title="How to use SQL Server T-SQL cursors" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/04/sqlserver-cursor-usage-howto-sql-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ADQ3o9fyp7ImA9WxVbFkw.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-3370236774087191479</id><published>2009-04-01T12:36:00.000-07:00</published><updated>2009-04-01T12:56:12.467-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-01T12:56:12.467-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TempDB" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>Working with SQL Server TempDB objects</title><content type="html">&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;Try to avoid them in the first place by using derived tables or CTEs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Table variables are easy an convenient, because you don't have to clean them up.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;But only use them with small sets (smaller 1000 rows)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Do not use &lt;span style="font-family:courier new;"&gt;SELECT col1 INTO #temptable FROM dbo.table1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But do use a create table statement and a INSERT/SELECT:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;CREATE #temptable (col1 int,col2 int)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;INSERT INTO #temptable (col1,col2) SELECT Col1, Col2 FROM dbo.table1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;a bit more work, but less blocking in environments with a higher load.&lt;br /&gt;&lt;br /&gt;With larger sets you could consider using indexes and check with the query plan and &lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/set-statistics-io-on.html" target="blank"&gt;statistics io&lt;/a&gt; to see if there are any benefits in using them.&lt;br /&gt;Create these indexes after the table is filled with a set:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;INSERT INTO #temptable (col1,col2) SELECT Col1,Col2 FROM dbo.table1&lt;br /&gt;CREATE CLUSTERED INDEX CIX_#temptable ON #temptable (col1)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;CREATE INDEX IX_#temptable_1 ON #temptable (Col2)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Create ony the indexes you absolutely need.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Configure TempDB as suggested in my post &lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/how-to-configure-sql-server-tempdb.html" target="blank"&gt;configure TempDB&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Can your TempDB database disks handle the current load? See my post on &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/microsoft-included-fnvirtualfilestats.html" target="blank"&gt;fn_virtualfilestats&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Prefer locally (#temptable) over globaly (##temptable) scoped definitions&lt;br /&gt;&lt;br /&gt;Store results of linked servers in TempDB objects instead of accessing the remote datasource multiple times. See my post on &lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/sql-server-linked-collation-performance.html" target="blank"&gt;linked servers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Be a good citizen, at the end of your stored procedure or T-SQL code always cleanup after your self and drop all temporarily objects you have created.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #008080;"&gt;--drop temp tables if they exists&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;IF&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'tempdb..#temptable'&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;IS&lt;/span&gt; &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #808080;"&gt;NULL&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;DROP&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;TABLE&lt;/span&gt; #temptable &lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-3370236774087191479?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nSwQ08f7vSrHbgWtGFPJn8S3bZQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nSwQ08f7vSrHbgWtGFPJn8S3bZQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nSwQ08f7vSrHbgWtGFPJn8S3bZQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nSwQ08f7vSrHbgWtGFPJn8S3bZQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/3370236774087191479/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=3370236774087191479" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/3370236774087191479?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/3370236774087191479?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/nCCYByHBfF8/sqlserver-tempdb-objects-t-sql-howto.html" title="Working with SQL Server TempDB objects" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/04/sqlserver-tempdb-objects-t-sql-howto.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8NSHw-eCp7ImA9WxVbFEk.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-3212942699861712914</id><published>2009-03-30T13:02:00.000-07:00</published><updated>2009-03-30T13:11:39.250-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T13:11:39.250-07:00</app:edited><title>How to configure AWE memory</title><content type="html">&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;AWE according to BOL:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SQL Server 2005 Enterprise Edition supports Address Windowing Extensions (AWE) allowing use of physical memory over 4 gigabytes (GB) on 32-bit versions of Microsoft Windows operating systems. Up to 64 GB of physical memory is supported.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;My advice: Don't use AWE!&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;As mentioned above, it is only supported by the far more expensive SQL Server Enterprise edition (32bit of course) and it is only used by the core database engine and no other components.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SSIS -and others- won't benefit and are still limited to 32bit (=2GB max).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;AWE has also a performance overhead, and it's always a hassle with the boot.ini switches:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;If your system has &amp;lt;= 4 GB - use /3GB (none of the other options)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;If your system has &amp;gt; 4 GB and &amp;lt; 16 GB - use /3GB and /PAE and configure AWE in SSMS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;If your system has &amp;gt; 16 GB - use /PAE and configure AWE in SSMS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Go for SQL Server standard Edition (which is more then enough for most shops) and go for a 64bit environment with enough memory (start with 8GB) for SQL Server to use.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Far Cheaper and far more scalable.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;You can serve more databases on the same instance, leading to substantial cost savings.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;See my post on &lt;/span&gt;&lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/tools-for-performance.html" target="blank"&gt;&lt;span style="font-family:arial;"&gt;Tools for performance&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; and &lt;/span&gt;&lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/sqlserver-how-many-instances-memory-sql.html" target="blank"&gt;&lt;span style="font-family:arial;"&gt;How many instances on a SQL Server&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-3212942699861712914?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IKCn0H0MnJMSDOII2DGZXMs2_nU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IKCn0H0MnJMSDOII2DGZXMs2_nU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IKCn0H0MnJMSDOII2DGZXMs2_nU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IKCn0H0MnJMSDOII2DGZXMs2_nU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/3212942699861712914/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=3212942699861712914" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/3212942699861712914?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/3212942699861712914?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/8QOpEd52v74/sqlserver-howto-configure-use-awe.html" title="How to configure AWE memory" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sqlserver-howto-configure-use-awe.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEANRXk9fyp7ImA9WxVbFEk.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-7855981139867575759</id><published>2009-03-28T04:43:00.000-07:00</published><updated>2009-03-30T12:53:14.767-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T12:53:14.767-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>Always run SQLIO on new servers!</title><content type="html">&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;When your vendor brings a new type of server on the market always check if the hardware is as good as they claim it is. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;A while ago I did a test run and compared the IO results of a Dell server and an -almost- equal configured IBM server. Both were small configs with six internal drives. The tool I used was SQLIO. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;SQLIO is a small .exe file (250KB) that mimics the SQL Server database engine. You don't have to install SQL Server for the tool to work. Only the Windows OS is enough, s&lt;/span&gt;&lt;span style="font-family:arial;"&gt;o you can also check the thoughput of your SAN filesystem. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;You can download SQLIO and some documentation &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=9a8b005b-84e4-4f24-8d65-cb53442d9e19&amp;amp;displaylang=en" target="blank"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;The Result? Guess what? The Dell server scored 10(ten!) times better on IO performance then the more expensive IBM...&lt;br /&gt;&lt;br /&gt;Never take your vendors word for it, always test yourself. Because who gets the blaim in the end?&lt;br /&gt;&lt;br /&gt;The test file was 25MB, but results were roughly the same for bigger test files.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;Results for: &lt;span style="font-family:courier new;"&gt;sqlio -kR -s360 -frandom -o8 -b64 -LS -Fparam.txt&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;IBM server local drives:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;throughput metrics:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;IOs/sec: &lt;strong&gt;&lt;span style="font-size:130%;"&gt;1177.91&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;MBs/sec: &lt;strong&gt;&lt;span style="font-size:130%;"&gt;73.61&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;latency metrics:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Min_Latency(ms): 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Avg_Latency(ms): &lt;strong&gt;&lt;span style="font-size:130%;"&gt;13&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family:courier new;"&gt;Max_Latency(ms): 919&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;histogram:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;ms: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;%: 16 11 4 5 8 8 6 5 4 3 3 2 2 2 1 1 1 1 1 1 1 1 1 1 13&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Dell server local drives:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;throughput metrics:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;IOs/sec: &lt;strong&gt;&lt;span style="font-size:130%;"&gt;11,292.99&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;MBs/sec: &lt;strong&gt;&lt;span style="font-size:130%;"&gt;705.81&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;latency metrics:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Min_Latency(ms): 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Avg_Latency(ms): &lt;strong&gt;&lt;span style="font-size:130%;"&gt;1&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Max_Latency(ms): 394&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;histogram:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;ms: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24+&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;%: 0 96 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;See my post on &lt;/span&gt;&lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/sql-server-disk-configuration.html" target="blank"&gt;&lt;span style="font-family:arial;"&gt;disk configuration tips&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-7855981139867575759?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aSV1LqCLegeLpjdBzakWKxaZXfA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aSV1LqCLegeLpjdBzakWKxaZXfA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aSV1LqCLegeLpjdBzakWKxaZXfA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aSV1LqCLegeLpjdBzakWKxaZXfA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/7855981139867575759/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=7855981139867575759" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/7855981139867575759?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/7855981139867575759?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/QhADmk_s80k/sqlserver-sqlio-bottleneck-raid-sql-io.html" title="Always run SQLIO on new servers!" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sqlserver-sqlio-bottleneck-raid-sql-io.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYFRnc4fSp7ImA9WxVbEkg.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-4206507573293485915</id><published>2009-03-27T14:44:00.000-07:00</published><updated>2009-03-28T08:11:57.935-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-28T08:11:57.935-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><title>How many instances on a SQL Server?</title><content type="html">&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;In my opinion easy and short answer: install one (1) instance and use SQL Server Standard edition 64bit with enough memory (at least 8GB) for SQL Server to run comfortably.&lt;br /&gt;&lt;br /&gt;Why? with multiple instances on the same server you have to make assumptions about how much memory you configure to each instance, leading to a less optimal configuration.&lt;br /&gt;Also multiple -housekeeping- tasks scheduled on the seperate SQL Agents have to be configured and monitored separately.&lt;br /&gt;&lt;br /&gt;On a dedicated SQL Server I usually opt for giving all but 1-2GB of memory (dependent on the features installed like SSIS or Reporting Services) to Windows and all other memory to SQL Server and definitely go for a 64 bit (32=dinosaur) environment. So if you need additional memory to support more databases on the same instance it can easily be installed without the hassle of boot.ini switches and the performance overhead of AWE. (and AWE is only supported by the more expensive SQL Server Enterprise Edition)&lt;br /&gt;&lt;br /&gt;Do not forget to set an upper limit of how much memory SQL Server can max. use, to leave enough room for other apps and services.&lt;br /&gt;&lt;br /&gt;sample: on a 16GB server you can set a maximum of 14GB for SQL Server to use, leaving 2GB for the OS and other stuff.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;(click to enlarge)&lt;/span&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_VOeVH3l2m1Q/Sc1JQKiNLxI/AAAAAAAAACw/6VkyAtutiAk/s1600-h/memory.JPG" target="blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5317987277048983314" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 359px" alt="" src="http://1.bp.blogspot.com/_VOeVH3l2m1Q/Sc1JQKiNLxI/AAAAAAAAACw/6VkyAtutiAk/s400/memory.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With the single instance approach together with &lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/tools-for-performance.html" target="blank"&gt;Tools for performance&lt;/a&gt; and so reducing the workload you can have more databases on the same single instance server, leading to significant cost savings.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-4206507573293485915?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EmUAtJ7IPEBQydUp3PB0mSY3Nk8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EmUAtJ7IPEBQydUp3PB0mSY3Nk8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EmUAtJ7IPEBQydUp3PB0mSY3Nk8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EmUAtJ7IPEBQydUp3PB0mSY3Nk8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/4206507573293485915/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=4206507573293485915" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/4206507573293485915?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/4206507573293485915?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/MIw_vXWafpE/sqlserver-how-many-instances-memory-sql.html" title="How many instances on a SQL Server?" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_VOeVH3l2m1Q/Sc1JQKiNLxI/AAAAAAAAACw/6VkyAtutiAk/s72-c/memory.JPG" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sqlserver-how-many-instances-memory-sql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQCRX4_cSp7ImA9WxVUFE0.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-1919086984088852540</id><published>2009-03-17T13:10:00.000-07:00</published><updated>2009-03-18T13:16:04.049-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-18T13:16:04.049-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><title>Linked Server collation, performance and temp tables</title><content type="html">&lt;span style="font-family:arial;"&gt;When I create a linked server to a non SQL Server platform or to a SQL Server instance that's using another collation I always use the following linked server options:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;- Collation Compatible: False&lt;br /&gt;- Use Remote Collation: False&lt;br /&gt;&lt;br /&gt;In all other cases set collation compatibility to True, so indexes on the remote SQL Server tables can be usedleading to a significant performance boost.&lt;br /&gt;&lt;br /&gt;I usually set the RPC / RPC Out and Data Access properties to True. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;(click to enlarge)&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_VOeVH3l2m1Q/ScAFSpdhkeI/AAAAAAAAACo/z0a89AfgE44/s1600-h/linked-server.JPG" target="blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5314253378222658018" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 359px" alt="" src="http://2.bp.blogspot.com/_VOeVH3l2m1Q/ScAFSpdhkeI/AAAAAAAAACo/z0a89AfgE44/s400/linked-server.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When the linked server is a read-only data store I definitely prefer to use an OPENQUERY construction:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select * from openquery&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:courier new;"&gt;SQLSERVER2,'SELECT col1,col2 FROM CodeCatalog.dbo.recommendations'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;over the four part name equivalent:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SELECT col1,col2 FROM SQLSERVER2.CodeCatalog.dbo.recommendations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Reason?&lt;br /&gt;Far less distributed transaction errors (none so far!) generated by the OLE-DB driver.&lt;br /&gt;Using OPENQUERY requires a bit more code, but it really, really pays of...&lt;br /&gt;&lt;br /&gt;Performance.&lt;br /&gt;Because linked servers are not the fastest objects on the planet, try to access them as less as you can. I'll usually access them just once and dump te result in a temporary table and use that as input for further processing.&lt;br /&gt;&lt;br /&gt;sample:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;create table #t (id int)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;insert into #T (id)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select * from openquery&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SQLSERVER2,'SELECT id FROM CodeCatalog.dbo.recommendations'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;...process results from #T here....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Don't forget to script your linked server definitions and store them somewhere safe.&lt;br /&gt;&lt;br /&gt;also, check out my post on &lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/sql-server-msdtc-settings-sqlserver.html" target="blank"&gt;msdtc.&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-1919086984088852540?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cFj84JVZrLtX5Km-as5Prm0fKgw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cFj84JVZrLtX5Km-as5Prm0fKgw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cFj84JVZrLtX5Km-as5Prm0fKgw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cFj84JVZrLtX5Km-as5Prm0fKgw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/1919086984088852540/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=1919086984088852540" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/1919086984088852540?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/1919086984088852540?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/d0Ihhwfu1yA/sql-server-linked-collation-performance.html" title="Linked Server collation, performance and temp tables" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_VOeVH3l2m1Q/ScAFSpdhkeI/AAAAAAAAACo/z0a89AfgE44/s72-c/linked-server.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sql-server-linked-collation-performance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMMRnczeCp7ImA9WxVUFE0.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-8709645153625055797</id><published>2009-03-16T13:09:00.000-07:00</published><updated>2009-03-18T13:18:07.980-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-18T13:18:07.980-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows OS" /><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><title>SQL Server MSDTC settings</title><content type="html">&lt;span style="font-family:arial;"&gt;During installation of a new Windows OS I set the following properties for the MSDTC security settings and transaction timeout.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Required when you want to configure and use linked servers&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Security setings:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_VOeVH3l2m1Q/Sb6yqnZWkBI/AAAAAAAAACQ/iF24QLpUWNI/s1600-h/msdtc-SecurityConfig.JPG" target="blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5313881055543332882" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 389px" alt="" src="http://1.bp.blogspot.com/_VOeVH3l2m1Q/Sb6yqnZWkBI/AAAAAAAAACQ/iF24QLpUWNI/s400/msdtc-SecurityConfig.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Transaction Timeout:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_VOeVH3l2m1Q/Sb6zH9oD5nI/AAAAAAAAACg/fdq-9GGO5Ss/s1600-h/msdtc-Timeout.JPG" target="blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5313881559726810738" style="WIDTH: 347px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://3.bp.blogspot.com/_VOeVH3l2m1Q/Sb6zH9oD5nI/AAAAAAAAACg/fdq-9GGO5Ss/s400/msdtc-Timeout.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To configure these properties in Windows Component Services, complete the following actions:&lt;br /&gt;&lt;br /&gt;1.From your Microsoft Windows desktop,click Start &gt; Settings &gt; Administrative Tools &gt; Component Services, or start dcomcnfg.exe from a command prompt.&lt;br /&gt;&lt;br /&gt;2. Expand the tree view to locate the computer where you want to change the configuration for;for example, My Computer.&lt;br /&gt;&lt;br /&gt;3. Display the context menu for the computer name, and then click properties.&lt;br /&gt;&lt;br /&gt;4. Click the 'Options' tab, and set the 'Transaction Timeout' to a length of time that suits your environment.The minimum setting I use is 180 seconds.&lt;br /&gt;&lt;br /&gt;5. Click the 'MSDTC' tab, and then 'Security Configuration'. make the changes as shown in the .jpg above and click OK to save.&lt;br /&gt;&lt;br /&gt;The MSDTC service must be restarted for changes to take effect.The OS will ask for confirmation.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-8709645153625055797?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xrZiF9_MRSDJrC2fPXZq7rbOyBw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xrZiF9_MRSDJrC2fPXZq7rbOyBw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xrZiF9_MRSDJrC2fPXZq7rbOyBw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xrZiF9_MRSDJrC2fPXZq7rbOyBw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/8709645153625055797/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=8709645153625055797" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/8709645153625055797?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/8709645153625055797?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/Wrkzm3m_52M/sql-server-msdtc-settings-sqlserver.html" title="SQL Server MSDTC settings" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_VOeVH3l2m1Q/Sb6yqnZWkBI/AAAAAAAAACQ/iF24QLpUWNI/s72-c/msdtc-SecurityConfig.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sql-server-msdtc-settings-sqlserver.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIFQ3c4eCp7ImA9WxVUFE0.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-8212682143369756479</id><published>2009-03-13T13:23:00.000-07:00</published><updated>2009-03-18T13:18:32.930-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-18T13:18:32.930-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows OS" /><category scheme="http://www.blogger.com/atom/ns#" term="storage" /><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><title>Enable Instant File Initialization</title><content type="html">&lt;span style="font-family:arial;"&gt;In SQL Server 2005 (and higher versions), data files can be initialized instantaneously. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Instant file initialization reclaims used disk space without filling that space with zeros. Instead, disk content is overwritten as new data is written to the files.&lt;br /&gt;&lt;br /&gt;This can lead to a significant performance boost of ‘create database’, restore and autogrow operations.&lt;br /&gt;For example, when a thread executing a query and is a victim of an autogrow, less disk activity needs to be done and it can finish much quicker.&lt;br /&gt;&lt;br /&gt;Unfortunately this option is not available for Log files.&lt;br /&gt;&lt;br /&gt;How to assign ‘Perform volume maintenance tasks’ to your SQL Server instance:&lt;br /&gt;&lt;br /&gt;Start the gpedit.msc utility, browse to ‘user rights assignment’ and add your SQL Server service account to the ‘Perform volume maintenance tasks’ policy.&lt;br /&gt;Restart the SQL Server service (not the windows server), for changes to take effect.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;(click to enlarge):&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_VOeVH3l2m1Q/SbrCsRTYJtI/AAAAAAAAAB4/G-ihgANY9y8/s1600-h/volume-maintenance.JPG" target="blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5312772776251631314" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 367px" alt="" src="http://2.bp.blogspot.com/_VOeVH3l2m1Q/SbrCsRTYJtI/AAAAAAAAAB4/G-ihgANY9y8/s400/volume-maintenance.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Check the assigned privileges:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;Open SQL Server Management Studio under the same account the SQL Server service is running. Open a query window, set result to out put to text and paste/run the following code:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;EXEC sp_configure 'xp_cmdshell', 1;&lt;br /&gt;GO&lt;br /&gt;RECONFIGURE WITH OVERRIDE;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;EXEC ('xp_cmdshell ''whoami /priv''');&lt;br /&gt;&lt;br /&gt;EXEC sp_configure 'xp_cmdshell', 0;&lt;br /&gt;GO&lt;br /&gt;RECONFIGURE WITH OVERRIDE;&lt;br /&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;Result in SSMS should contain &lt;span style="font-family:courier new;"&gt;SeManageVolumePrivilege&lt;/span&gt; with state &lt;span style="font-family:courier new;"&gt;Enabled&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;(click to enlarge): &lt;/span&gt;&lt;/p&gt;&lt;a href="http://3.bp.blogspot.com/_VOeVH3l2m1Q/SbrDaB7yDMI/AAAAAAAAACA/cemTb9iq1hA/s1600-h/who-ami.JPG" target="blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5312773562400115906" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 166px" alt="" src="http://3.bp.blogspot.com/_VOeVH3l2m1Q/SbrDaB7yDMI/AAAAAAAAACA/cemTb9iq1hA/s400/who-ami.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-8212682143369756479?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YsKTepbwmjXcXWfaobV8Pv8jyKQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YsKTepbwmjXcXWfaobV8Pv8jyKQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YsKTepbwmjXcXWfaobV8Pv8jyKQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YsKTepbwmjXcXWfaobV8Pv8jyKQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/8212682143369756479/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=8212682143369756479" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/8212682143369756479?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/8212682143369756479?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/QayWOFzAhvM/sql-server-enable-instant-file.html" title="Enable Instant File Initialization" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_VOeVH3l2m1Q/SbrCsRTYJtI/AAAAAAAAAB4/G-ihgANY9y8/s72-c/volume-maintenance.JPG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sql-server-enable-instant-file.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIARno-eyp7ImA9WxVUFE0.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-3663072578522356063</id><published>2009-03-12T13:11:00.000-07:00</published><updated>2009-03-18T13:19:07.453-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-18T13:19:07.453-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows OS" /><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><title>SQL Server Windows OS Settings</title><content type="html">&lt;span style="font-family:arial;"&gt;Favor 64bit OS'es&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;32 bit = dinosaur&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Impact of other applications:&lt;br /&gt;Limit the numbers of services / applications running to an absolute minimum.&lt;br /&gt;Virus scanner: do not scan on-line but schedule it as a task during off-peak hours.&lt;br /&gt;During the scanning process exclude the SQL Server device extensions (.MDF, .NDF, .LDF, .BAK, .DIF and .TRN), so that they are not accessed during the scanning process.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Pagefile&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Create a pagefile 1.5 - 2 times the amount of internal memory.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;Don't put it on a bussy database volume.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Memory:&lt;br /&gt;Use the /3GB switch in boot.ini on dedicated 32bit SQL Server OS’es with 4GB of memory and no other programs like Reporting Services installed. This switch instructs the OS to assign max 3GB to processes instead of the 32bit OS limit of 2GB, but leaving max. 1GB to the OS and other services.&lt;br /&gt;Favor 64 bit over AWE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Network properties:&lt;br /&gt;Maximize Data Throughput for Network Applications&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;(click to enlarge)&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_VOeVH3l2m1Q/SbluErdGhNI/AAAAAAAAABo/izOCeCbOv64/s1600-h/SQLnetworksettings.jpg" target="blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5312398262123529426" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 250px; CURSOR: hand; HEIGHT: 283px" alt="" src="http://4.bp.blogspot.com/_VOeVH3l2m1Q/SbluErdGhNI/AAAAAAAAABo/izOCeCbOv64/s400/SQLnetworksettings.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;System properties: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Application Response" setting: "Background services"&lt;br /&gt;Change the memory allocation to favor "Programs."&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;(click to enlarge)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;a href="http://2.bp.blogspot.com/_VOeVH3l2m1Q/SblvGOAqpGI/AAAAAAAAABw/4EpsZ_fvMGw/s1600-h/SQL-os-settings.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5312399388090999906" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 221px; CURSOR: hand; HEIGHT: 349px" alt="" src="http://2.bp.blogspot.com/_VOeVH3l2m1Q/SblvGOAqpGI/AAAAAAAAABw/4EpsZ_fvMGw/s400/SQL-os-settings.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-3663072578522356063?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gh1hoTaQWDfOuCz1tCRWyfNTTvI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gh1hoTaQWDfOuCz1tCRWyfNTTvI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gh1hoTaQWDfOuCz1tCRWyfNTTvI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gh1hoTaQWDfOuCz1tCRWyfNTTvI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/3663072578522356063/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=3663072578522356063" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/3663072578522356063?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/3663072578522356063?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/bz_5YncNT64/sql-server-os-settings.html" title="SQL Server Windows OS Settings" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_VOeVH3l2m1Q/SbluErdGhNI/AAAAAAAAABo/izOCeCbOv64/s72-c/SQLnetworksettings.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sql-server-os-settings.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEFRn49fip7ImA9WxVVGE0.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-8325075550425287550</id><published>2009-03-11T13:04:00.000-07:00</published><updated>2009-03-11T13:33:37.066-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-11T13:33:37.066-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><title>Five methods converting rows to columns</title><content type="html">&lt;span style="font-family:arial;"&gt;Post with five methods for converting rows to columns.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;From the classic ‘CASE’ construction to the newer PIVOT and ROW_NUMBER() OVER (ORDER BY) functions.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Be careful!&lt;br /&gt;Some methods presented here can have a severe negative impact on performance. Especially the in-line function with a cursor should be used with the utmost precaution.Check the query plan and the statistics i/o &lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/set-statistics-io-on.html" target="blank"&gt;(see this post)&lt;/a&gt; of your queries before putting the code into your production environment!&lt;br /&gt;&lt;br /&gt;1. use a CASE statement&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;DATEPART&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;YEAR&lt;/span&gt;,orderdate&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #FF00FF;"&gt;SUM&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CASE&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;WHEN&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;DATEPART&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;q,orderdate&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;1&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;THEN&lt;/span&gt; orderamount &lt;span style="color: #0000FF;"&gt;ELSE&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;END&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Qtr1,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #FF00FF;"&gt;SUM&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CASE&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;WHEN&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;DATEPART&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;q,orderdate&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;2&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;THEN&lt;/span&gt; orderamount &lt;span style="color: #0000FF;"&gt;ELSE&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;END&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Qtr2,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #FF00FF;"&gt;SUM&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CASE&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;WHEN&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;DATEPART&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;q,orderdate&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;3&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;THEN&lt;/span&gt; orderamount &lt;span style="color: #0000FF;"&gt;ELSE&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;END&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Qtr3,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #FF00FF;"&gt;SUM&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CASE&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;WHEN&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;DATEPART&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;q,orderdate&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;4&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;THEN&lt;/span&gt; orderamount &lt;span style="color: #0000FF;"&gt;ELSE&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;END&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Qtr4,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #FF00FF;"&gt;SUM&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;orderamount&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Total&lt;br /&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; Orders&lt;br /&gt;&lt;span style="color: #008080;"&gt;-- additional where clause goes here...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;GROUP&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;DATEPART&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;YEAR&lt;/span&gt;,orderdate&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;2. use the COALESCE function&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #0000FF;"&gt;DECLARE&lt;/span&gt; @AllValues &lt;span style="color: #0000FF;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;4000&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; @AllValues &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;COALESCE&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;@AllValues &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #FF0000;"&gt;','&lt;/span&gt;, &lt;span style="color: #FF0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; HandlingCode&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; OrdersDetails&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; OrderNumber &lt;span style="color: #808080;"&gt;=&lt;/span&gt; @OrderNumber&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;3. use ROW_NUMBER() OVER (ORDER BY)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; OrderNumber, OrderDate,&lt;br /&gt;&lt;span style="color: #008080;"&gt;--get the special handling codes and show them as columns, max of 3 (agreed by users)&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; HandlingCode&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; ROW_NUMBER&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;OVER&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; HandlingCode&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; ROWNUMBER,HandlingCode&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; OrdersDetails&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; OrdersDetails.&lt;span style="color: #202020;"&gt;OrderNumber&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; Orders.&lt;span style="color: #202020;"&gt;OrderNumber&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; HandlingCode&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; ROWNUMBER &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;1&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; HandlingCode1,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; HandlingCode&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; ROW_NUMBER&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;OVER&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; HandlingCode&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; ROWNUMBER,HandlingCode&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; OrdersDetails&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; OrdersDetails.&lt;span style="color: #202020;"&gt;OrderNumber&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; Orders.&lt;span style="color: #202020;"&gt;OrderNumber&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; HandlingCode&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; ROWNUMBER &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;2&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; HandlingCode2,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; HandlingCode&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; ROW_NUMBER&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;OVER&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; HandlingCode&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; ROWNUMBER,HandlingCode&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; OrdersDetails&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; OrdersDetails.&lt;span style="color: #202020;"&gt;OrderNumber&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; Orders.&lt;span style="color: #202020;"&gt;OrderNumber&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; HandlingCode&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; ROWNUMBER &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;3&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; HandlingCode3&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; Orders&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; OrderNumber &lt;span style="color: #808080;"&gt;=&lt;/span&gt; @OrderNumber&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;4. Use an inline function&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; OrderNumber, OrderDate, fn_GetHandlingCodes &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;OrderNumber&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; Orders&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; OrderNumber &lt;span style="color: #808080;"&gt;=&lt;/span&gt; @OrderNumber&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;FUNCTION&lt;/span&gt; dbo.&lt;span style="color: #202020;"&gt;fn_GetHandlingCodes&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;@OrderNumber &lt;span style="color: #0000FF;"&gt;INT&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;RETURNS&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;1200&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;DECLARE&lt;/span&gt; @HandlingCode &lt;span style="color: #0000FF;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;20&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;DECLARE&lt;/span&gt; @ReturnValue &amp;nbsp;&lt;span style="color: #0000FF;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;4000&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;-- use that fastest cursor methods: local fast_forward&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;DECLARE&lt;/span&gt; code_cursor &lt;span style="color: #0000FF;"&gt;CURSOR&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;LOCAL&lt;/span&gt; fast_forward &lt;span style="color: #0000FF;"&gt;FOR&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; HandlingCode&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; OrdersDetails&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; OrderNumber &lt;span style="color: #808080;"&gt;=&lt;/span&gt; @OrderNumber &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; HandlingCode &lt;span style="color: #0000FF;"&gt;IS&lt;/span&gt; &lt;span style="color: #808080;"&gt;NULL&lt;/span&gt; &lt;span style="color: #008080;"&gt;-- filled&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;SET&lt;/span&gt; @ReturnValue &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000;"&gt;''&lt;/span&gt; &amp;nbsp;&lt;span style="color: #008080;"&gt;-- set to non null&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;OPEN&lt;/span&gt; code_cursor&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;FETCH&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;NEXT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; code_cursor &amp;nbsp;&lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt; @HandlingCode &lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;WHILE&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;@@FETCH_STATUS&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;SET&lt;/span&gt; @ReturnValue &lt;span style="color: #808080;"&gt;=&lt;/span&gt; @ReturnValue &lt;span style="color: #808080;"&gt;+&lt;/span&gt; @HandlingCode &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #FF0000;"&gt;', '&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;IF&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;LEN&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;@ReturnValue&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #000;"&gt;1000&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BREAK&lt;/span&gt; &lt;span style="color: #008080;"&gt;-- avoid overflow&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;FETCH&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;NEXT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; code_cursor &lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt; @HandlingCode &lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;CLOSE&lt;/span&gt; code_cursor&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;DEALLOCATE&lt;/span&gt; code_cursor&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;-- remove last delimiter&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;IF&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;LEN&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;@ReturnValue&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #000;"&gt;1&lt;/span&gt; SET @ReturnValue &lt;span style="color: #808080;"&gt;=&lt;/span&gt; SUBSTRING&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;@ReturnValue,&lt;span style="color: #000;"&gt;1&lt;/span&gt;,&lt;span style="color: #FF00FF;"&gt;LEN&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;@ReturnValue&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="color: #000;"&gt;2&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;RETURN&lt;/span&gt; @ReturnValue&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;END&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;5. Use a pivot&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #0000FF;"&gt;USE&lt;/span&gt; AdventureWorks&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; VendorID, &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000;"&gt;164&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Emp1, &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000;"&gt;198&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Emp2, &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000;"&gt;223&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Emp3, &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000;"&gt;231&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Emp4, &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000;"&gt;233&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Emp5&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; PurchaseOrderID, EmployeeID, VendorID&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; Purchasing.&lt;span style="color: #202020;"&gt;PurchaseOrderHeader&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; p&lt;br /&gt;PIVOT&lt;br /&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF00FF;"&gt;COUNT&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;PurchaseOrderID&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FOR&lt;/span&gt; EmployeeID &lt;span style="color: #808080;"&gt;IN&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000;"&gt;164&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000;"&gt;198&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000;"&gt;223&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000;"&gt;231&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000;"&gt;233&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; pvt&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; VendorID&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-8325075550425287550?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O-yhbAvvr9107TMQqgVovZcUxkI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O-yhbAvvr9107TMQqgVovZcUxkI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O-yhbAvvr9107TMQqgVovZcUxkI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O-yhbAvvr9107TMQqgVovZcUxkI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/8325075550425287550/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=8325075550425287550" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/8325075550425287550?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/8325075550425287550?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/55QVXKO-ifk/sql-server-convert-rows-to-columns.html" title="Five methods converting rows to columns" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sql-server-convert-rows-to-columns.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYCRn47eyp7ImA9WxVVGUo.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-6096430550758282894</id><published>2009-03-10T03:53:00.000-07:00</published><updated>2009-03-13T13:46:07.003-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-13T13:46:07.003-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="defrag" /><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><category scheme="http://www.blogger.com/atom/ns#" term="CHECKDB" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>SQL Server database settings</title><content type="html">&lt;span style="font-family:arial;"&gt;When creating a new SQL Server database I always use this checklist:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Name: Use as less non-alpha numeric characters in the database name as possible (do &lt;em&gt;not&lt;/em&gt; use the ‘-‘, it will mess up your scripts). Use pascal casing for readability (use OrdersDb, do not use Orders-db or Orders_db)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Set Page verify to Checksum&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Pre allocate data and log size to a reasonable size, do not rely on autogrowth.&lt;br /&gt;Set a reasonable Autogrow size in MB (not a percentage) for data and log files&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Enabling auto create/update statistics, is fine for most situations.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Set the right recovery model.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;If your using ‘full’ or ‘bulk recovery’, schedule regular log backups (see &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/backup.html" target="blank"&gt;this post &lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Try to create at least two –equally sized!- device files for the data devices.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Not only reduces this locking issues but also when a database is regular under a heavy load,files can easily be moved to additional physical volumes (see &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/create-multiple-files-per-database-and.html" target="blank"&gt;this post &lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Create one file for the Log&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Use fn_virtualfilestats() to measure I/O load per device file (see &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/microsoft-included-fnvirtualfilestats.html" target="blank"&gt;this post &lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Set the .MDF, .NDF and .LDF files in their own folders with the same name as the database. Don’t store all your db’s in one folder &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Reorganize indexes/statistics on a regular basis (see &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/over-time-when-data-is-added-changed-or.html" target="blank"&gt;this post &lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Run DBCC CHECKDB on a regular basis (see &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/sql-server-day-to-day-maintenance_19.html" target="blank"&gt;this post &lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Do not schedule any shrink operations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Configure instant file initialization&lt;/span&gt; &lt;span style="font-family:arial;"&gt;(see &lt;/span&gt;&lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/sql-server-enable-instant-file.html" target="blank"&gt;&lt;span style="font-family:arial;"&gt;this post &lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Check out my post on &lt;/span&gt;&lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/let-microsoft-sql-server-automatically.html" target="blank"&gt;&lt;span style="font-family:arial;"&gt;auto index management&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt; and &lt;/span&gt;&lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/tools-for-performance.html" target="blank"&gt;&lt;span style="font-family:arial;"&gt;tools for performance&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;, to setup more databases on the same instance and save costs&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-6096430550758282894?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yrRLXsFWB3kVoqFWNfmM10Ly940/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yrRLXsFWB3kVoqFWNfmM10Ly940/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yrRLXsFWB3kVoqFWNfmM10Ly940/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yrRLXsFWB3kVoqFWNfmM10Ly940/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/6096430550758282894/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=6096430550758282894" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/6096430550758282894?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/6096430550758282894?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/brV9A_hIYNU/sql-server-database-settings.html" title="SQL Server database settings" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sql-server-database-settings.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQCQ3Y5eip7ImA9WxVUFEQ.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-6704591587655608359</id><published>2009-03-07T07:54:00.000-08:00</published><updated>2009-03-19T13:59:22.822-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-19T13:59:22.822-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DBCC" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL 2000" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="STATISTICS" /><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><category scheme="http://www.blogger.com/atom/ns#" term="CHECKDB" /><category scheme="http://www.blogger.com/atom/ns#" term="Upgrade" /><title>SQL Server 2000 post upgrade steps</title><content type="html">&lt;span style="font-family:arial;"&gt;Small post on additional steps to perform when upgrading from an existing SQL Server 2000 database to SQL Server 2005 / 2008 (after you backup’ed, run upgrade advisor and tested everything twice right!)&lt;br /&gt;&lt;br /&gt;After a successful restore or attach database operation, execute the following commands in the new environment:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;USE your_db_name&lt;br /&gt;GO&lt;br /&gt;DBCC UPDATEUSAGE ('your_db_name')&lt;br /&gt;DBCC CHECKDB ('your_db_name') WITH DATA_PURITY&lt;br /&gt;EXEC sp_updatestats&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;And:&lt;br /&gt;- Set database compatibility level to ‘SQL Server 2005’ or ‘SQL Server 2008’&lt;br /&gt;- Set Page verify option to Checksum&lt;br /&gt;- Set 'Auto Create' and 'Auto Update' statistics to TRUE&lt;br /&gt;- Reorganize all indexes&lt;br /&gt;&lt;br /&gt;Running ‘DBCC UPDATEUSAGE’ and ‘DBCC WITH DATA_PURITY’ once is enough.&lt;br /&gt;The DBCC CHECKDB of the newer (2005/2008) SQL Server versions has it all combined in one statement.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;Upgrade to the the newer varchar(max), nvarchar(max), and varbinary(max) data types instead of text, ntext, and image data types.&lt;br /&gt;You can check by executing this T-SQL on your upgraded database on SQL Server 2005 / 2008, to see which tables need some work:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;USE = 'your_db-name_here'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SELECT userobjects.name tablename, columns.name columnname, types.name columntype FROM sys.all_columns columns INNER JOIN sys.all_objects userobjects ON columns.object_id = userobjects.object_id INNER JOIN sys.types types ON columns.system_type_id = types.system_type_id&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;WHERE userobjects.[type] = 'U'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;and types.name IN ('image','text','ntext')&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-6704591587655608359?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CEzabpxy5pOUOnjIS5ePq0EaaOY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CEzabpxy5pOUOnjIS5ePq0EaaOY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CEzabpxy5pOUOnjIS5ePq0EaaOY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CEzabpxy5pOUOnjIS5ePq0EaaOY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/6704591587655608359/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=6704591587655608359" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/6704591587655608359?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/6704591587655608359?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/CdBr-uD1Wns/sql-server-2000-post-upgrade-steps.html" title="SQL Server 2000 post upgrade steps" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sql-server-2000-post-upgrade-steps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMGRX07fip7ImA9WxVVFk0.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-2651681170521489319</id><published>2009-03-07T07:16:00.000-08:00</published><updated>2009-03-09T05:57:04.306-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-09T05:57:04.306-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><title>SQL Server Bookstore</title><content type="html">&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:150;"&gt;&lt;span style="font-family:Arial;"&gt;more cool stuff at&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;a href="http://www.amazon.com/?%5Fencoding=UTF8&amp;amp;tag=sqsead0c-20" target="blank"&gt;&lt;span style="font-size:180%;"&gt;Amazon&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Want UK prices? Click &lt;/span&gt;&lt;a href="http://astore.amazon.co.uk/sqsead-21" target="blank"&gt;&lt;span style="font-family:arial;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;iframe src="http://astore.amazon.com/sqsead0c-20" frameborder="0" width="90%" scrolling="no" height="1100"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-2651681170521489319?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AT3ZRQWXvRdkRsDpTg10ET3aG2Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AT3ZRQWXvRdkRsDpTg10ET3aG2Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AT3ZRQWXvRdkRsDpTg10ET3aG2Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AT3ZRQWXvRdkRsDpTg10ET3aG2Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/2651681170521489319/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=2651681170521489319" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/2651681170521489319?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/2651681170521489319?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/wGLRMbNKQzU/sql-server-bookstore.html" title="SQL Server Bookstore" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sql-server-bookstore.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8MR3c_eyp7ImA9WxVUFE0.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-5838002573360951959</id><published>2009-03-06T12:46:00.000-08:00</published><updated>2009-03-18T13:24:46.943-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-18T13:24:46.943-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLIO" /><category scheme="http://www.blogger.com/atom/ns#" term="disk arrays" /><category scheme="http://www.blogger.com/atom/ns#" term="raid" /><category scheme="http://www.blogger.com/atom/ns#" term="storage" /><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>SQL Server disk configuration tips</title><content type="html">&lt;span style="font-family:arial;"&gt;Most important metrics for SQL Server: ‘throughput’: how many MB/s can the disks handle and what is the load placed on the disks.&lt;br /&gt;&lt;br /&gt;If you’re buying a standard package your vendor should know this.&lt;br /&gt;Surprisingly however in the hardware proposal (top end server(s) / high rpm disks right?) this figure isn’t mentioned anywhere in most situations.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;What you can do, is ask your vendor if they could run a fn_virualfilestats() function (see my &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/microsoft-included-fnvirtualfilestats.html" target="blank"&gt;fn_virtualfilestats&lt;/a&gt; post) on a similar production configuration of another customer (better: talk to them yourself!) . This gives you insight on the I/O pattern (more read of more write activity) and the load on TempDB, to determine if it’s a good candidate –which it usually is- to store on it’s own disk spindles.&lt;br /&gt;&lt;br /&gt;Run the Microsoft SQLIO tool to determine a baseline on MB/s and latency per disk partition.&lt;br /&gt;Store it for later reference, the Windows performance tool can also measure the throughput and it gives you the possibility to compare the numbers and check if there might be a disk throughput performance bottleneck in your production system.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;Disk configuration tips: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;p&gt;Use as many disk spindles as you can, and try spreading data / log and tempdb on different raid arrays.&lt;/p&gt;&lt;p&gt;Stripe your RAID-config at 256k instead of 64k / 128k.This will increase performance of SQL Server read-aheads. &lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:arial;"&gt;If you use Windows 2000 / 2003 align the disk partitions!!!:&lt;br /&gt;(see Miscrosoft knowledge base article KB300415 on how to use Diskpart).&lt;br /&gt;At the Diskpart command prompt,&lt;br /&gt;type: Create Partition Primary Align=X,&lt;br /&gt;where X is either 32 or 64, depending on the recommendation from your storage vendor.&lt;br /&gt;If your storage vendor does not have any specific recommendations, it is recommended that &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;you use 64. &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;This step is not needed in Windows 2008 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Full (not quick) format with a 64kb stripe size for disks holding data/log and backup files.&lt;br /&gt;&lt;br /&gt;Full (not quick) format with a 4kb stripe size for OS and program/swap devices&lt;br /&gt;&lt;br /&gt;Data raid5 or raid10 when there’s more write then read activity (check with fn_virualfilestats), &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Log (raid1 or raid10 under heavy load), separate backup disk (raid5) &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Put TempDB on its own physical disks (raid1, raid10 under heavy load).&lt;br /&gt;In a non-clustered environment, I normally use the local server storage for TempDB.&lt;br /&gt;&lt;br /&gt;Use NTFS volumes&lt;br /&gt;&lt;br /&gt;Do not use more then 80% of the volume&lt;br /&gt;&lt;br /&gt;Defragment the disks on a regular basis&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-5838002573360951959?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9dS1CmsXE9ppLnIAiAB73-L-s5w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9dS1CmsXE9ppLnIAiAB73-L-s5w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9dS1CmsXE9ppLnIAiAB73-L-s5w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9dS1CmsXE9ppLnIAiAB73-L-s5w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/5838002573360951959/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=5838002573360951959" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/5838002573360951959?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/5838002573360951959?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/ojjBM8ddqkA/sql-server-disk-configuration.html" title="SQL Server disk configuration tips" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/sql-server-disk-configuration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04HRns6eip7ImA9WxVbFkw.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-2973429777666152258</id><published>2009-03-06T12:27:00.000-08:00</published><updated>2009-04-01T12:58:57.512-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-01T12:58:57.512-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TempDB" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="storage" /><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>How to configure SQL Server TempDB</title><content type="html">&lt;span style="font-family:arial;"&gt;As a general guideline, create one data file for each CPU on the server.&lt;br /&gt;Note that a dual-core CPU is considered to be two CPUs. logical procs (hyperthreading) do not&lt;br /&gt;&lt;br /&gt;Only create one Log file&lt;br /&gt;&lt;br /&gt;Do not use autoshrink on TempDB&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Arial;"&gt;If your'e using SQL Server 2008 set Page verify to Checksum&lt;/span&gt;&lt;span style="font-family:arial;"&gt;Investigate the possibility if you can switch off the properties ‘Auto create’ and ‘Auto Update’ statistics,it can speed up the creation of objects in TempDB. Be careful however: measure the impact these changes can have on production! Change and measure only one parameter at the time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;After installation move the TempDB database to its own disks that differ from those that are used by user databases&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ALTER DATABASE TempDB&lt;br /&gt;MODIFY FILE (NAME=tempdev, FILENAME= '&lt;new&gt;\tempdb.mdf');&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;ALTER DATABASE TempDB&lt;br /&gt;MODIFY FILE (NAME=templog, FILENAME= '&lt;new&gt;\TempLog.ldf');&lt;br /&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Restart SQL Server service (not the Windows server), to make changes permanent&lt;br /&gt;&lt;br /&gt;Pre-allocate data and log device sizes (create files with same equal size), do not rely on small auto growth steps&lt;br /&gt;&lt;br /&gt;If you use auto growth set it to a reasonable size in MB, not a percentage&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;TempDB file size default FILEGROWTH increment&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;0 to 100 MB growth:10 MB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;100 to 200 MB growth:20 MB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;200 to 1000 MB growth:50 to 75 MB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:courier new;"&gt;1 GB or More growth:150 to 250 MB&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Measure TempDB usage over time with &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/microsoft-included-fnvirtualfilestats.html" target="blank"&gt;fn_virtualfilestats&lt;/a&gt;&lt;br /&gt;New releases of your –vendor- software could have a different impact on TempDB load.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-2973429777666152258?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PQTLn-ZvwkXTu-tyTUn8DdeyzlE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PQTLn-ZvwkXTu-tyTUn8DdeyzlE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PQTLn-ZvwkXTu-tyTUn8DdeyzlE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PQTLn-ZvwkXTu-tyTUn8DdeyzlE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/2973429777666152258/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=2973429777666152258" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/2973429777666152258?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/2973429777666152258?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/vxXeZQ6oOyM/how-to-configure-sql-server-tempdb.html" title="How to configure SQL Server TempDB" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/how-to-configure-sql-server-tempdb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YESHg6fyp7ImA9WxVVE0o.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-685608551229159954</id><published>2009-03-06T12:15:00.000-08:00</published><updated>2009-03-06T12:25:09.617-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-06T12:25:09.617-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><category scheme="http://www.blogger.com/atom/ns#" term="mssqlsystemresource" /><title>Backup the mssqlsystemresource database</title><content type="html">&lt;span style="font-family:arial;"&gt;Since the introduction of SQL Server 2005, Microsoft implemented the mssqlsystemresource database.This is a read-only database that contains all the system objects that are included with SQL Server.It is stored as mssqlsystemresource.mdf / .ldf file combination and installed in the same location as the master databaseand it should stay there!&lt;br /&gt;&lt;br /&gt;It is a SQL Server requirement that both the master and resource databases are in the same location.Due to the low IO overhead it's im my opinion not worth the trouble moving both databases.They should however be stored on a redundant disk. Too risky to lose them!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Its content is specific to a version / patch level and because it cannot be included inregular a SQL Server backup you should always make a manual copy of both .mdf and .ldf files:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;- After a SQL Server instance is installed&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;- Before and after a service pack of hot fix is applied&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Copying can be done while the SQL Server instance is on-line&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-685608551229159954?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Dy39R0hnYQTFMya-py-U3eYkvgY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dy39R0hnYQTFMya-py-U3eYkvgY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Dy39R0hnYQTFMya-py-U3eYkvgY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dy39R0hnYQTFMya-py-U3eYkvgY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/685608551229159954/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=685608551229159954" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/685608551229159954?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/685608551229159954?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/SNUUMWPQIiI/backup-mssqlsystemresource-database.html" title="Backup the mssqlsystemresource database" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/backup-mssqlsystemresource-database.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEHQnY7cCp7ImA9WxVVF0w.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-7189383171192223051</id><published>2009-03-05T12:05:00.000-08:00</published><updated>2009-03-10T13:40:33.808-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-10T13:40:33.808-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="datetime" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>Do you have a datetime T-SQL 'BETWEEN AND' bug??</title><content type="html">&lt;span style="font-family:arial;"&gt;Create a table with a datetime column&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;create table #t (col1 datetime)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;add couple of rows with date and time values&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;insert into #t values ('1/mar/2009 08:00')&lt;br /&gt;insert into #t values ('1/mar/2009 09:00')&lt;br /&gt;insert into #t values ('1/mar/2009 10:00')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;get the rows&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select * from #t&lt;br /&gt;where col1 between '1/mar/2009' and '1/mar/2009'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and guess what?&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(0 row(s) affected)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Why? You’re trying to select a date without a time and that's treated as 00:00 midnight&lt;br /&gt;and these rows do not exist in the table&lt;br /&gt;&lt;br /&gt;Three ways to solve:&lt;br /&gt;&lt;br /&gt;1.&lt;br /&gt;append a time value to the sql string:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select * from #t&lt;br /&gt;where col1 between '1/mar/2009 00:00:00' and '1/mar/2009 23:59:59'&lt;br /&gt;(3 row(s) affected)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;no go&lt;/strong&gt;, too much work -specially with variables- and could lead to (more) bugs&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;select * from #t&lt;br /&gt;where CONVERT(datetime,CONVERT(varchar(20), col1, 112),112) between '1/mar/2009' and '1/mar/2009'&lt;br /&gt;(3 row(s) affected)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;uses double convert() T-SQL function to get rid of the time part and switch back to datetime format&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;no go&lt;/strong&gt;: if you have a index defined an the column it will not be used by the SQL Server query optimizer because of the convert function. Bad performance!&lt;br /&gt;&lt;br /&gt;3.&lt;br /&gt;my absolute thumbs up favorite:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;select * from #t&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;where col1 &gt;= '1/mar/2009' &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;and col1 &amp;lt; dateadd(d,1,'1/mar/2009')&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(3 row(s) affected)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;GO&lt;/strong&gt;, this construction has served me well over the years: date/time values are handled correctly,&lt;br /&gt;indexes are used and no hassle with convert() leading to good performance and good maintainable T-SQL code!&lt;br /&gt;&lt;br /&gt;have fun&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-7189383171192223051?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tJER1MZ1VOFPfcbq7BAtByWbfkQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tJER1MZ1VOFPfcbq7BAtByWbfkQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tJER1MZ1VOFPfcbq7BAtByWbfkQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tJER1MZ1VOFPfcbq7BAtByWbfkQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/7189383171192223051/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=7189383171192223051" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/7189383171192223051?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/7189383171192223051?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/ZENn32LrPOE/do-you-have-datetime-between-and-bug.html" title="Do you have a datetime T-SQL 'BETWEEN AND' bug??" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/do-you-have-datetime-between-and-bug.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEFSXYzfyp7ImA9WxVVFkU.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-8506348170800311016</id><published>2009-03-03T12:59:00.000-08:00</published><updated>2009-03-10T05:03:38.887-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-10T05:03:38.887-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="INDEX" /><category scheme="http://www.blogger.com/atom/ns#" term="DMV" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>SQL Server tools for performance</title><content type="html">&lt;span style="font-family:arial;"&gt;Since the introduction of SQL Server 2005 Microsoft implemented Dynamic Management Views (DMV’s) in the database engine that enable us to peek inside of it, and retrieve the internal –performance- counters.&lt;br /&gt;&lt;br /&gt;In this post I present a couple of queries gathered and used over time that assisted me to pin down the problem when having performance related issues.&lt;br /&gt;&lt;br /&gt;If you’ve inherited a system from an older / upgraded SQL Server version, I recommend running the ‘unused indexes‘ query mentioned later on. It saved my life in more than one occasion.&lt;br /&gt;In my experience as tables have grown bigger, indexes were created for specific needs and over time became obsolete, but no one bothered to remove them, leaving the system with a lot of unnecessary I/O overhead.&lt;br /&gt;&lt;br /&gt;Explore sys.dm_exec_query_stats it contains more fields than used here (last_physical_reads for instance) and also check out other DMVs for additional info you might be interested in.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Before starting any investigation make sure that all indexes are defragmented and all the statistics are up to date up front (see my post on &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/over-time-when-data-is-added-changed-or.html" target="blank"&gt;index reorganization&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;The queries described here, combined with my previous posts on &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/microsoft-included-fnvirtualfilestats.html" target="blank"&gt;fn_virtualfilestats&lt;/a&gt;, &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/let-microsoft-sql-server-automatically.html" target="blank"&gt;auto index management&lt;/a&gt;, &lt;a href="http://sqlserveradvisor.blogspot.com/2009/03/set-statistics-io-on.html" target="blank"&gt;STATISTICS IO&lt;/a&gt;, &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/create-multiple-files-per-database-and.html" target="blank"&gt;multiple files per database&lt;/a&gt; and &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/over-time-when-data-is-added-changed-or.html" target="blank"&gt;index reorganization&lt;/a&gt; should supply you with enough info to tackle most of I/O related performance issues.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Beware: DMV’s are reset when the SQL Server instance is restarted! So the numbers are only meaningful when the db engine is running for a considerable amount of time&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;First determine how long the instance has been running:&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; crdate &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; Instance_Started_On&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; sysdatabases &lt;br /&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; name &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000;"&gt;'tempdb'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Queries with highest IO load:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;TOP&lt;/span&gt; &lt;span style="color: #000;"&gt;100&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; total_logical_reads, total_logical_writes, execution_count,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; total_logical_reads&lt;span style="color: #808080;"&gt;+&lt;/span&gt;total_logical_writes &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; total_IO,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; st.&lt;span style="color: #0000FF;"&gt;TEXT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; query_text,&lt;br /&gt;&amp;nbsp; &amp;nbsp; st.&lt;span style="color: #202020;"&gt;dbid&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; database_id,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #FF00FF;"&gt;DB_NAME&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;st.&lt;span style="color: #202020;"&gt;dbid&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; database_name&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; sys.&lt;span style="color: #202020;"&gt;dm_exec_query_stats&lt;/span&gt; &amp;nbsp;qs&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;CROSS&lt;/span&gt; APPLY sys.&lt;span style="color: #202020;"&gt;dm_exec_sql_text&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;sql_handle&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; st&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; total_logical_reads&lt;span style="color: #808080;"&gt;+&lt;/span&gt;total_logical_writes &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;total_logical_reads&lt;span style="color: #808080;"&gt;+&lt;/span&gt;total_logical_writes&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;– most i&lt;span style="color: #808080;"&gt;/&lt;/span&gt;o intensive &lt;span style="color: #808080;"&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Queries using the most CPU:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;TOP&lt;/span&gt; &lt;span style="color: #000;"&gt;100&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; highest_cpu_queries.&lt;span style="color: #202020;"&gt;total_worker_time&lt;/span&gt;, &lt;br /&gt;&amp;nbsp; &amp;nbsp; sql_text.&lt;span style="color: #202020;"&gt;dbid&lt;/span&gt;, &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #FF00FF;"&gt;DB_NAME&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;sql_text.&lt;span style="color: #202020;"&gt;dbid&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; database_name,&lt;br /&gt;&amp;nbsp; &amp;nbsp; sql_text.&lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TEXT&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;TOP&lt;/span&gt; &lt;span style="color: #000;"&gt;100&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;PERCENT&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qs.&lt;span style="color: #202020;"&gt;plan_handle&lt;/span&gt;, &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qs.&lt;span style="color: #202020;"&gt;total_worker_time&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.&lt;span style="color: #202020;"&gt;dm_exec_query_stats&lt;/span&gt; qs &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; qs.&lt;span style="color: #202020;"&gt;total_worker_time&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; highest_cpu_queries &lt;br /&gt;&amp;nbsp; &amp;nbsp; cross apply sys.&lt;span style="color: #202020;"&gt;dm_exec_sql_text&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;plan_handle&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; sql_text&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; highest_cpu_queries.&lt;span style="color: #202020;"&gt;total_worker_time&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Get the unused indexes:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #0000FF;"&gt;USE&lt;/span&gt; your_db_name –&lt;span style="color: #808080;"&gt;-&lt;/span&gt; switch &lt;span style="color: #808080;"&gt;TO&lt;/span&gt; your own db here &lt;span style="color: #808080;"&gt;BEFORE&lt;/span&gt; executing the dmv query below&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;TOP&lt;/span&gt; &lt;span style="color: #000;"&gt;100&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #FF00FF;"&gt;OBJECT_NAME&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;i.&lt;span style="color: #FF00FF;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; tablename, &lt;br /&gt;i.&lt;span style="color: #202020;"&gt;name&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; indexname, &lt;br /&gt;s.&lt;span style="color: #202020;"&gt;user_updates&lt;/span&gt;, &lt;br /&gt;s.&lt;span style="color: #202020;"&gt;user_seeks&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; s.&lt;span style="color: #202020;"&gt;user_scans&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; s.&lt;span style="color: #202020;"&gt;user_lookups&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; totalreads,&lt;br /&gt;s.&lt;span style="color: #202020;"&gt;user_updates&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; totalwrites&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; sys.&lt;span style="color: #202020;"&gt;indexes&lt;/span&gt; i&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;LEFT&lt;/span&gt; join sys.&lt;span style="color: #202020;"&gt;dm_db_index_usage_stats&lt;/span&gt; s&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;ON&lt;/span&gt; s.&lt;span style="color: #FF00FF;"&gt;OBJECT_ID&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; i.&lt;span style="color: #FF00FF;"&gt;OBJECT_ID&lt;/span&gt; and &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i.&lt;span style="color: #202020;"&gt;index_id&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; s.&lt;span style="color: #202020;"&gt;index_id&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;OBJECTPROPERTY&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;i.&lt;span style="color: #FF00FF;"&gt;OBJECT_ID&lt;/span&gt;, &lt;span style="color: #FF0000;"&gt;'IsIndexable'&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;1&lt;/span&gt; and&lt;br /&gt;&lt;span style="color: #008080;"&gt;-- index_usage_stats has no reference to this index (not being used)&lt;/span&gt;&lt;br /&gt;s.&lt;span style="color: #202020;"&gt;index_id&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;IS&lt;/span&gt; null or&lt;br /&gt;&lt;span style="color: #008080;"&gt;-- index is being updated, but not used by seeks/scans/lookups&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;s.&lt;span style="color: #202020;"&gt;user_updates&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt; and s.&lt;span style="color: #202020;"&gt;user_seeks&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt; and s.&lt;span style="color: #202020;"&gt;user_scans&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt; and s.&lt;span style="color: #202020;"&gt;user_lookups&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; s.&lt;span style="color: #202020;"&gt;user_updates&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;br /&gt;go&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-8506348170800311016?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FI4zPQHr-9NdG6h9YMuFlMRVQrU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FI4zPQHr-9NdG6h9YMuFlMRVQrU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FI4zPQHr-9NdG6h9YMuFlMRVQrU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FI4zPQHr-9NdG6h9YMuFlMRVQrU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/8506348170800311016/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=8506348170800311016" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/8506348170800311016?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/8506348170800311016?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/DxMBjAMKVx8/tools-for-performance.html" title="SQL Server tools for performance" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/tools-for-performance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUFQns4eSp7ImA9WxVVGEQ.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-3629239720382621510</id><published>2009-03-01T03:37:00.000-08:00</published><updated>2009-03-12T13:36:53.531-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-12T13:36:53.531-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="STATISTICS IO" /><category scheme="http://www.blogger.com/atom/ns#" term="INDEX" /><category scheme="http://www.blogger.com/atom/ns#" term="hosting" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>SET STATISTICS IO ON!</title><content type="html">&lt;span style="font-family:arial;"&gt;The graphical query plans introduced in the latest SQL Server versions give you great inside info on how your query is executing. Downside: sometimes they are difficult to read and they take time to fully understand.&lt;br /&gt;&lt;br /&gt;Enter: &lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:courier new;"&gt;SET STATISTICS IO ON&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;It gives you an overview off how many I/Os your query is executing on each accessed table, and by working together with the query optimizer you can absolutely minimize these numbers.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;And by doing so optimize and increase the work load a SQL Server instance can handle.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;For example: what is the impact of replacing an SELECT IN sub-query by an IF EXISTS () construction.&lt;br /&gt;&lt;br /&gt;This feature is available since SQL Server 6.x, so you can still tune your old instances.&lt;br /&gt;&lt;br /&gt;In my opinion this option should always be used with any new or changed query against a representative amount of data: a copy from, or simulation of, a production environment to check if the results are in-line with expectations.&lt;br /&gt;&lt;br /&gt;Here’s a simple query and result when the option is enabled in the message tab of the results pane (click to enlarge): &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_VOeVH3l2m1Q/Saml1ZGqNOI/AAAAAAAAAA8/Rf0jbjYpAjk/s1600-h/Statistic-IO.JPG" target="blank"&gt;&lt;img id="BLOGGER_PHOTO_ID_5307955972523308258" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 400px; CURSOR: hand; HEIGHT: 103px" alt="" src="http://3.bp.blogspot.com/_VOeVH3l2m1Q/Saml1ZGqNOI/AAAAAAAAAA8/Rf0jbjYpAjk/s400/Statistic-IO.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;If you have a hosted SQL Server environment with tight security, it could well be that generating graphical query plans is prohibited, while this option could still be granted giving you lots of meaningful information. &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;Before diving in to it check that all indexes a reorganized and the statistics are up to date.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;(see my post &lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/over-time-when-data-is-added-changed-or.html" target="blank"&gt;index defragmentation&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Also check my post &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/let-microsoft-sql-server-automatically.html" target="blank"&gt;auto index management&lt;/a&gt; and let SQL Server assist you with your indexes!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Oh yeah, switch it to off again when you are done tuning your queries, don’t include it in your stored procedures. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-3629239720382621510?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Env-JgaZY-ZSLZMvmlRMFKksuLo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Env-JgaZY-ZSLZMvmlRMFKksuLo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Env-JgaZY-ZSLZMvmlRMFKksuLo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Env-JgaZY-ZSLZMvmlRMFKksuLo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/3629239720382621510/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=3629239720382621510" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/3629239720382621510?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/3629239720382621510?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/bgDFdAgpUkI/set-statistics-io-on.html" title="SET STATISTICS IO ON!" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_VOeVH3l2m1Q/Saml1ZGqNOI/AAAAAAAAAA8/Rf0jbjYpAjk/s72-c/Statistic-IO.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/03/set-statistics-io-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEDQn09eyp7ImA9WxVVEUQ.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-1877260146236573426</id><published>2009-02-20T13:09:00.000-08:00</published><updated>2009-03-04T12:31:13.363-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-04T12:31:13.363-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Alerts" /><category scheme="http://www.blogger.com/atom/ns#" term="MSDB" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Agent" /><title>Enable those alerts!</title><content type="html">&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Since SQL Server 7.0 Microsoft has implemented so called alerts in SQL Agent.&lt;br /&gt;The main purpose of these alerts is that when specific events occur, the DBA automatically gets informed by mail / pager or other means of these event(s) and take corrective action.&lt;br /&gt;&lt;br /&gt;There are a couple of basic event that should be implemented on an instance by default but I’ve haven’t seen that many servers were the actually were installed, used and monitored.&lt;br /&gt;&lt;br /&gt;Here’s a T-SQL script that will create the right basic alerts that, after setup, will pop-up under the ‘Alert’ folder in SQL Agent. It’s an easy step to connect the alerts to an operator so they can be sent out. I’ll leave this challenge to you ;-)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="php" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;USE &lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;msdb&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;GO&lt;br /&gt;&lt;span style="color: #666666; font-style: italic;"&gt;/****** Object: &amp;nbsp;Alert [019 - Fatal Error in Resource] 13:29:32 ******/&lt;/span&gt;&lt;br /&gt;&lt;a style="color: #000060;" href="http://www.php.net/exec"&gt;&lt;span style="color: #990000;"&gt;EXEC&lt;/span&gt;&lt;/a&gt; msdb&lt;span style="color: #339933;"&gt;.&lt;/span&gt;dbo&lt;span style="color: #339933;"&gt;.&lt;/span&gt;sp_add_alert &lt;span style="color: #339933;"&gt;@&lt;/span&gt;name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'019 - Fatal Error in Resource'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;message_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;severity&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;19&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;enabled&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;delay_between_responses&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;include_event_description_in&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;category_name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'[Uncategorized]'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;job_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'00000000-0000-0000-0000-000000000000'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;USE &lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;msdb&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;GO&lt;br /&gt;&lt;span style="color: #666666; font-style: italic;"&gt;/****** Object: &amp;nbsp;Alert [020 - Fatal Error in Current Process] ******/&lt;/span&gt;&lt;br /&gt;&lt;a style="color: #000060;" href="http://www.php.net/exec"&gt;&lt;span style="color: #990000;"&gt;EXEC&lt;/span&gt;&lt;/a&gt; msdb&lt;span style="color: #339933;"&gt;.&lt;/span&gt;dbo&lt;span style="color: #339933;"&gt;.&lt;/span&gt;sp_add_alert &lt;span style="color: #339933;"&gt;@&lt;/span&gt;name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'020 - Fatal Error in Current Process'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;message_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;severity&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;20&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;enabled&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;delay_between_responses&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;include_event_description_in&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;category_name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'[Uncategorized]'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;job_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'00000000-0000-0000-0000-000000000000'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;USE &lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;msdb&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;GO&lt;br /&gt;&lt;span style="color: #666666; font-style: italic;"&gt;/****** Object: &amp;nbsp;Alert [021 - Fatal Error in Database Process] ******/&lt;/span&gt;&lt;br /&gt;&lt;a style="color: #000060;" href="http://www.php.net/exec"&gt;&lt;span style="color: #990000;"&gt;EXEC&lt;/span&gt;&lt;/a&gt; msdb&lt;span style="color: #339933;"&gt;.&lt;/span&gt;dbo&lt;span style="color: #339933;"&gt;.&lt;/span&gt;sp_add_alert &lt;span style="color: #339933;"&gt;@&lt;/span&gt;name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'021 - Fatal Error in Database Process'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;message_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;severity&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;21&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;enabled&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;delay_between_responses&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;include_event_description_in&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;category_name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'[Uncategorized]'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;job_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'00000000-0000-0000-0000-000000000000'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;USE &lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;msdb&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;GO&lt;br /&gt;&lt;span style="color: #666666; font-style: italic;"&gt;/****** Object: &amp;nbsp;Alert [022 - Fatal Error Table Integritiy Suspect] ******/&lt;/span&gt;&lt;br /&gt;&lt;a style="color: #000060;" href="http://www.php.net/exec"&gt;&lt;span style="color: #990000;"&gt;EXEC&lt;/span&gt;&lt;/a&gt; msdb&lt;span style="color: #339933;"&gt;.&lt;/span&gt;dbo&lt;span style="color: #339933;"&gt;.&lt;/span&gt;sp_add_alert &lt;span style="color: #339933;"&gt;@&lt;/span&gt;name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'022 - Fatal Error Table Integritiy Suspect'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;message_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;severity&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;22&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;enabled&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;delay_between_responses&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;include_event_description_in&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;category_name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'[Uncategorized]'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;job_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'00000000-0000-0000-0000-000000000000'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;USE &lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;msdb&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;GO&lt;br /&gt;&lt;span style="color: #666666; font-style: italic;"&gt;/****** Object: &amp;nbsp;Alert [023 - Fatal Error Database Integrity Suspect] ******/&lt;/span&gt;&lt;br /&gt;&lt;a style="color: #000060;" href="http://www.php.net/exec"&gt;&lt;span style="color: #990000;"&gt;EXEC&lt;/span&gt;&lt;/a&gt; msdb&lt;span style="color: #339933;"&gt;.&lt;/span&gt;dbo&lt;span style="color: #339933;"&gt;.&lt;/span&gt;sp_add_alert &lt;span style="color: #339933;"&gt;@&lt;/span&gt;name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'023 - Fatal Error Database Integrity Suspect'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;message_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;severity&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;23&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;enabled&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;delay_between_responses&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;include_event_description_in&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;category_name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'[Uncategorized]'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;job_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'00000000-0000-0000-0000-000000000000'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;USE &lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;msdb&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;GO&lt;br /&gt;&lt;span style="color: #666666; font-style: italic;"&gt;/****** Object: &amp;nbsp;Alert [024 - Fatal Error Hardware Error] &amp;nbsp;******/&lt;/span&gt;&lt;br /&gt;&lt;a style="color: #000060;" href="http://www.php.net/exec"&gt;&lt;span style="color: #990000;"&gt;EXEC&lt;/span&gt;&lt;/a&gt; msdb&lt;span style="color: #339933;"&gt;.&lt;/span&gt;dbo&lt;span style="color: #339933;"&gt;.&lt;/span&gt;sp_add_alert &lt;span style="color: #339933;"&gt;@&lt;/span&gt;name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'024 - Fatal Error Hardware Error'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;message_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;severity&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;24&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;enabled&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;delay_between_responses&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;include_event_description_in&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;category_name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'[Uncategorized]'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;job_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'00000000-0000-0000-0000-000000000000'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;USE &lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;msdb&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;GO&lt;br /&gt;&lt;span style="color: #666666; font-style: italic;"&gt;/****** Object: &amp;nbsp;Alert [025 - Fatal Error] ******/&lt;/span&gt;&lt;br /&gt;&lt;a style="color: #000060;" href="http://www.php.net/exec"&gt;&lt;span style="color: #990000;"&gt;EXEC&lt;/span&gt;&lt;/a&gt; msdb&lt;span style="color: #339933;"&gt;.&lt;/span&gt;dbo&lt;span style="color: #339933;"&gt;.&lt;/span&gt;sp_add_alert &lt;span style="color: #339933;"&gt;@&lt;/span&gt;name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'025 - Fatal Error'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;message_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;severity&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;25&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;enabled&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;delay_between_responses&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;include_event_description_in&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;category_name&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'[Uncategorized]'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #339933;"&gt;@&lt;/span&gt;job_id&lt;span style="color: #339933;"&gt;=&lt;/span&gt;N&lt;span style="color: #0000ff;"&gt;'00000000-0000-0000-0000-000000000000'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-1877260146236573426?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/epspHtT_M3yVLT_IMRWPhD-2qGs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/epspHtT_M3yVLT_IMRWPhD-2qGs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/epspHtT_M3yVLT_IMRWPhD-2qGs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/epspHtT_M3yVLT_IMRWPhD-2qGs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/1877260146236573426/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=1877260146236573426" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/1877260146236573426?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/1877260146236573426?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/u59rH1UJ644/enable-those-alerts.html" title="Enable those alerts!" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/02/enable-those-alerts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ECR3Y-eCp7ImA9WxVWEUk.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-1088693834092035998</id><published>2009-02-20T07:53:00.000-08:00</published><updated>2009-02-20T08:01:06.850-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-20T08:01:06.850-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="disk arrays" /><category scheme="http://www.blogger.com/atom/ns#" term="TempDB" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>Create multiple files per database and increase performance</title><content type="html">&lt;span style="font-family:arial;"&gt;In this post I want to explain why to create multiple data files per SQL Server database&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note: this is only relevant for data files, not for log files. Log files always have one file!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Microsoft documentation says:&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;• The number of data files within a single filegroup should equal to the number of physical CPU cores (hyper threading cores should not be counted)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is also true for TempDB&lt;br /&gt;&lt;br /&gt;So create all the files in your new database with the same initial size – make an estimate on how big you want the files to be- and set a reasonable growth factor. Do not set it to a percentage, but on the same fixed size in MB for all data files. Use the same growth factor for all the files you have created.&lt;br /&gt;&lt;br /&gt;SQL Server will fill the data files in a round robin way, meaning that data is spread equally across all the files as the database grows.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Tip!&lt;br /&gt;Another advantage from this approach is that if you have performance issues and you can pin this down to an disk I/O related problem &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;(see my &lt;a href="http://sqlserveradvisor.blogspot.com/2009/02/microsoft-included-fnvirtualfilestats.html"&gt;http://sqlserveradvisor.blogspot.com/2009/02/microsoft-included-fnvirtualfilestats.html&lt;/a&gt; on fn_virtualfilestats() post for this), it is then an easy change to add a new raid disk configuration to your server and then spread the data files evenly over both the raid arrays.&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;Giving you an instant performance boost!!&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-1088693834092035998?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7gLE28VKQVlWuuuKZJbTA_BGU9s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7gLE28VKQVlWuuuKZJbTA_BGU9s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7gLE28VKQVlWuuuKZJbTA_BGU9s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7gLE28VKQVlWuuuKZJbTA_BGU9s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/1088693834092035998/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=1088693834092035998" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/1088693834092035998?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/1088693834092035998?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/pO3s3re0Dgg/create-multiple-files-per-database-and.html" title="Create multiple files per database and increase performance" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/02/create-multiple-files-per-database-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8GQXozeSp7ImA9WxVVE0o.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-465893056171209812</id><published>2009-02-20T07:39:00.000-08:00</published><updated>2009-03-06T12:20:20.481-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-06T12:20:20.481-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="disk arrays" /><category scheme="http://www.blogger.com/atom/ns#" term="TempDB" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>fn_virtualfilestats: Measure the I/O load on your disk system</title><content type="html">&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;Microsoft included the fn_virtualfilestats function in SQL Server so you can monitor the I/O load the instance executes on the disk subsystem.&lt;br /&gt;&lt;br /&gt;I use this function mainly to:&lt;br /&gt;- Get the load on TempDB and check if it’s a good idea to move it to it’s own disks (if you have not already done so)&lt;br /&gt;- Get the I/O profile (more read of write activity?) on the database level to help determine if it might be an idea to replace a raid-5 array to a raid-10 or to move datafiles to additional diskarrays (see my post http:// for this)&lt;br /&gt;- Check if there are any disk related issues, in other words are there many stalled I/O’s?&lt;br /&gt;(stalled I/O is an I/O waiting for another I/O)&lt;br /&gt;- Check if the system can handle more db’s, eliminating additional servers&lt;br /&gt;&lt;br /&gt;Real life example:&lt;br /&gt;I managed to save big $$$ and could avoid buying new hardware by letting our vendor run this script in comaparable environent of another customer and so proving the load was not so big as they claimed, so we could run the new system on our existing hardware.&lt;br /&gt;&lt;br /&gt;Here’s the T-SQL to get the I/O profile of all your database and data files:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #0000FF;"&gt;DECLARE&lt;/span&gt; @TotalIO&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;BIGINT&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; @TotalBytes &lt;span style="color: #0000FF;"&gt;BIGINT&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; @TotalStall &lt;span style="color: #0000FF;"&gt;BIGINT&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; @TotalIO &amp;nbsp;&lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;SUM&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;NumberReads &lt;span style="color: #808080;"&gt;+&lt;/span&gt; NumberWrites&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@TotalBytes &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;SUM&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;BytesRead &lt;span style="color: #808080;"&gt;+&lt;/span&gt; BytesWritten&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@TotalStall &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;SUM&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;IoStallMS&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; ::&lt;span style="color: #FF00FF;"&gt;FN_VIRTUALFILESTATS&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;NULL&lt;/span&gt;, &lt;span style="color: #808080;"&gt;NULL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;DbName&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;DB_NAME&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;DbId&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; name &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; sys.&lt;span style="color: #202020;"&gt;master_files&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; database_id &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;DbId&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; and &lt;span style="color: #FF00FF;"&gt;FILE_ID&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;FileId&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; filename,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #808080;"&gt;%&lt;/span&gt;ReadWrites&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;100&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;NumberReads &lt;span style="color: #808080;"&gt;+&lt;/span&gt; NumberWrites&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; @TotalIO&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #808080;"&gt;%&lt;/span&gt;Bytes&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;100&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;BytesRead &lt;span style="color: #808080;"&gt;+&lt;/span&gt; BytesWritten&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; @TotalBytes&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #808080;"&gt;%&lt;/span&gt;Stall&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;100&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; IoStallMS &lt;span style="color: #808080;"&gt;/&lt;/span&gt; @TotalStall&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;NumberReads&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;NumberWrites&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;TotalIO&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;CAST&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;NumberReads &lt;span style="color: #808080;"&gt;+&lt;/span&gt; NumberWrites&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BIGINT&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;MBsRead&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;BytesRead&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;1024&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000;"&gt;1024&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;MBsWritten&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;BytesWritten&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;1024&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000;"&gt;1024&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;TotalMBs&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;BytesRead &lt;span style="color: #808080;"&gt;+&lt;/span&gt; BytesWritten&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;1024&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000;"&gt;1024&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;IoStallMS&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; IoStallReadMS,&lt;br /&gt;&amp;nbsp; &amp;nbsp; IoStallWriteMS,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;AvgStallPerIO&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;IoStallMS&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;NumberReads&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;NumberWrites&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #000;"&gt;1&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;AvgStallPerReadIO&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;IoStallReadMS &lt;span style="color: #808080;"&gt;/&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;NumberReads&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #000;"&gt;1&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;AvgStallPerWriteIO&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;IoStallWriteMS &lt;span style="color: #808080;"&gt;/&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;NumberWrites&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #000;"&gt;1&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;AvgBytesPerRead&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &amp;nbsp;&lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;BytesRead&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;NumberReads &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #000;"&gt;1&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;AvgBytesPerWrite&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;BytesWritten&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;NumberWrites &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #000;"&gt;1&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; ::&lt;span style="color: #FF00FF;"&gt;FN_VIRTUALFILESTATS&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #808080;"&gt;NULL&lt;/span&gt;, &lt;span style="color: #808080;"&gt;NULL&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; dbname&lt;br /&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;&lt;em&gt;Be ware: counters are re-set after the instance is restarted!&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:arial;"&gt;The result (not all columns shown here). Click on image to enlarge&lt;/span&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_VOeVH3l2m1Q/SZ7PN3y6QvI/AAAAAAAAAAs/jzUebOVNvWQ/s1600-h/VirtFileStats.JPG"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_VOeVH3l2m1Q/SZ7PZi7BZHI/AAAAAAAAAA0/jyckM-qLsfs/s1600-h/VirtFileStats.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5304905448867062898" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 419px; CURSOR: hand; HEIGHT: 122px" alt="" src="http://4.bp.blogspot.com/_VOeVH3l2m1Q/SZ7PZi7BZHI/AAAAAAAAAA0/jyckM-qLsfs/s400/VirtFileStats.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-465893056171209812?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uW_twxZlkH3vsOT2357-pt-louw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uW_twxZlkH3vsOT2357-pt-louw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uW_twxZlkH3vsOT2357-pt-louw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uW_twxZlkH3vsOT2357-pt-louw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/465893056171209812/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=465893056171209812" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/465893056171209812?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/465893056171209812?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/da_CGPCbzLo/microsoft-included-fnvirtualfilestats.html" title="fn_virtualfilestats: Measure the I/O load on your disk system" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_VOeVH3l2m1Q/SZ7PZi7BZHI/AAAAAAAAAA0/jyckM-qLsfs/s72-c/VirtFileStats.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/02/microsoft-included-fnvirtualfilestats.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UCRnc-eSp7ImA9WxVVEUw.&quot;"><id>tag:blogger.com,1999:blog-3317329893884614079.post-7641909802610919113</id><published>2009-02-19T12:29:00.000-08:00</published><updated>2009-03-03T12:14:27.951-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-03T12:14:27.951-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DBCC" /><category scheme="http://www.blogger.com/atom/ns#" term="MSDB" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="day to day maintenance" /><category scheme="http://www.blogger.com/atom/ns#" term="CHECKDB" /><title>SQL Server Day to day maintenance</title><content type="html">&lt;span style="font-family:arial;"&gt;&lt;br /&gt;Here’s a little SQL Server T-SQL script I wrote that will executes some day-to-day maintenance&lt;br /&gt;It’ calls some sp’s in MSDB to remove old (as specified by the parameter in the dateadd() function) mail, job and backup history info that will normally accumulate in msdb making it grow bigger over time.&lt;br /&gt;&lt;br /&gt;Also a DBCC CHECKDB statement is constructed for each on-line database. Microsoft recommends executing this command frequently. Especially before a full backup is made.&lt;br /&gt;&lt;br /&gt;benefits of this script over a SSIS maintenance plan:&lt;br /&gt;- newly created databases are automaticly included&lt;br /&gt;- Databases can be set off-line without the job-step to fail &lt;br /&gt;- Databases in standby mode are skipped&lt;br /&gt;- minumum overhead, giving you precise control&lt;br /&gt;- I've been running this script for more then 2 years now without any error(s)...&lt;br /&gt;&lt;br /&gt;I normally schedule this script daily in SQL Server Agent as a separate job before the full backup kicks in, or include as a separate step in the backup process.&lt;br /&gt;&lt;br /&gt;Here’s T-SQL Code (store in the CodeCatalog):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="tsql" style="font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;"&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt; &lt;font size="2"&gt;-- ==================================================================== &lt;br /&gt; &lt;/font&gt; &lt;/span&gt;&lt;font size="2"&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;-- Author: SQL Server Advisor &lt;br /&gt;-- Create date: jan/2009&lt;br /&gt; -- Description: execute maintenance tasks per database, deletes MSDB log info&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;-- ==================================================================== &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;PROCEDURE&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;dbo&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #808080;"&gt;&amp;#91;&lt;/span&gt;usp_DatabaseMaintenance&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000FF;"&gt;DECLARE&lt;/span&gt; @Histdate &lt;span style="color: #0000FF;"&gt;DATETIME&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000FF;"&gt;DECLARE&lt;/span&gt; @dbname &lt;span style="color: #0000FF;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;100&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt;, @command &lt;span style="color: #0000FF;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000;"&gt;350&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; @Histdate&lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;DATEADD&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DAY&lt;/span&gt;, &lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="color: #000;"&gt;28&lt;/span&gt;, &lt;span style="color: #FF00FF;"&gt;GETDATE&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&amp;#41;&amp;#41;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;--sp’s stored in MSDB &lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: #0000FF;"&gt;EXEC&lt;/span&gt; msdb..&lt;span style="color: #AF0000;"&gt;SP_DELETE_BACKUPHISTORY&lt;/span&gt; @Histdate &lt;span style="color: #008080;"&gt;-- delete old history info &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: #008080;"&gt;-- delete old mail items &lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: #0000FF;"&gt;EXEC&lt;/span&gt; msdb.&lt;span style="color: #202020;"&gt;dbo&lt;/span&gt;.&lt;span style="color: #202020;"&gt;sysmail_delete_mailitems_sp&lt;/span&gt; @sent_before &lt;span style="color: #808080;"&gt;=&lt;/span&gt; @Histdate &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: #008080;"&gt;-- delete the log of the sent items &lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: #0000FF;"&gt;EXEC&lt;/span&gt; msdb.&lt;span style="color: #202020;"&gt;dbo&lt;/span&gt;.&lt;span style="color: #202020;"&gt;sysmail_delete_log_sp&lt;/span&gt; @logged_before &lt;span style="color: #808080;"&gt;=&lt;/span&gt; @Histdate &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: #008080;"&gt;-- delete the job history log &lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: #0000FF;"&gt;EXEC&lt;/span&gt; msdb.&lt;span style="color: #202020;"&gt;dbo&lt;/span&gt;.&lt;span style="color: #AF0000;"&gt;SP_PURGE_JOBHISTORY&lt;/span&gt; @oldest_date &lt;span style="color: #808080;"&gt;=&lt;/span&gt; @Histdate &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: #008080;"&gt;--get all the on-line databases &lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;DECLARE&lt;/span&gt; dbnames_cursor &lt;span style="color: #0000FF;"&gt;CURSOR&lt;/span&gt; FAST_F&lt;span style="color: #808080;"&gt;OR&lt;/span&gt;WARD &lt;span style="color: #0000FF;"&gt;FOR&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt; name &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; sys.&lt;span style="color: #202020;"&gt;databases&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt; name &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #808080;"&gt;IN&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'tempdb'&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #008080;"&gt;-- skip the unwanted DBs &lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;DATABASEPROPERTYEX&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;name, &lt;span style="color: #FF0000;"&gt;'Status'&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000;"&gt;'ONLINE'&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;DATABASEPROPERTYEX&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&amp;#91;&lt;/span&gt;name&lt;span style="color: #808080;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #FF0000;"&gt;'IsInStandBy'&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt; name &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;OPEN&lt;/span&gt; dbnames_cursor &lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;FETCH&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;NEXT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; dbnames_cursor &lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt; @dbname &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;WHILE&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;@@FETCH_STATUS&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #000;"&gt;0&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;BEGIN&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;SET&lt;/span&gt; @dbname &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #FF00FF;"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;#40;&lt;/span&gt;@dbname&lt;span style="color: #808080;"&gt;&amp;#41;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;SET&lt;/span&gt; @command &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #FF0000;"&gt;'DBCC CHECKDB ('&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; @dbname &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #FF0000;"&gt;') WITH NO_INFOMSGS'&lt;/span&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;PRINT&lt;/span&gt; @command &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;EXEC&lt;/span&gt; &lt;span style="color: #AF0000;"&gt;SP_EXECUTESQL&lt;/span&gt; @command &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #0000FF;"&gt;FETCH&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;NEXT&lt;/span&gt; &lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt; dbnames_cursor &lt;span style="color: #0000FF;"&gt;INTO&lt;/span&gt; @dbname &lt;br /&gt;&amp;nbsp; &lt;span style="color: #0000FF;"&gt;END&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: #0000FF;"&gt;CLOSE&lt;/span&gt; dbnames_cursor &lt;br /&gt;&amp;nbsp; &lt;span style="color: #0000FF;"&gt;DEALLOCATE&lt;/span&gt; dbnames_cursor &lt;br /&gt; &lt;/font&gt;&lt;br /&gt;&lt;span style="color: #0000FF;"&gt;&lt;font size="2"&gt;END&lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt; &amp;nbsp;&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3317329893884614079-7641909802610919113?l=sqlserveradvisor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zXY3YCWVrI_zPmr-zCKiU1z78xI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zXY3YCWVrI_zPmr-zCKiU1z78xI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zXY3YCWVrI_zPmr-zCKiU1z78xI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zXY3YCWVrI_zPmr-zCKiU1z78xI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlserveradvisor.blogspot.com/feeds/7641909802610919113/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3317329893884614079&amp;postID=7641909802610919113" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/7641909802610919113?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3317329893884614079/posts/default/7641909802610919113?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MDvk/~3/75YuWbMEGiw/sql-server-day-to-day-maintenance_19.html" title="SQL Server Day to day maintenance" /><author><name>SQL Server Advisor</name><uri>http://www.blogger.com/profile/17363771951293231137</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlserveradvisor.blogspot.com/2009/02/sql-server-day-to-day-maintenance_19.html</feedburner:origLink></entry></feed>

