<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_永恒的青春</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/25473/rss</id><updated>2012-02-03T14:31:22Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/25473/rss"/><entry><id>http://www.cnblogs.com/nzperfect/archive/2012/02/03/2337328.html</id><title type="text">日志文件如何影响我数据库的启动</title><summary type="text">原文：http://blogs.msdn.com/b/apgcdsd/archive/2011/12/30/10251946.aspx截取一段，备查日志文件如何影响我数据库的启动？无论你的SQL Server启动，或者你将某数据库重备份中恢复，或者其他的一些情况，总之在你的数据库能够被正常使用之前，你的数据库都会进入 Recovery的状态。http://msdn.microsoft.com/en-us/library/ms190442.aspx 如果这一个步失败，那么你的数据库就会进入Suspect状态而无法正常使用。在一些特殊情况下，这个Recovery所花费的时间会很长。在数据库进入On</summary><published>2012-02-03T08:56:00Z</published><updated>2012-02-03T08:56:00Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nzperfect/archive/2012/02/03/2337328.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/archive/2012/02/03/2337328.html"/><content type="html">&lt;p&gt;原文：&lt;a href="http://blogs.msdn.com/b/apgcdsd/archive/2011/12/30/10251946.aspx" target="_blank"&gt;http://blogs.msdn.com/b/apgcdsd/archive/2011/12/30/10251946.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;截取一段，备查&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;日志文件如何影响我数据库的启动？&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;无论你的SQL Server启动，或者你将某数据库重备份中恢复，或者其他的一些情况，总之在你的数据库能够被正常使用之前，你的数据库都会进入 Recovery的状态。&lt;a href="http://msdn.microsoft.com/en-us/library/ms190442.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms190442.aspx&lt;/a&gt; 如果这一个步失败，那么你的数据库就会进入Suspect状态而无法正常使用。在一些特殊情况下，这个Recovery所花费的时间会很长。在数据库进入Online状态之前，我们都不能认为SQL Server可以被正常使用了。&lt;/p&gt;&#xD;
&lt;p&gt;那么在Recovery中做了什么呢？&lt;/p&gt;&#xD;
&lt;p&gt;我们可以在你的SSMS中运行如下语句。在运行之前，你可以先按下Ctrl+T来把结果转化成Plain Text格式。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;sp_readerrorlog会返回自从最近一次SQL Server服务启动，或者Error Log被回收开始的SQL Server的Error Log信息。这里有两个词汇可能会让你感到疑惑。&lt;em&gt;首先，这里的&lt;/em&gt;&lt;em&gt;Log&lt;/em&gt;&lt;em&gt;和我们上文所说的日志文件（&lt;/em&gt;&lt;em&gt;Transaction Log&lt;/em&gt;&lt;em&gt;）中的&lt;/em&gt;&lt;em&gt;Log&lt;/em&gt;&lt;em&gt;不是一件事情。其次，所谓的&lt;/em&gt;&lt;em&gt;Error Log&lt;/em&gt;&lt;em&gt;，并不是说这里出现了&lt;/em&gt;&lt;em&gt;Error&lt;/em&gt;&lt;em&gt;。&lt;/em&gt;SQL Server使用这个Error Log记录了很多诊断信息。所以，你可以认为这只是一个普通的记录了很多SQL Server相关信息的日志文件。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在结果返回中，你可能会找到上面的这些信息。引号中为在你当前数据库实例下的各个数据库名。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;以数据库&amp;lsquo;CaseLync&amp;rsquo;为例。由于Error Log会记录当前SQL Server实例下的所有数据库的相关信息，所以你可能会看到和这个数据库相关的日志被顺序地分布在日志的不同地方。在上图中，第一和第二行提及两个词：rolled forward和rolled back。这两个词和我们本文中所提及的Transaction Log息息相关。&lt;/p&gt;&#xD;
&lt;p&gt;在前文中，我们提到过数据修改的过程：先同步的被写入Transaction Log，然后再Checkpoint发生的时候被同步到Data File里。那么，如果我的事物（Transaction）没有被提交（Commit）或者回滚（Rollback），那么这个数据修改是否也在日志文件（Transaction Log）还是在数据文件里（Data File）？&lt;/p&gt;&#xD;
&lt;p&gt;答案是：都在！&lt;/p&gt;&#xD;
&lt;p&gt;SQL Server在记录数据改变时，并不会区分该语句是否有显示的进行事物操作（Begin Transaction，Commit / Rollback Transaction）, 或者该事务是否有完成。SQL Server会忠实地记录所有的修改操作。而Begin Transaction和Commit / Rollback Transaction本身也是日志文件需要记录的操作之一。&lt;/p&gt;&#xD;
&lt;p&gt;由于对于事物日志的修改要先于对于数据文件的修改，所以当你的数据库处于Recovery的状态时，那么Transaction Log&lt;em&gt;就会从最近的一个&lt;/em&gt;&lt;em&gt;Checkpoint&lt;/em&gt;点开始做如下操作：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;如果该操作已在在Transaction Log中，而不在Data File之中，并且如果它使用显式的Transaction操作符而且处于Commit状态，则会发生一次Rolled Forward操作，将该操作同步到Data File之中。&lt;/li&gt;&#xD;
&lt;li&gt;如果该操作已在在Transaction Log中，而不在Data File之中，并且如果它使用显式的Transaction操作符而且处于Rollback Transaction状态，则会发生一次Rolled back操作，将Data File之中的相关数据修改回滚到Transaction发生之前。&lt;/li&gt;&#xD;
&lt;li&gt;如果该操作已在在Transaction Log中，而不在Data File之中，并且如果它使用显式的Transaction在日志文件中即没有Commit操作，也没有Rollback操作，则会发生一次Rolled back操作，将Data File之中的相关数据修改回滚到Transaction发生之前。&lt;/li&gt;&#xD;
&lt;li&gt;如果该操作已在在Transaction Log中，而不在Data File之中，并且如果它没有使用显式的Transaction操作符（Begin Transaction）, 则被认为是一个Rolled Forward操作。&lt;/li&gt;&#xD;
&lt;li&gt;如上步骤都完成后，SQL Server会对该数据库做一个Checkpoint的标识，并写入Transaction Log，表示Data File和Transaction Log已经同步。这表明了数据库的Recovery完成。数据库将进入Online状态，并被正常使用。如果你的数据库在最近的一次Checkpoint到现今的修改操作足够多，在Error Log中也会看到SQL Server用百分比标识Recovery完成的进展。&lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;img src="http://www.cnblogs.com/nzperfect/aggbug/2337328.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nzperfect/archive/2012/02/03/2337328.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nzperfect/archive/2012/02/01/2334594.html</id><title type="text">How can I create a dump of SQL Server?</title><summary type="text">原文：http://blogs.msdn.com/b/askjay/archive/2010/02/05/how-can-i-create-a-dump-of-sql-server.aspxYou can create a memory dump of the SQL Server process space in several ways. There are many external tools that can help you accomplish this such as userdump.exe, debugdiag.exe, and ADPlus.exe. In this po</summary><published>2012-02-01T06:58:00Z</published><updated>2012-02-01T06:58:00Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nzperfect/archive/2012/02/01/2334594.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/archive/2012/02/01/2334594.html"/><content type="html">&lt;p&gt;原文：http://blogs.msdn.com/b/askjay/archive/2010/02/05/how-can-i-create-a-dump-of-sql-server.aspx&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;You can create a memory dump of the &#xD;
SQL Server process space in several ways.&amp;nbsp; There are many external tools&#xD;
 that can help you accomplish this such as userdump.exe, debugdiag.exe, &#xD;
and ADPlus.exe.&amp;nbsp; In this post, I&amp;rsquo;ll cover 3 common ways to accomplish &#xD;
this for SQL Server:&amp;nbsp; The most common way (sqldumper), using the &#xD;
debugger, and three methods from within SQL Server itself.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;First, two of these methods will &#xD;
require that you get the process id (PID) of SQL Server.&amp;nbsp;&amp;nbsp; Here are a &#xD;
few simple ways to do that:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;1.&amp;nbsp; From a command window, execute --&amp;gt;&lt;strong&gt;&amp;nbsp;&lt;em&gt;tasklist | find /i &amp;ldquo;sqlservr&amp;rdquo;&lt;/em&gt;&lt;/strong&gt; or from the Debugging tools directory execute &amp;ndash;&amp;gt;&lt;strong&gt; &lt;em&gt;tlist | find /i &amp;ldquo;sqlservr&amp;rdquo;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;2.&amp;nbsp; Open task manager, and find &#xD;
sqlservr.exe and get the PID from the PID column.&amp;nbsp; If you don&amp;rsquo;t see this&#xD;
 column, then select View &amp;ndash;&amp;gt; Select Columns to add it.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;3.&amp;nbsp; In a query window inside of SSMS on the instance you wish to dump, execute &amp;ndash;&amp;gt; &amp;ldquo;SELECT SERVERPROPERTY(&amp;lsquo;PROCESSID&amp;rsquo;)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;4.&amp;nbsp; Get the process ID from the SQL Server Errorlog.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Now that you have the PID, you can use one of the following ways to create the dump:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: xx-small;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-size: small;"&gt;Method 1 (Using SqlDumper)&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The &lt;span style="text-decoration: underline;"&gt;most common way&lt;/span&gt;&#xD;
 (and the way used internally by SQL Server) is to run SqlDumper.exe.&amp;nbsp;&amp;nbsp; &#xD;
You will find SqlDumper.exe in the following directory for a default &#xD;
installation of SQL Server:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;C:\Program Files\Microsoft SQL Server\100\Shared&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The syntax of SqlDumper is as follows:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;SqlDumper&lt;/strong&gt; &amp;lt;process id (PID)&amp;gt; &amp;lt;thread id (TID)&amp;gt; &amp;lt;Flags:Minidump Flags&amp;gt; &amp;lt;SQLInfoPtr&amp;gt; &amp;lt;Dump Directory&amp;gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;more parameters can be seen with SqlDumper /?&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The common flags are as follows:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;0x0120&lt;/strong&gt; &amp;ndash; Minidump &#xD;
(this is a dump of just the stacks and loaded modules &amp;ndash; this is the &#xD;
smallest of the dump types &amp;ndash; this is normally the type of dump created &#xD;
automatically by SQL Server during AVs and other exceptions) &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;0x01100&lt;/strong&gt;&#xD;
 &amp;ndash; Full Dump (this dumps the entire process space &amp;ndash; this can be very &#xD;
large on a 64 bit system or any system with a large amount of memory &#xD;
assigned to SQL Server) &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;0x8100&lt;/strong&gt; &amp;ndash; Filtered Dump (a filtered dump is a dump of all of Stolen Memory plus certain areas of the buffer pool)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;NOTICE:&amp;nbsp; SQLDumper can be used to dump ANY user mode process &amp;ndash; not just SQL Server.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Some examples for SQLServer running under SPID 4024 to c:\temp:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Minidump:&amp;nbsp; sqldumper 4024 0 0x0120 0 c:\temp &lt;br /&gt;Full Dump:&amp;nbsp; sqldumper 4024 0 0x01100 0 c:\temp &lt;br /&gt;Filtered Dump:&amp;nbsp; sqldumper 4024 0 0x8100 0 c:\temp&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The dump file will have the naming convention of:&amp;nbsp;&amp;nbsp; SQLDmpr####.mdmp (i.e.&amp;nbsp; SQLDmpr0001.mdmp)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: xx-small;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-size: small;"&gt;Method 2 (Using a debugger)&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;To dump SQL Server from WINDBG or other debugger, attach the debugger to the process using the PID:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/askjay/WindowsLiveWriter/HowcanIcreateadumpofSQLServer_398/image_2.png"&gt;&lt;span style="font-size: small;"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" src="http://blogs.msdn.com/blogfiles/askjay/WindowsLiveWriter/HowcanIcreateadumpofSQLServer_398/image_thumb.png" alt="image" width="431" height="533" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Once connected, just use the .dump command which has the following syntax:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Options are: &lt;br /&gt;&amp;nbsp; /a - Create dumps for all processes (requires -u) &lt;br /&gt;&amp;nbsp; /b[a] - Package dump in a CAB and delete dump &lt;br /&gt;&amp;nbsp; /c &amp;lt;comment&amp;gt; - Add a comment (not supported in all formats) &lt;br /&gt;&amp;nbsp; /j &amp;lt;addr&amp;gt; - Provide a JIT_DEBUG_INFO address &lt;br /&gt;&amp;nbsp; /f - Create a legacy style full dump &lt;br /&gt;&amp;nbsp; /m[acdfFhiprRtuw] - Create a minidump (default) &lt;br /&gt;&amp;nbsp; /o - Overwrite any existing file &lt;br /&gt;&amp;nbsp; /u - Append unique identifier to dump name&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&amp;ldquo;.dump /ma&amp;rdquo; is the recommend method of creating a complete memory dump of a user mode process. &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;So, to create a complete memory dump of the SQL Server to c:\temp, execute the following:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;.dump /ma c:\temp\sqldump.dmp&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: xx-small;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-size: small;"&gt;Method 3 (From within SQL Server)&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;From inside SQL Server, you can &#xD;
create a dump using two different methods.&amp;nbsp; First, to create a manual &#xD;
dump immediately, use the following undocumented command:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;DBCC STACKDUMP&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;This will create a memory dump in the&#xD;
 LOG directory of your SQL Server instance installation.&amp;nbsp; To enable this&#xD;
 method to create a FULL DUMP, you must turn on trace flags 2544 and &#xD;
2546:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;dbcc traceon(2544, -1) &lt;br /&gt;go &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;dbcc traceon(2546, -1) &lt;br /&gt;go &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;dbcc stackdump&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;To create only a minidump, enable trace flag 2546.&amp;nbsp; To create a full-filtered dump, use trace flag 2551.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;You can use the undocumented DBCC &#xD;
DUMPTRIGGER command to enable SQL Server to create a dump on the &#xD;
occurrence of an error.&amp;nbsp; You can use the following to enable a full dump&#xD;
 on error 802 (There is insufficient memory available in the buffer &#xD;
pool):&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;-- turn on TFs for full dump &lt;br /&gt;dbcc traceon(2544, -1) &lt;br /&gt;go &lt;br /&gt;dbcc traceon(2546, -1) &lt;br /&gt;go &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;-- set DUMP TRIGGER for exception 802 &lt;br /&gt;dbcc dumptrigger('set', 802) &lt;br /&gt;go &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;-- view exceptions set for DUMP TRIGGER &lt;br /&gt;dbcc traceon(3604, -1) &lt;br /&gt;go &lt;br /&gt;dbcc dumptrigger('display') &lt;br /&gt;go &lt;br /&gt;dbcc traceoff(3604, -1) &lt;br /&gt;go &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;-- Turn off dumptrigger for exception 802 &lt;br /&gt;dbcc dumptrigger('clear', 802) &lt;br /&gt;go&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Finally, you can also use the &amp;ndash;y &#xD;
parameter on SQL Server startup to achieve the same functionality as SQL&#xD;
 Server&amp;rsquo;s DBCC DUMPTRIGGER.&amp;nbsp;&amp;nbsp; For more information refer to:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="http://blogs.msdn.com/psssql/archive/2008/01/10/how-it-works-sql-server-engine-error-messages.aspx" href="http://blogs.msdn.com/psssql/archive/2008/01/10/how-it-works-sql-server-engine-error-messages.aspx"&gt;&lt;span style="font-size: small;"&gt;http://blogs.msdn.com/psssql/archive/2008/01/10/how-it-works-sql-server-engine-error-messages.aspx&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;One method not covered in this post is to create the dump from within Task Manager as seen here:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/askjay/WindowsLiveWriter/HowcanIcreateadumpofSQLServer_398/image_4.png"&gt;&lt;span style="font-size: small;"&gt;&lt;img style="border-width: 0px; display: inline;" title="image" src="http://blogs.msdn.com/blogfiles/askjay/WindowsLiveWriter/HowcanIcreateadumpofSQLServer_398/image_thumb_1.png" alt="image" width="695" height="312" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;I am not a big fan of this method &#xD;
since you have little control over it.&amp;nbsp; It will create a full dump &#xD;
inside your user profile by default.&amp;nbsp;&amp;nbsp; It is also only available on &#xD;
Windows 2008 and Windows 2008 R2 (or Vista and Windows 7).&amp;nbsp; However, it &#xD;
is yet another way to dump the SQL Server process.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;- Jay&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nzperfect/aggbug/2334594.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nzperfect/archive/2012/02/01/2334594.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nzperfect/archive/2011/12/01/2270427.html</id><title type="text">在发布订阅中增加rowversion数据类型字段引发错误(or bug)</title><summary type="text">考虑这样的场景，现在每天要同步更新的数据，为了记录哪些数据发生过变更，需要对表添加一个rowversion列来标识被更新过。恰好这个表比较大，而且有发布订阅。由于该字段对于订阅表来讲，无实际意义，而且添加一个有默认值的不可为空的8字节字段，会产生数据空间分配，或许带来大量的页拆分，对IO压力会加大，所以考虑将此表的发布项暂时改为不支持架构复制，等添加完该字段后，再将其改为支持架构复制。下面来做这个测试：1.下面是一个正常的事务发布，将DB_1中的T_1发布到DB_2的T_1表中。2.修改发布项DBrepTEST关于架构复制的选项，设置为不支持DECLARE @publication AS sy</summary><published>2011-12-01T05:19:00Z</published><updated>2011-12-01T05:19:00Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nzperfect/archive/2011/12/01/2270427.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/archive/2011/12/01/2270427.html"/><content type="html">&lt;p&gt;考虑这样的场景，现在每天要同步更新的数据，为了记录哪些数据发生过变更，需要对表添加一个rowversion列来标识被更新过。恰好这个表比较大，而且有发布订阅。由于该字段对于订阅表来讲，无实际意义，而且添加一个有默认值的不可为空的8字节字段，会产生数据空间分配，或许带来大量的页拆分，对IO压力会加大，所以考虑将此表的发布项暂时改为不支持架构复制，等添加完该字段后，再将其改为支持架构复制。&lt;/p&gt;&#xD;
&lt;p&gt;下面来做这个测试：&lt;/p&gt;&#xD;
&lt;p&gt;1.下面是一个正常的事务发布，将DB_1中的T_1发布到DB_2的T_1表中。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011120113490287.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2.修改发布项DBrepTEST关于架构复制的选项，设置为不支持&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; sysname&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBrepTEST&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;USE&lt;/span&gt; DB_1&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; sp_changepublication &lt;br /&gt;  &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #008000;"&gt;@property&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;replicate_ddl&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #008000;"&gt;@value&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;3.然后，添加一个字段，类型为rowversion&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;use&lt;/span&gt; DB_1&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;alter&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; t_1 &lt;span style="color: #0000ff;"&gt;add&lt;/span&gt; rv rowversion&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;4.经过观察，发布订阅一切正常，该字段并未被创建在订阅库DB_2上&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011120113491897.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;5.我们在另外一个进程开始一个sql，向表DB_1.dbo.T_1 insert data.&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&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;waitfor&lt;/span&gt; delay &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;00:00:01&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; DB_1.dbo.T_1(name)&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;a&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;6.发现数据已同步到DB_2.dbo.T_1，但rv字段并未被同步，现在一切正常&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011120113492965.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;7.现在将发布项DBrepTEST修改回支持架构复制&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; sysname&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBrepTEST&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;USE&lt;/span&gt; DB_1&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; sp_changepublication &lt;br /&gt;  &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #008000;"&gt;@property&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;replicate_ddl&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #008000;"&gt;@value&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;8.然后，此时向表DB_1.dbo.T_1新加一个int类型字段&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;use&lt;/span&gt; DB_1&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;alter&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; t_1 &lt;span style="color: #0000ff;"&gt;add&lt;/span&gt; age &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;9.此时发布订阅出错&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011120113494430.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011120113495426.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011120113500415.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;出错文字为：&lt;br /&gt;Command attempted:&lt;br /&gt;if @@trancount &amp;gt; 0 rollback tran&lt;br /&gt;(Transaction sequence number: &lt;strong&gt;0x000000580000013C000100000000&lt;/strong&gt;, Command ID: 6)&lt;br /&gt;&lt;br /&gt;Error messages:&lt;br /&gt;A DDL change has been replicated. (Source: MSSQL_REPL, Error number: MSSQL_REPL27332)&lt;br /&gt;Get help: http://help/MSSQL_REPL27332&lt;br /&gt;&lt;strong&gt;列名 'rv' 无效&lt;/strong&gt;。 (Source: MSSQLServer, Error number: 207)&lt;br /&gt;Get help: http://help/207&lt;br /&gt;10.由上面的信息，可以看出此时是由于在订阅库上找不到rv这个列造成的，为了确定这一点，我们看下这个事务执行的是什么&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;use&lt;/span&gt; distribution&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt; sp_browsereplcmds &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;0x000000580000013C000100000000&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: #ff0000;"&gt;0x000000580000013C000100000000&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;11.由10的结果中的command列，得到如下需要应用到订阅库的t-sql&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;T_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;add&lt;/span&gt; age &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;object_id&lt;/span&gt;(N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[dbo].[sp_MSins_dboT_1]&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: #ff0000;"&gt;P&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;) &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;      &lt;span style="color: #0000ff;"&gt;drop&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;proc&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;sp_MSins_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;object_id&lt;/span&gt;(N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo.MSreplication_objects&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&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: #0000ff;"&gt;null&lt;/span&gt;      &lt;span style="color: #0000ff;"&gt;delete&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; dbo.MSreplication_objects &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;object_name&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;sp_MSins_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&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: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;sp_MSins_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;20&lt;/span&gt;), &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&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; &lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;T_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;( &lt;br /&gt;  &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;rv&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;age&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;br /&gt; ) &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; ( &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c1&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c2&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;default&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c3&lt;/span&gt; )  &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;   &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;columnproperty&lt;/span&gt;(&lt;span style="color: #ff00ff;"&gt;object_id&lt;/span&gt;(N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo.MSreplication_objects&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;), N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;article&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: #ff0000;"&gt;AllowsNull&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&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: #0000ff;"&gt;null&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_executesql       &lt;span style="color: #008000;"&gt;@statement&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt;           N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;insert dbo.MSreplication_objects (object_name, publisher, publisher_db, publication, article, object_type)               values           (@object_name, @publisher, @publisher_db, @publication, @article, &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;P&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: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@parameters&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt;           N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;@object_name sysname, @publisher sysname, @publisher_db sysname, @publication sysname, @article sysname&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@object_n&lt;/span&gt;&lt;br /&gt;ame &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;sp_MSins_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@publisher&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;mySrv\SQL2008&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@publisher_db&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DB_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBrepTEST&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@article&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;T_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="color: #008080;"&gt;--&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;object_id&lt;/span&gt;(N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[dbo].[sp_MSdel_dboT_1]&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: #ff0000;"&gt;P&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;) &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;      &lt;span style="color: #0000ff;"&gt;drop&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;proc&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;sp_MSdel_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;object_id&lt;/span&gt;(N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo.MSreplication_objects&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&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: #0000ff;"&gt;null&lt;/span&gt;      &lt;span style="color: #0000ff;"&gt;delete&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; dbo.MSreplication_objects &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;object_name&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;sp_MSdel_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&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: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;sp_MSdel_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@pkc1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;   &lt;br /&gt; &lt;span style="color: #0000ff;"&gt;delete&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;T_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;@pkc1&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold;"&gt;@@rowcount&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;      &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold;"&gt;@@microsoftversion&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;0x07320000&lt;/span&gt;          &lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_MSreplraiserror &lt;span style="color: #800000; font-weight: bold;"&gt;20598&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;   &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;columnproperty&lt;/span&gt;(&lt;span style="color: #ff00ff;"&gt;object_id&lt;/span&gt;(N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo.MSreplication_objects&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;), N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;article&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: #ff0000;"&gt;AllowsNull&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&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: #0000ff;"&gt;null&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_executesql       &lt;span style="color: #008000;"&gt;@statement&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt;           N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;insert dbo.MSreplication_objects (object_name, publisher, publisher_db, publication, article, object_type)               values           (@object_name, @publisher, @publisher_db, @publication, @article, &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;P&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: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@parameters&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt;           N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;@object_name sysname, @publisher sysname, @publisher_db sysname, @publication sysname, @article sysname&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@object_n&lt;/span&gt;&lt;br /&gt;ame &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;sp_MSdel_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@publisher&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;mySrv\SQL2008&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@publisher_db&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DB_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBrepTEST&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@article&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;T_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="color: #008080;"&gt;--&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;object_id&lt;/span&gt;(N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[dbo].[sp_MSupd_dboT_1]&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: #ff0000;"&gt;P&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;) &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;      &lt;span style="color: #0000ff;"&gt;drop&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;proc&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;sp_MSupd_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;object_id&lt;/span&gt;(N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo.MSreplication_objects&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&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: #0000ff;"&gt;null&lt;/span&gt;      &lt;span style="color: #0000ff;"&gt;delete&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; dbo.MSreplication_objects &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;object_name&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;sp_MSupd_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&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: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;sp_MSupd_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;20&lt;/span&gt;) &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@pkc1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@bitmap&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;binary&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;)  &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;   &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;update&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;T_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;case&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;(&lt;span style="color: #008000;"&gt;@bitmap&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;) &lt;span style="color: #808080;"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;when&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;then&lt;/span&gt; &lt;span style="color: #008000;"&gt;@c2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;age&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;case&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;(&lt;span style="color: #008000;"&gt;@bitmap&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;) &lt;span style="color: #808080;"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;4&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;when&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;4&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;then&lt;/span&gt; &lt;span style="color: #008000;"&gt;@c3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;age&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;@pkc1&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold;"&gt;@@rowcount&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;      &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold;"&gt;@@microsoftversion&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;0x07320000&lt;/span&gt;          &lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_MSreplraiserror &lt;span style="color: #800000; font-weight: bold;"&gt;20598&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;  &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;columnproperty&lt;/span&gt;(&lt;span style="color: #ff00ff;"&gt;object_id&lt;/span&gt;(N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo.MSreplication_objects&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;), N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;article&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: #ff0000;"&gt;AllowsNull&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&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: #0000ff;"&gt;null&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_executesql       &lt;span style="color: #008000;"&gt;@statement&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt;           N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;insert dbo.MSreplication_objects (object_name, publisher, publisher_db, publication, article, object_type)               values           (@object_name, @publisher, @publisher_db, @publication, @article, &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;P&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: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@parameters&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt;           N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;@object_name sysname, @publisher sysname, @publisher_db sysname, @publication sysname, @article sysname&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@object_n&lt;/span&gt;&lt;br /&gt;ame &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;sp_MSupd_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@publisher&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;mySrv\SQL2008&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@publisher_db&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DB_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@publication&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DBrepTEST&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,      &lt;span style="color: #008000;"&gt;@article&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;T_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt; &lt;br /&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt; &lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;可以看到对于添加字段，会重新创建对表操作的三个proc，本例中，insert这个proc会将rv加入进来，并且值为default,如下所示，但由于该列并不存在于订阅中，所以就会报错了，由此造成分发中断，后续事务无法应用到订阅端。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&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: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;sp_MSins_dboT_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;20&lt;/span&gt;), &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&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; &lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;T_1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;( &lt;br /&gt;  &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;rv&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;age&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;br /&gt; ) &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; ( &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c1&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c2&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;default&lt;/span&gt;, &lt;br /&gt;    &lt;span style="color: #008000;"&gt;@c3&lt;/span&gt; )  &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;12.虽然可以通过在订阅端手工端建一个rv列，将其设置为可为null的&lt;span&gt;&lt;span &gt;varbinary(8)&lt;/span&gt;&lt;/span&gt;类型，但这个列对于订阅并没有实际意义。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;use&lt;/span&gt; DB_2&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;alter&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; t_1 &lt;span style="color: #0000ff;"&gt;add&lt;/span&gt; rv &lt;span style="color: #0000ff;"&gt;varbinary&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;8&lt;/span&gt;) &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;总结，经过测试，发现当添加其它类型字段，并设置为有默认值且not null时，不会有此错误出现，目前发现仅是rowversion类型列，不知是否为SQL Server bug.&lt;br /&gt;测试环境：windows server 2003 enterprise 32bit sql server 2008 sp2 standard 32bit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nzperfect/aggbug/2270427.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nzperfect/archive/2011/12/01/2270427.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nzperfect/archive/2011/11/28/2265921.html</id><title type="text">[荐][转]SQL SERVER SQLOS的任务调度</title><summary type="text">【介绍】SQL Server 通过WORKER, SCHEDULER, TASK等来对任务进行调度和处理。了解这些概念，对于了解SQL Server 内部是如何工作，是非常有帮助的。通常来讲，SCHEDULER个数是跟CPU个数相匹配的 。除了几个系统的SCHEDULER以外，每一个SCHEDULER都映射到一个CPU，如下面的查询结果所示，我们有四个CPU，也就有相应四个SCHEDULER。而WORKER (又称为WORKER THREAD), 则是工作线程。在一台服务器上，我们可以有多个工作线程。因为每一个工作线程要耗费资源，所以，SQL Server有一个最大工作线程数。一个TASK进来</summary><published>2011-11-28T03:03:00Z</published><updated>2011-11-28T03:03:00Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nzperfect/archive/2011/11/28/2265921.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/archive/2011/11/28/2265921.html"/><content type="html">&lt;p&gt;【介绍】&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;p&gt;SQL Server 通过WORKER, SCHEDULER, TASK等来对任务进行调度和处理。了解这些概念，对于了解SQL Server 内部是如何工作，是非常有帮助的。&lt;/p&gt;&#xD;
&lt;p&gt;通常来讲，SCHEDULER个数是跟CPU个数相匹配的 。除了几个系统的SCHEDULER以外，每一个SCHEDULER都映射到一个CPU，如下面的查询结果所示，我们有四个CPU，也就有相应四个SCHEDULER。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112811060825.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;而WORKER (又称为WORKER THREAD), 则是工作线程。在一台服务器上，我们可以有多个工作线程。因为每一个工作线程要耗费资源，所以，SQL Server有一个最大工作线程数。一个TASK进来，系统会给它分配一个工作线程进行处理。但是当所有的工作线程都在忙，而且已经达到了最大工作线程数，SQL Server就要等待，直到有一个忙的工作线程被释放。最大工作线程数可以通过下面的查询得到。SQL SERVER并不是一开始就把这些所有的工作线程都创建，而是依据需要而创建。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112811062152.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;TASK是由BATCH而来。我们知道，一个连接，可以包含多个BATCH，而每个BATCH则可以分解成多个TASK。如下面某一个连接要做的事情。这个连接要做的有两个BATCH，而每个BATCH，如SELECT * FROM TABLE_B，因为可以支持并行化查询，所以可能会被分解成多个TASK。具体BATCH怎么分解成TASK，以及分解成多少个，则是由SQL Server内部决定的。&lt;/p&gt;&#xD;
&lt;p&gt;INSERT INTO TABLE_B VALUES (&amp;lsquo;aaa&amp;rsquo;)&lt;br /&gt;GO&lt;br /&gt;SELECT * FROM TABLE_B&lt;br /&gt;GO&lt;/p&gt;&#xD;
&lt;p&gt;【关系】&lt;/p&gt;&#xD;
&lt;p&gt;我们初步了解了Connection, Batch, Task, Worker, Scheduler, CPU这些概念，那么，它们之间的关系到底是怎么样呢？&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112811064067.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如上图所示，左边是很多连接，每个连接有一个相应的SPID，只要用户没有登出，或者没有timeout, 这个始终是存在的。标准设置下，对于用户连接数目，是没有限制的。&lt;/p&gt;&#xD;
&lt;p&gt;在每一个连接里，我们可能会有很多batch，在一个连接里，batch都是按顺序的。只有一个batch执行完了，才会执行下面一个batch。因为有很多连接，所以从SQL Server层面上看，同时会有很多个batch。&lt;/p&gt;&#xD;
&lt;p&gt;SQL Server会做优化，每一个batch，可能会分解成多个task以支持如并行查询。这样，在SQL层面上来看，同时会有很多个TASK。&lt;/p&gt;&#xD;
&lt;p&gt;SQL Server 上，每一个CPU通常会对应一个Scheduler, 有几个额外的系统的Scheduler，只是用来执行一些系统任务。对用户来讲，我们只需要关心User Scheduler就可以了。如果有4个CPU的话，那么通常就会有4个User Scheduler。&lt;/p&gt;&#xD;
&lt;p&gt;每个Scheduler上，可以有多个worker对应。Worker是真正的执行单元，Scheduler（对CPU的封装）是执行的地方。Worker的总数受max worker thread限制。每一个worker在创建的时候，自己需要申请2M内存空间。如果max worker thread为1024，并且那些worker全部创建的话，至少需要2G空间。所以太多的worker，会占用很多系统资源。&lt;/p&gt;&#xD;
&lt;p&gt;【跟踪】&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;我们了解了Connection, Batch, Task, Worker, Scheduler, CPU之间的关系，下面我们用DMV跟踪一下运作的流程。&lt;/p&gt;&#xD;
&lt;p&gt;步骤一：&lt;/p&gt;&#xD;
&lt;p&gt;执行下面的脚本，创建一个测试数据库和测试数据表&lt;/p&gt;&#xD;
&lt;p&gt;CREATE DATABASE TEST&lt;br /&gt;go&lt;br /&gt;use TEST&lt;br /&gt;go&lt;/p&gt;&#xD;
&lt;p&gt;CREATE TABLE TEST&lt;br /&gt;(ID int,&lt;br /&gt; name nvarchar(50)&lt;br /&gt;)&lt;br /&gt;INSERT INTO TEST VALUES (1, 'aaa')&lt;/p&gt;&#xD;
&lt;p&gt;步骤二：&lt;br /&gt;打开一个查询窗口，执行下面的语句，注意，我们这里并没有commit transaction.&lt;/p&gt;&#xD;
&lt;p&gt;begin tran&lt;br /&gt;update TEST set name='bbb' where [ID] = 1&lt;/p&gt;&#xD;
&lt;p&gt;步骤三：&lt;br /&gt;打开另外一个窗口，执行下面的语句，我们会看到，下面的查询会一直在执行，因为我们前面的一个transaction并没有关闭。从查询窗口，我们可以看到，下面语句执行的SPID为58&lt;/p&gt;&#xD;
&lt;p&gt;SELECT * FROM TEST&lt;/p&gt;&#xD;
&lt;p&gt;步骤四：查看连接。&lt;/p&gt;&#xD;
&lt;p&gt;从下面的查询来看，我们的连接对应的SPID是58，被block住了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112811084212.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;步骤五：查看batch&lt;/p&gt;&#xD;
&lt;p&gt;我们查看SQL Profiler, 看到我们的Batch是SELECT * FROM TEST&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112811085639.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;步骤六：查看TASK&lt;/p&gt;&#xD;
&lt;p&gt;用下面的DMV, 我们可以看到，针对SESSION_ID=58的，只有一个task. (地址为0x0064F048), 而针对该TASK的worker地址为: 0x803081A0。同时我们也可以看到该worker运行在Scheduler 0上面。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112811091440.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;步骤七：查看WORKER&lt;/p&gt;&#xD;
&lt;p&gt;从下面的查询可以知道，这个WORKER已经执行了5291个task了。这个worker相应的Scheduler地址是0x00932080&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112811093617.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;步骤八：查看SCHEDULER&lt;/p&gt;&#xD;
&lt;p&gt;从下面的查询可以得知，Scheduler_address (0x00932080) 相应的CPU_ID是0。在我们的系统上，有4个CPU, 编号分别为0， 1， 2， 3. 但是有7个SCHEDULER, 其中3个是SYSTEM SCHEDULER, 4个是USER SCHEDULER。在每个SCHEDULER上，有相应的WORKER数目。因为WORKER是根据需要而创建的，所以，在每个SCHEDULER上，目前WORKER数目很少。而且其中有些WORKER还处于SLEEPING状态。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112811095672.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;【应用】&lt;/p&gt;&#xD;
&lt;p&gt;我们了解了SQL SERVER任务调度的机制，那么有些问题，就会更加清楚。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;设置MAXDOP&lt;/strong&gt;&lt;strong&gt;的作用&lt;/strong&gt;。MAXDOP=1的话，可以使得一个BATCH只对应一个TASK。如果一个BATCH产生多个TASKS，那么TASK之间的协调，等待等等，将是很大的开销。把MAXDOP设小，能同时减少WORKER的使用量。所以，如果我们看到等待类型为CXPACKET的话，那么我们可以设置MAXDOP，减少并行度。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;比较大的SPID&lt;/strong&gt;。如果我们看到SPID的号码非常大，如超过1000, 那么通常表明，我们系统有很严重的BLOCKING。SQL SERVER不对连接数做限制，但是对于WORKER数，是有限制的。缺省情况下，最大个数如下：&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Number of CPUs&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;32bit&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;&lt;strong&gt;64 bit&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;&amp;lt;=4 processors&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;256&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;512&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;8 processors&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;288&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;576&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;16 processors&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;352&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;704&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;32 processors&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;480&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="213"&gt;&#xD;
&lt;p&gt;960&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;对于很大的SPID编号，通常表明，我们的WORKER数是很高的。这种情况比较危险，如果一个新的连接进来，可能没有空闲WORKER来处理这个连接。在CLUSTER环境下，ISALIVE检查会失败，会导致SQL SERVER做FAILOVER。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;NON-YIELDING SCHEDULER&lt;/strong&gt;错误。我们有时候会看到SQL Server会报一个17883错误， NON-YIELDING SCHEDULER。这个错误指的是，在一个SCHEDULER上，会有多个WORKER，它们以友好的方式，互相占用一会儿SCHEDULER资源。某个WORKER占用SCHEDULER后，执行一段时间，会做YIELD，也就是退让，把SCHEDULER资源让出来，让其他WORKER去使用。如果某一个WORKER出于某种原因，不退让SCHEDULER资源，导致其他WORKER没有机会运行，这种现象叫NON-YIELDING SCHEDULER。出现这种情况，SQL SERVER有自动检测机制，会打一个DUMP出来。我们需要进一步分析DUMP为什么该WORKER不会YIELD。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;WORKER &lt;/strong&gt;&lt;strong&gt;用完&lt;/strong&gt;。我们可以做一个小实验。我们在一台32位机器上，创建上面提及的测试数据库，并且，开启一个同样的未关闭transaction的update语句。&lt;/p&gt;&#xD;
&lt;p&gt;然后执行下面的程序。下面的程序会开启256个连接到SQL Server, 这256个连接由于前面的transaction未闭合，都处于BLOCKING状态。&lt;/p&gt;&#xD;
&lt;p&gt;using System;&lt;br /&gt;using System.Diagnostics;&lt;br /&gt;namespace WORKER&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i=0; i&amp;lt;256; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OpenConnection();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void OpenConnection()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcessStartInfo startInfo = new ProcessStartInfo();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; startInfo.FileName = "sqlcmd.exe";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; startInfo.Arguments = " -E -S SERVERNAME -d TEST -q \" SELECT * FROM TEST \"";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Process.Start(startInfo);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;查询SELECT * FROM sys.dm_os_tasks这时候我们发现有278个TASK，而查询sys.dm_os_schedulers 我们发现有两个CPU, 因此有两个用户SCHEDULER, 每个SCHEDULER上，有128个workers. 加起来有256个WORKERS。针对两个CPU的架构，我们缺省最大的WORKER数是256。所以已经到了极限了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112811113692.png" alt="" /&gt;&lt;br /&gt;这时候，我们新开启一个连接，会发现SQL Server连不上，并报如下错误:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112811114946.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这是因为WORKER用完的缘故。新的连接无法获得一个WORKER来做login process。所以导致连接失败。在群集环境下，如果连接不上SQL Server, ISALIVE检查会失败，会引起SQL Server FAILOVER。所有的连接都会被强迫中止，并且SQL Server会在新结点上重新启动。针对这种情况，我们可以修改提高MAX WORKER THREAD，但是并不能最终解决问题，由于BLOCKING缘故，新的连接会迅速积累，一直把MAX WORKER THREAD用完，所以这时候，我们应该检查BLOCKING。使得task能及时完成，释放WORKER。&lt;/p&gt;&#xD;
&lt;p&gt;【总结】&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;SQL Server的任务调度使得SQL SERVER能够以最快方式处理用户发过来的请求。了解SQL SERVER的任务调度过程，对于我们调整系统性能是非常有帮助的。如适当增加MAX WORKER THREAD，调整MAXDOP，去除BLOCKING等等，了解这些概念，会使得我们的调整更有目的性。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;原文：&lt;a href="http://blogs.msdn.com/b/apgcdsd/archive/2011/11/24/sql-server-sqlos.aspx" target="_blank"&gt;http://blogs.msdn.com/b/apgcdsd/archive/2011/11/24/sql-server-sqlos.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nzperfect/aggbug/2265921.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nzperfect/archive/2011/11/28/2265921.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nzperfect/archive/2011/11/25/2263264.html</id><title type="text">关于Blocked Process Report 一个让人迷惑的问题分析</title><summary type="text">首先看下面这段代码，可以看出：blocked-process是被阻塞的进程，执行的sql是select * from temp1blocking-process是正在产生阻塞的进程，执行的sql是select * from temp1 with(nolock)如果你偶尔抓到了这样的report，肯定会奇怪吧，为什么呢？理论下面的sql不会对上面的sql产生阻塞。&amp;lt;blocked-process-report&amp;gt; &amp;lt;blocked-process&amp;gt; &amp;lt;process id=&amp;quot;process3d92550&amp;quot; taskpriority=&amp;quot;0&amp;</summary><published>2011-11-25T06:55:00Z</published><updated>2011-11-25T06:55:00Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nzperfect/archive/2011/11/25/2263264.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/archive/2011/11/25/2263264.html"/><content type="html">&lt;p&gt;首先看下面这段代码，可以看出：&lt;br /&gt;blocked-process是被阻塞的进程，执行的sql是select * from temp1&lt;br /&gt;blocking-process是正在产生阻塞的进程，执行的sql是select * from temp1 with(nolock)&lt;br /&gt;如果你偶尔抓到了这样的report，肯定会奇怪吧，为什么呢？理论下面的sql不会对上面的sql产生阻塞。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;blocked-process-report&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;blocked-process&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;process &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="process3d92550"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; taskpriority&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; logused&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; waitresource&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="RID: 2:1:218:0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; waittime&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="16975"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; ownerId&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="3047491"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; transactionname&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="SELECT"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; lasttranstarted&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="2011-11-25T14:24:52.210"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; XDES&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0x78ae138"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; lockMode&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="S"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; schedulerid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="4"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; kpid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="4676"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; status&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="suspended"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; spid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="69"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; sbid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; ecid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; priority&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; trancount&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; lastbatchstarted&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="2011-11-25T14:24:52.210"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; lastbatchcompleted&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="2011-11-25T14:12:08.507"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; clientapp&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Microsoft SQL Server Management Studio - 查询"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; hostname&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="R192249"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; hostpid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="9808"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; loginname&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="my\name"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; isolationlevel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="read committed (2)"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; xactid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="3047491"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; currentdb&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="2"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; lockTimeout&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="4294967295"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; clientoption1&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="671090784"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; clientoption2&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="390200"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;executionStack&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;frame &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;line&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; sqlhandle&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0x0200000088baad31046d031f04c8e7293882ce42521d893f"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;executionStack&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;inputbuf&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;select * from temp1   &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;inputbuf&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;process&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;blocked-process&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;blocking-process&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;process &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;status&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="sleeping"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; spid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="68"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; sbid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; ecid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; priority&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; trancount&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; lastbatchstarted&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="2011-11-25T14:25:00.617"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; lastbatchcompleted&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="2011-11-25T14:25:00.617"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; clientapp&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Microsoft SQL Server Management Studio - 查询"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; hostname&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="R192249"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; hostpid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="9808"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; loginname&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="my\name"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; isolationlevel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="read committed (2)"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; xactid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="3047423"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; currentdb&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="2"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; lockTimeout&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="4294967295"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; clientoption1&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="671090784"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; clientoption2&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="390200"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;executionStack &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;inputbuf&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;select * from temp1 with(nolock)   &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;inputbuf&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;process&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;blocking-process&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;blocked-process-report&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;下面将重现这个阻塞：&lt;/strong&gt;&lt;br /&gt;1.首先要设置blocked process shreshold为5秒，这样就可以trace到它：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;sp_configure &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;show advanced options&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt; ; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;RECONFIGURE&lt;/span&gt;; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt; &lt;br /&gt;sp_configure &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;blocked process threshold&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;5&lt;/span&gt; ; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;RECONFIGURE&lt;/span&gt;; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;2.创建一个trace，来抓取block:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt; Create a Queue&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008000;"&gt;@rc&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008000;"&gt;@TraceID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008000;"&gt;@maxfilesize&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bigint&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; &lt;span style="color: #008000;"&gt;@maxfilesize&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; &lt;span style="color: #008000;"&gt;@rc&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; sp_trace_create &lt;span style="color: #008000;"&gt;@TraceID&lt;/span&gt; output, &lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;, N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;D:\Tmp\1&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;, &lt;span style="color: #008000;"&gt;@maxfilesize&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color: #008000;"&gt;@rc&lt;/span&gt; &lt;span style="color: #808080;"&gt;!=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;goto&lt;/span&gt; error&lt;br /&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt; Client side File and Table cannot be scripted&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt; Set the events&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008000;"&gt;@on&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bit&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; &lt;span style="color: #008000;"&gt;@on&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_trace_setevent &lt;span style="color: #008000;"&gt;@TraceID&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;137&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;15&lt;/span&gt;, &lt;span style="color: #008000;"&gt;@on&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_trace_setevent &lt;span style="color: #008000;"&gt;@TraceID&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;137&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;, &lt;span style="color: #008000;"&gt;@on&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_trace_setevent &lt;span style="color: #008000;"&gt;@TraceID&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;137&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;13&lt;/span&gt;, &lt;span style="color: #008000;"&gt;@on&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt; Set the Filters&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008000;"&gt;@intfilter&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008000;"&gt;@bigintfilter&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bigint&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt; Set the trace status to start&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_trace_setstatus &lt;span style="color: #008000;"&gt;@TraceID&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt; display trace id for future references&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; TraceID&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TraceID&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;goto&lt;/span&gt; finish&lt;br /&gt;error: &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; ErrorCode&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #008000;"&gt;@rc&lt;/span&gt;&lt;br /&gt;finish: &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;go&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;3.创建测试表并插入数据：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;use&lt;/span&gt; tempdb&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;create&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; temp1&lt;br /&gt;(rowid &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; temp1 &lt;span style="color: #0000ff;"&gt;values&lt;/span&gt; (&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;go&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;4.新建两个会话查询，在会话一中执行：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;tran&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;update&lt;/span&gt; temp1&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; rowid &lt;span style="color: #808080;"&gt;=&lt;/span&gt; rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;select * from temp1 with(nolock)&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;rollback&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;5.在会话二中执行：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; temp1&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;6.然后再去会话一中执行&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; temp1 &lt;span style="color: #0000ff;"&gt;with&lt;/span&gt;(nolock)&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;7.此时会发现，会话二中的sql一直处在等待状态，稍等十几秒后，去会话一执行rollback，这样会话二方可查询出结果。&lt;/p&gt;&#xD;
&lt;p&gt;8.然后执行下面的sql，查看blocked process report:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;(TextData &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; xml), SPID, EndTime, Duration&lt;span style="color: #808080;"&gt;/&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1000&lt;/span&gt;&lt;span style="color: #808080;"&gt;/&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1000&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; fn_trace_gettable(N&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;D:\Tmp\1.trc&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;default&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; eventclass &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;137&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;此时就会出现本文最上面的blocked process report，让人误以为是select * from temp1 with(nolock)阻塞了select * from temp1.&lt;/p&gt;&#xD;
&lt;p&gt;9.删除测试数据并停止trace：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;drop&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; temp1&lt;br /&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;stop the trace&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_trace_setstatus &lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;delete the trace but leaves the file on the drive&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_trace_setstatus &lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;10.总结这个问题，是由于处于同一个事务内的两个sql分两次执行，造成了blocked process report只记录最后一个sql，这样就会另人产生误解，找到不问题所在，应该是需要注意的一个地方。&lt;/p&gt;&#xD;
&lt;p&gt;本文代码参考：&lt;a href="http://www.sqlservercentral.com/articles/Blocking/64474/" target="_blank"&gt;http://www.sqlservercentral.com/articles/Blocking/64474/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nzperfect/aggbug/2263264.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nzperfect/archive/2011/11/25/2263264.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nzperfect/archive/2011/11/22/2259023.html</id><title type="text">[荐]SAN Performance Tuning with SQLIO</title><summary type="text">原文：http://sqlserverpedia.com/wiki/SAN_Performance_Tuning_with_SQLIODownloading and Configuring SQLIO[Download SQLIO from Microsoft]Notice that I said SQLIO, not SQLIOSIM. Experienced database administrators will often direct you to SQLIOSIM because it&amp;#39;s easier to use and mimics SQL Server&amp;#39;s </summary><published>2011-11-22T08:45:00Z</published><updated>2011-11-22T08:45:00Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nzperfect/archive/2011/11/22/2259023.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/archive/2011/11/22/2259023.html"/><content type="html">&lt;p&gt;原文：&lt;a href="http://sqlserverpedia.com/wiki/SAN_Performance_Tuning_with_SQLIO" target="_blank"&gt;http://sqlserverpedia.com/wiki/SAN_Performance_Tuning_with_SQLIO&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span id="Downloading_and_Configuring_SQLIO" &gt;Downloading and Configuring SQLIO&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[&lt;a  href="http://www.microsoft.com/downloads/details.aspx?familyid=9a8b005b-84e4-4f24-8d65-cb53442d9e19&amp;amp;displaylang=en"&gt;Download SQLIO from Microsoft&lt;/a&gt;]&lt;/p&gt;&#xD;
&lt;p&gt;Notice that I said SQLIO, not SQLIOSIM. Experienced database administrators will often direct you to SQLIOSIM because it's easier to use and mimics SQL Server's disk activity patterns. Here's the catch: it won't necessarily test your SAN to its maximum potential. Your SAN team may indicate that if your SQLIOSIM results aren't fast enough, it's a SQL-related problem, not a SAN-related problem. They may use testing utilities from vendors that mimic results closer to what SQLIO will give you. We want to push the SAN's pedal to the metal and find out how fast it'll go in any situation.&lt;/p&gt;&#xD;
&lt;p&gt;After installing SQLIO, edit the param.txt file and change these two parameters:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;First parameter - the physical location of the testing file. Change the drive letter to point to the SAN drive you want to test, like T:\testfile.dat.&lt;/li&gt;&#xD;
&lt;li&gt;Last parameter - the size of the testing file in megabytes. Increase this to 20480 or larger. Ideally, you want it to be larger than your SAN's cache, because your real databases will be larger than the SAN's cache.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;After saving param.txt, run this at the command line in the same directory where SQLIO is installed in order to create the test file:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre &gt;sqlio -kW -s10 -fsequential -o8 -b8 -LS -Fparam.txt timeout /T 10&lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;When it finishes, your test file is created, and it's time to run our real tests.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span id="Testing_Your_SAN_Performance" &gt;Testing Your SAN Performance&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Instead of picking and choosing individual parameters to use, I like to take the shotgun approach: try every possible combination of random versus sequential, low and high numbers of threads, read versus write, etc. The below batch file will take all of the possibilities and run 'em all. Copy/paste this into a text file called SANTest.bat:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;sqlio -kW -t2 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o2 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o4 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o8 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o16 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o32 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o64 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o128 -frandom -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t2 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t4 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t8 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t16 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t32 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kW -t64 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t2 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t4 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t8 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t16 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t32 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o1 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o2 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o4 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o8 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o16 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o32 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o64 -fsequential -b64 -BH -LS Testfile.dat&lt;br /&gt;sqlio -kR -t64 -s120 -dM -o128 -fsequential -b64 -BH -LS Testfile.dat&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;Whew! And that's just one pass - if you want to do multiple passes of the same tests for consistency's sake, like to eliminate the chance that other servers are running on the same SAN and affecting your performance results, you would want to paste that same set of 200+ lines multiple times into your batch file.&lt;/p&gt;&#xD;
&lt;p&gt;Let's take the first line of the batch file and analyze what it's doing:&lt;/p&gt;&#xD;
&lt;pre &gt;sqlio -kW -t2 -s120 -dM -o1 -frandom -b64 -BH -LS Testfile.dat&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;The most important parameters are:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;-kW means writes (as opposed to reads)&lt;/li&gt;&#xD;
&lt;li&gt;-t2 means two threads&lt;/li&gt;&#xD;
&lt;li&gt;-s120 means test for 120 seconds&lt;/li&gt;&#xD;
&lt;li&gt;-dM means drive letter M&lt;/li&gt;&#xD;
&lt;li&gt;-o1 means one outstanding request (not piling up requests)&lt;/li&gt;&#xD;
&lt;li&gt;-frandom means random access (as opposed to sequential)&lt;/li&gt;&#xD;
&lt;li&gt;-b64 means 64kb IOs&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Do a find &amp;amp; replace in your text file and replace -dM with the drive letter of your choice. If you're testing on your S drive, for example, you would replace -dM with -dS.&lt;/p&gt;&#xD;
&lt;p&gt;Then go to the command prompt in the same directory as SQLIO is installed and type:&lt;/p&gt;&#xD;
&lt;p&gt;SANTEST.BAT &amp;gt; RESULTS.TXT&lt;/p&gt;&#xD;
&lt;p&gt;This will run our newly created batch file and dump the results into a text file. This will take a long time, like six hours or more, and it will be hammering your SAN. Don't run this on a production server, and don't even run it on the same SAN as a production server when the production server is under load because it may time out. I've had instances where this batch file has actually caused a SAN to restart itself, so use this with caution - preferably in a test lab or before your SAN goes live.&lt;/p&gt;&#xD;
&lt;p&gt;Hours later, when it finishes, you'll have a RESULTS.TXT file with lots of juicy metrics about your storage performance.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span id="Importing_SQLIO_Results_into_SQL_Server" &gt;Importing SQLIO Results into SQL Server&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Those text file results are cryptic - time to bring them into our favorite data analysis platform, Microsoft Access. Wait, I'm kidding, put the axe down - we'll import them into SQL Server.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span id="Script_to_Create_the_Tables_and_and_ETL_Stored_Procedure" &gt;Script to Create the Tables and and ETL Stored Procedure&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Before we start, create a database that you'll use for SQLIO data storage or designate an existing utility database that you'll use. This script requires SQL Server 2005 or newer, since it uses the varchar(max) field.&lt;/p&gt;&#xD;
&lt;p&gt;In that database, run the below script to create the tables for results storage:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; ANSI_NULLS &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; QUOTED_IDENTIFIER &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;SQLIO_Import&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;RowID&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;IDENTITY&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;) &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;ParameterRowID&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;ResultText&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: #ff0000;"&gt;varchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #ff00ff;"&gt;max&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt; &lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;PK_SQLIO_Import&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;KEY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CLUSTERED&lt;/span&gt; &lt;br /&gt;(&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;RowID&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ASC&lt;/span&gt;&lt;br /&gt;))&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;SQLIO_TestPass&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;TestPassID&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;IDENTITY&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;,&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;) &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;ServerName&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: #ff0000;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;) &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DriveQty&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DriveRPM&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DriveRaidLevel&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: #ff0000;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;10&lt;/span&gt;) &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;TestDate&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: #ff0000;"&gt;datetime&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;SANmodel&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: #ff0000;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;) &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;SANfirmware&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: #ff0000;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;PartitionOffset&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Filesystem&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: #ff0000;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;FSClusterSizeBytes&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;SQLIO_Version&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: #ff0000;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;20&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Threads&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;ReadOrWrite&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: #ff0000;"&gt;nchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;DurationSeconds&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;SectorSizeKB&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;IOpattern&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: #ff0000;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;IOsOutstanding&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Buffering&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: #ff0000;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;FileSizeMB&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;IOs_Sec&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: #ff0000;"&gt;decimal&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;18&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;MBs_Sec&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: #ff0000;"&gt;decimal&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;18&lt;/span&gt;, &lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;LatencyMS_Min&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;LatencyMS_Avg&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;LatencyMS_Max&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: #ff0000;"&gt;int&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;,&lt;br /&gt; &lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;PK_SQLIO_TestPass&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;KEY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CLUSTERED&lt;/span&gt; &lt;br /&gt;(&lt;br /&gt;    &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;TestPassID&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ASC&lt;/span&gt;&lt;br /&gt;))&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;br /&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: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;USP_Import_SQLIO_TestPass&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #008000;"&gt;@ServerName&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;),&lt;br /&gt;                &lt;span style="color: #008000;"&gt;@DriveQty&lt;/span&gt;           &lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt;,&lt;br /&gt;                &lt;span style="color: #008000;"&gt;@DriveRPM&lt;/span&gt;           &lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt;,&lt;br /&gt;                &lt;span style="color: #008000;"&gt;@DriveRaidLevel&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;10&lt;/span&gt;),&lt;br /&gt;                &lt;span style="color: #008000;"&gt;@TestDate&lt;/span&gt;           &lt;span style="color: #0000ff;"&gt;DATETIME&lt;/span&gt;,&lt;br /&gt;                &lt;span style="color: #008000;"&gt;@SANmodel&lt;/span&gt;           &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;),&lt;br /&gt;                &lt;span style="color: #008000;"&gt;@SANfirmware&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;),&lt;br /&gt;                &lt;span style="color: #008000;"&gt;@PartitionOffset&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt;,&lt;br /&gt;                &lt;span style="color: #008000;"&gt;@Filesystem&lt;/span&gt;         &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;),&lt;br /&gt;                &lt;span style="color: #008000;"&gt;@FSClusterSizeBytes&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INT&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;SET&lt;/span&gt; nocount &lt;span style="color: #0000ff;"&gt;off&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt; &lt;span style="color: #008000;"&gt;@TestDate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;IS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #008000;"&gt;@TestDate&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Getdate&lt;/span&gt;()&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: #008080;"&gt;/*&lt;/span&gt;&lt;span style="color: #008080;"&gt; Add a blank record to the end so the last test result is captured &lt;/span&gt;&lt;span style="color: #008080;"&gt;*/&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt; dbo.SQLIO_Import&lt;br /&gt;    (ParameterRowID, &lt;br /&gt;     ResultText)&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;VALUES&lt;/span&gt;&lt;br /&gt;    (&lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;,&lt;br /&gt;     &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;);&lt;br /&gt;                               &lt;br /&gt;  &lt;span style="color: #008080;"&gt;/*&lt;/span&gt;&lt;span style="color: #008080;"&gt; Update the ParameterRowID field for easier querying &lt;/span&gt;&lt;span style="color: #008080;"&gt;*/&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;UPDATE&lt;/span&gt; dbo.sqlio_import&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;    parameterrowid &lt;span style="color: #808080;"&gt;=&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: #800000; font-weight: bold;"&gt;1&lt;/span&gt; rowid&lt;br /&gt;                           &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;     dbo.sqlio_import parm&lt;br /&gt;                           &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;    parm.resulttext &lt;span style="color: #808080;"&gt;LIKE&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: #ff0000;"&gt;'&lt;/span&gt;&lt;br /&gt;                                    &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; parm.rowid &lt;span style="color: #808080;"&gt;&amp;lt;=&lt;/span&gt; upd.rowid&lt;br /&gt;                           &lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; rowid &lt;span style="color: #0000ff;"&gt;DESC&lt;/span&gt;)&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import upd&lt;br /&gt;         &lt;br /&gt;  &lt;span style="color: #008080;"&gt;/*&lt;/span&gt;&lt;span style="color: #008080;"&gt; Add new SQLIO_TestPass records from SQLIO_Import &lt;/span&gt;&lt;span style="color: #008080;"&gt;*/&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt; dbo.sqlio_testpass&lt;br /&gt;             (servername,&lt;br /&gt;              driveqty,&lt;br /&gt;              driverpm,&lt;br /&gt;              driveraidlevel,&lt;br /&gt;              testdate,&lt;br /&gt;              sanmodel,&lt;br /&gt;              sanfirmware,&lt;br /&gt;              partitionoffset,&lt;br /&gt;              filesystem,&lt;br /&gt;              fsclustersizebytes,&lt;br /&gt;              sqlio_version,&lt;br /&gt;              threads,&lt;br /&gt;              readorwrite,&lt;br /&gt;              durationseconds,&lt;br /&gt;              sectorsizekb,&lt;br /&gt;              iopattern,&lt;br /&gt;              iosoutstanding,&lt;br /&gt;              buffering,&lt;br /&gt;              filesizemb,&lt;br /&gt;              ios_sec,&lt;br /&gt;              mbs_sec,&lt;br /&gt;              latencyms_min,&lt;br /&gt;              latencyms_avg,&lt;br /&gt;              latencyms_max)&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;   &lt;span style="color: #008000;"&gt;@ServerName&lt;/span&gt;,&lt;br /&gt;           &lt;span style="color: #008000;"&gt;@DriveQty&lt;/span&gt;,&lt;br /&gt;           &lt;span style="color: #008000;"&gt;@DriveRPM&lt;/span&gt;,&lt;br /&gt;           &lt;span style="color: #008000;"&gt;@DriveRaidLevel&lt;/span&gt;,&lt;br /&gt;           &lt;span style="color: #008000;"&gt;@TestDate&lt;/span&gt;,&lt;br /&gt;           &lt;span style="color: #008000;"&gt;@SANmodel&lt;/span&gt;,&lt;br /&gt;           &lt;span style="color: #008000;"&gt;@SANfirmware&lt;/span&gt;,&lt;br /&gt;           &lt;span style="color: #008000;"&gt;@PartitionOffset&lt;/span&gt;,&lt;br /&gt;           &lt;span style="color: #008000;"&gt;@Filesystem&lt;/span&gt;,&lt;br /&gt;           &lt;span style="color: #008000;"&gt;@FSClusterSizeBytes&lt;/span&gt;,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;(resulttext,&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;sqlio &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;)&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impsqlio_version&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impsqlio_version.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; sqlio_version,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;LEFT&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; threads&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)))&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impthreads&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impthreads.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; threads,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Upper&lt;/span&gt;(&lt;span style="color: #ff00ff;"&gt;Substring&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;threads &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;8&lt;/span&gt;,&lt;br /&gt;                                   &lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;))&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impreadorwrite&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impreadorwrite.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; readorwrite,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Substring&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; for&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;4&lt;/span&gt;,&lt;br /&gt;                             (&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; secs &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; (&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; for&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;4&lt;/span&gt;)&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impdurationseconds&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impdurationseconds.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; durationseconds,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Substring&lt;/span&gt;(resulttext,&lt;span style="color: #800000; font-weight: bold;"&gt;7&lt;/span&gt;,(&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;KB&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;7&lt;/span&gt;)&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impsectorsizekb&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;4&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impsectorsizekb.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; sectorsizekb,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Substring&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;KB &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;,&lt;br /&gt;                             (&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; IOs&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; (&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;KB &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;3&lt;/span&gt;)&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impiopattern&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;4&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impiopattern.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; iopattern,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Substring&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;with &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;5&lt;/span&gt;,&lt;br /&gt;                             (&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; outstanding&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; (&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;with &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;5&lt;/span&gt;)&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impiosoutstanding&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;5&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impiosoutstanding.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; iosoutstanding,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;(&lt;span style="color: #ff00ff;"&gt;CAST&lt;/span&gt;(resulttext &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold;"&gt;50&lt;/span&gt;)),&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;buffering set to &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,&lt;br /&gt;                           &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;)&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impbuffering&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;6&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impbuffering.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; buffering,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Substring&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;size: &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;6&lt;/span&gt;,&lt;br /&gt;                             (&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; for &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; (&lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;(&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;size: &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;,resulttext)) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;9&lt;/span&gt;)&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impfilesizemb&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;7&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impfilesizemb.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; filesizemb,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;RIGHT&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Len&lt;/span&gt;(resulttext) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;10&lt;/span&gt;))&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impios_sec&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;11&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impios_sec.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; ios_sec,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;RIGHT&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Len&lt;/span&gt;(resulttext) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;10&lt;/span&gt;))&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import impmbs_sec&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;12&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impmbs_sec.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; mbs_sec,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;RIGHT&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Len&lt;/span&gt;(resulttext) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;17&lt;/span&gt;))&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import implatencyms_min&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;14&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; implatencyms_min.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; latencyms_min,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;RIGHT&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Len&lt;/span&gt;(resulttext) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;17&lt;/span&gt;))&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import implatencyms_avg&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;15&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; implatencyms_avg.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; latencyms_avg,&lt;br /&gt;           (&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;RIGHT&lt;/span&gt;(resulttext,(&lt;span style="color: #ff00ff;"&gt;Len&lt;/span&gt;(resulttext) &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;17&lt;/span&gt;))&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;   dbo.sqlio_import implatencyms_max&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;  imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;16&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; implatencyms_max.rowid) &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; latencyms_max&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;     dbo.sqlio_import imp&lt;br /&gt;           &lt;span style="color: #0000ff;"&gt;INNER&lt;/span&gt; &lt;span style="color: #808080;"&gt;JOIN&lt;/span&gt; dbo.sqlio_import impfulltest&lt;br /&gt;             &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; imp.rowid &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #800000; font-weight: bold;"&gt;20&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; impfulltest.rowid&lt;br /&gt;                &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; impfulltest.resulttext &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;    imp.rowid &lt;span style="color: #808080;"&gt;=&lt;/span&gt; imp.parameterrowid&lt;br /&gt;           &lt;span style="color: #008080;"&gt;/*&lt;/span&gt;&lt;span style="color: #008080;"&gt;AND (SELECT Substring(resulttext,(Charindex('size: ',resulttext)) + 6,&lt;br /&gt;                                 (Charindex(' for ',resulttext)) - (Charindex('size: ',resulttext)) - 9)&lt;br /&gt;                FROM   dbo.sqlio_import impfilesizemb&lt;br /&gt;                WHERE  imp.rowid + 7 = impfilesizemb.rowid) &amp;gt; 0 &lt;/span&gt;&lt;span style="color: #008080;"&gt;*/&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; imp.parameterrowid&lt;br /&gt;           &lt;br /&gt;  &lt;span style="color: #008080;"&gt;/*&lt;/span&gt;&lt;span style="color: #008080;"&gt; Empty out the ETL table &lt;/span&gt;&lt;span style="color: #008080;"&gt;*/&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;DELETE&lt;/span&gt; dbo.sqlio_import&lt;br /&gt;         &lt;br /&gt;  &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; nocount &lt;span style="color: #0000ff;"&gt;off&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;The script creates three things:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;A table called SQLIO_Import where our results will first be dumped from the text file before they're processed&lt;/li&gt;&#xD;
&lt;li&gt;A table called SQLIO_TestPass where our results will be permanently stored in a report-friendly format&lt;/li&gt;&#xD;
&lt;li&gt;A stored procedure called USP_Import_SQLIO_TestPass. The stored procedure takes the data from our imported text file, parses it, and inserts records into the SQLIO_TestPass table.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;The stored procedure expects these parameters, which it uses when inserting into SQLIO_TestPass. None of these have to be formatted a specific way - as long as they fit the SQL Server field definitions, they're fine:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;@ServerName NVARCHAR(50) - the name of the server you're using for testing. This is mostly useful for servers with locally attached storage as opposed to SAN storage.&lt;/li&gt;&#xD;
&lt;li&gt;@DriveQty INT - the number of drives in the array you're testing.&lt;/li&gt;&#xD;
&lt;li&gt;@DriveRPM INT - you might be testing 10k and 15k variations of the same setup. I suggest lumping drives into categories - don't try to differentiate between drives that report 10,080 RPM or other odd numbers - just stick with 5400, 10000, 150000, etc. For SSD, I prefer to use a number for the generation of SSD, like 1 or 2.&lt;/li&gt;&#xD;
&lt;li&gt;@DriveRaidLevel NVARCHAR(10) - raid 5, raid 0, raid 10, raid DP, etc. (Yes, there are vendor-specific RAID implementations that use letters instead of numbers.)&lt;/li&gt;&#xD;
&lt;li&gt;@TestDate DATETIME - the date you're running the tests. I include this as a parameter because sometimes I've run the same tests on a quarterly basis and I want to track whether things are changing over time.&lt;/li&gt;&#xD;
&lt;li&gt;@SANmodel NVARCHAR(50) - the type of SAN, such as an IBM DS4800 or EMC CX300.&lt;/li&gt;&#xD;
&lt;li&gt;@SANfirmware NVARCHAR(50) - the version of firmware, which can impact SAN performance.&lt;/li&gt;&#xD;
&lt;li&gt;@PartitionOffset INT - Windows systems can use DISKPART to offset their partitions.&lt;/li&gt;&#xD;
&lt;li&gt;@Filesystem NVARCHAR(50) - usually NTFS. Can be used to track testing different filesystems.&lt;/li&gt;&#xD;
&lt;li&gt;@FSClusterSizeBytes INT - the file system cluster size.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Now that our framework is in place, let's import our first round of results.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span id="Importing_the_Text_File_into_SQL_Server_2005" &gt;Importing the Text File into SQL Server 2005&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;In SQL Server Management Studio, right-click on the database where you want to store the SQLIO performance data and click Tasks, Import Data.&lt;/li&gt;&#xD;
&lt;li&gt;For Data Source, choose "Flat File Source". Browse to your results.txt file, and set the Format to Delimited, Text Qualifier to None, Header row delimiter to {CR}{LF}, and Header Rows to Skip to 0.&lt;/li&gt;&#xD;
&lt;li&gt;Click on the Advanced tab on the left, and there should only be one column, Column 0. Set the DataType to text stream. Click Next.&lt;/li&gt;&#xD;
&lt;li&gt;Your database server and storage database should be shown. Click Next.&lt;/li&gt;&#xD;
&lt;li&gt;For the Destination Table, choose SQLIO_Import and click Edit Mappings. Set the Column 0 destination to be ResultText. Click OK, and click Next.&lt;/li&gt;&#xD;
&lt;li&gt;Click Next until the wizard finishes and imports the data, and then close the wizard.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Open a new query and verify that the data was successfully imported by typing:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; dbo.SQLIO_Import&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;If there's no rows, something went wrong with the import process. Stop here and troubleshoot. Otherwise, execute the stored procedure to move the data into the reporting table, like this:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;EXECUTE&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&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: #ff0000;"&gt;USP_Import_SQLIO_TestPass&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt; &lt;br /&gt;   &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;MyServerName&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br /&gt;  ,&lt;span style="color: #800000; font-weight: bold;"&gt;10&lt;/span&gt;&lt;br /&gt;  ,&lt;span style="color: #800000; font-weight: bold;"&gt;15000&lt;/span&gt;&lt;br /&gt;  ,&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;RAID 10&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br /&gt;  ,&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;2008/5/6&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br /&gt;  ,&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;IBM DS4800&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br /&gt;  ,&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;6.62&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br /&gt;  ,&lt;span style="color: #800000; font-weight: bold;"&gt;1024&lt;/span&gt;&lt;br /&gt;  ,&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;NTFS&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;br /&gt;  ,&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;64000&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;The data will be parsed and inserted into the reporting table, which we can query:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; dbo.SQLIO_TestPass&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;Now, the data is arranged in a way that's easier for reporting.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span id="Analyzing_the_SQLIO_Results" &gt;Analyzing the SQLIO Results&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Start by analyzing the data to find the fastest SAN throughput:&lt;/p&gt;&#xD;
&lt;div id="highlighter_554386" &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; dbo.SQLIO_TestPass &lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; MBs_Sec &lt;span style="color: #0000ff;"&gt;DESC&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;code &gt;&lt;/code&gt;&lt;br /&gt;That column is the SAN's throughput. Notice the LatencyMS_Avg column, though, which indicates the milliseconds of latency. A high throughput number is not necessarily good if the system is taking a long time to respond. Look for five or so of the highest throughput numbers that represents a good balance of high throughput and low latency.&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;Then, look at the parameters that were used in order to achieve that throughput. Make a note of these, because if you need to do repeated throughput testing on your SAN to test different configurations, you can use these high-throughput configurations to run a much shorter testing pass. Instead of testing your SAN overnight, you can get a quick idea in a matter of minutes because you'll know what parameters tend to drive very high throughput on your SAN. You'll still want to test all parameters when possible, because changes to the SAN may affect how it handles other parameters, but this will give you a quick estimate of whether things are getting better or worse.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span id="More_Reading_About_SQLIO" &gt;More Reading About SQLIO&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Here's a few interesting links about other bloggers' experience with SQLIO:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;a  href="http://sqlblog.com/blogs/linchi_shea/default.aspx"&gt;Linchi Shea's Blog on SQL Server Storage&lt;/a&gt; - Linchi Shea does in-depth storage testing with different SANs and settings in order to wring the most performance out, and he explains his testing methodologies.&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a  href="http://blogs.mssqltips.com/blogs/chadboyd/archive/2008/03/16/ssd-and-sql-sqlio-performance.aspx"&gt;Solid State Drives and SQL&lt;/a&gt; - Chad Boyd tests a few drive configurations.&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a  href="http://sqlserverpedia.com/blog/podcasts/storage-area-networks-sans-101/"&gt;Storage Area Networks 101 Video&lt;/a&gt; - podcast on SQLServerPedia explaining the basics of SAN technology for database administrators.&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a  href="http://www.microsoft.com/whdc/archive/subsys_perf.mspx"&gt;Microsoft whitepaper on Disk Subsystem Performance for Windows&lt;/a&gt; - explains different raid methods, drive types, etc and how they impact performance&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a  href="http://social.technet.microsoft.com/wiki/contents/articles/sqlio-disk-subsystem-benchmark-tool-troubleshooting-hangs-and-errors.aspx"&gt;Resolving hangs and errors when using SQLIO&lt;/a&gt; - especially on Windows Server 2008 R2 or Windows 7.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;以下是我测试的Raid5 6块和9块的部分结果载图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112216521687.jpg" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/21914/2011112216523544.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nzperfect/aggbug/2259023.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nzperfect/archive/2011/11/22/2259023.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nzperfect/archive/2011/11/15/2249850.html</id><title type="text">[转]How to find who is using / eating up the Virtual Address Space on your SQL Server</title><summary type="text">Well, this is often a tricky situation, where you are running into Virtual Address Fragmentation and getting OOM (out-of-memory)errors in your SQL Server. More often than not there is confusion between physical memory pressure vs. virtual memory pressure. Adding more RAM is definitely not a solution</summary><published>2011-11-15T08:07:00Z</published><updated>2011-11-15T08:07:00Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nzperfect/archive/2011/11/15/2249850.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/archive/2011/11/15/2249850.html"/><content type="html">&lt;p&gt;Well, this is often a tricky situation, where you are running into Virtual Address Fragmentation and getting OOM (out-of-memory)&amp;nbsp;errors in your SQL Server. More often than not there is confusion between physical memory pressure vs. virtual memory pressure. Adding more RAM is definitely not a solution here!&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Here are some sample error messages you might have seen in your SQL Errorlog which will indicate if this is physical memory or virtual memory issue:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;SQL 2000&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;WARNING: Failed to reserve contiguous memory of Size= 65536.&lt;br /&gt;SQL Server could not spawn process_loginread thread. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;SQL 2005/2008&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;Failed Virtual Allocate Bytes: FAIL_VIRTUAL_RESERVE 122880&lt;br /&gt;&lt;br /&gt;Error: 701, Severity: 17, State: 123.&lt;br /&gt;There is insufficient system memory to run this query.&lt;br /&gt;&lt;br /&gt;As the errors above indicate, the problem is in reserving a fixed size in the &lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;virtual&lt;/span&gt;&lt;/strong&gt; address space of SQL Server. &lt;span style="text-decoration: underline;"&gt;Note:&lt;/span&gt; the size indicated above in Bytes. E.g. 65536/1024 = 64 KB&lt;br /&gt;&lt;br /&gt;Typical symptoms you would notice in these situations are:-&lt;br /&gt;&lt;br /&gt;1) Database&amp;nbsp;or Log&amp;nbsp;Backups might start failing&lt;br /&gt;2) You are unable to make a new connections to SQL.&lt;br /&gt;3) Certain jobs which require memory from non-BPool region will fail.&lt;br /&gt;&lt;br /&gt;Many a time, these problems go away automatically without any action taken. This indicates an intermittent problem when at a certain point in time; there was virtual memory pressure which resulted in above messages being printed to the SQL Errorlog.&lt;br /&gt;&lt;br /&gt;Dealing with VAS fragmentation or running out of VAS on SQL server 2000 was rather painful and required setting up additional debugging techniques to get down to the bottom of the issue. You might have used some of the following tools:-&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1) VMSTAT&lt;br /&gt;2) Debugging Tools for Windows (to capture a manual dump of sqlservr.exe)&lt;br /&gt;3) T2551 to generate a filtered dump in SQL Server when running into a OOM condition.&lt;br /&gt;4) TLIST.exe to identify modules loaded in SQL Server.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Luckily, starting with SQL 2005 there is an in-memory DMV which tracks the virtual address space (VAS) of your SQL Server process. Here are some queries which will help you find out how much virtual address is available on sqlservr.exe which is FREE and how much is total available (Free+InUse)&lt;br /&gt;&lt;br /&gt;1. Will tell you the size of the biggest contiguous block in VAS&lt;br /&gt;&lt;br /&gt;SELECT convert(varchar,getdate(),120) as [Timestamp], max(region_size_in_bytes)/1024 [Total max contiguous block size in KB]&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;from sys.dm_os_virtual_address_dump where region_state = 0x00010000 --- MEM_FREE&lt;br /&gt;&lt;br /&gt;2. Will also tell us size of largest contiguous block plus the region marked as MEM_RESERVE (this is your non-BPool area reserved during SQL Startup, sometimes referred to as MTL -&amp;nbsp;MemToLeave)&lt;br /&gt;&lt;br /&gt;With VASummary(Size,Reserved,Free) AS&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;(SELECT&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Size = VaDump.Size,&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Reserved =&amp;nbsp; SUM(CASE(CONVERT(INT, VaDump.Base)^0)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;WHEN 0 THEN 0 ELSE 1 END),&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Free = SUM(CASE(CONVERT(INT, VaDump.Base)^0)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;WHEN 0 THEN 1 ELSE 0 END)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;FROM&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;(&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SELECT&amp;nbsp; CONVERT(VARBINARY, SUM(region_size_in_bytes))&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;AS Size, region_allocation_base_address AS Base&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;FROM sys.dm_os_virtual_address_dump&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;WHERE region_allocation_base_address &amp;lt;&amp;gt; 0x0&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;GROUP BY region_allocation_base_address&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;UNION&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SELECT CONVERT(VARBINARY, region_size_in_bytes), region_allocation_base_address&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;FROM sys.dm_os_virtual_address_dump&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;WHERE region_allocation_base_address&amp;nbsp; = 0x0&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;AS VaDump&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;GROUP BY Size)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SELECT SUM(CONVERT(BIGINT,Size)*Free)/1024 AS [Total avail Mem, KB] ,CAST(MAX(Size) AS BIGINT)/1024 AS [Max free size, KB]&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;FROM VASummary&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;WHERE Free &amp;lt;&amp;gt; 0&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;3. The below query will identify the memory reserved by non-BPool components in SQL Server&lt;br /&gt;&lt;br /&gt;select SUM(virtual_memory_reserved_kb)/1024 as virtual_memory_reserved_mb from&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;sys.dm_os_memory_clerks&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;where type not like '%bufferpool%'&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;4. To identify if any of the space used is by SQL Server procedure cache itself, you can use this query&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SELECT SUM(PAGESUSED)*8/1024 'MB of MemToLeave memory consumed by procedures'&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;FROM MASTER.DBO.SYSCACHEOBJECTS WHERE PAGESUSED &amp;gt;1&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DBCC MEMORYSTATUS also has good information on whether the usage from the non-BPool region is coming from SQL or non-SQL components. If it is SQL 2000, check the value of &amp;ldquo;OS Committed&amp;rdquo; and it is SQL 2005/2008 look at the value of &amp;ldquo;MultiPage Allocator&amp;rdquo; for each memory clerk. Just to re-state my assumption in case you are not sure&lt;br /&gt;&lt;br /&gt;1 SQL Server Page = 8 KB&amp;nbsp;&amp;ndash;&amp;gt; SinglePage Allocator&lt;br /&gt;&amp;gt; 1 Page or &amp;gt; 8KB&amp;nbsp;&amp;ndash;&amp;gt; MultiPage Allocator&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;Apart from these you need to pay special attention to the following components are all of the below do not use memory from the Buffer Pool region but make direct &lt;a href="http://msdn.microsoft.com/en-us/library/aa366887%28VS.85%29.aspx"&gt;&lt;span style="color: #0000ff;"&gt;VirtualAlloc()&lt;/span&gt;&lt;/a&gt; calls to reserve memory and then commit them,&lt;br /&gt;&lt;br /&gt;1) Any OLE/COM components loaded in SQL Server&lt;br /&gt;2) Extended Stored Procedures (use sys.dm_os_loaded_modules to identify the module loaded in sqlserver process space).&lt;br /&gt;3) SQL Mail components&lt;br /&gt;4) Any XML prepared documents using sp_xml_preparedocument&lt;br /&gt;5) Linked Server Providers&lt;br /&gt;6) Large Plans stored in Procedure Cache&lt;br /&gt;7) Very frequent Backups also may cause MTL area depletion. (Please investigate using the parameters MAXTRANSFERSIZE and BUFFERCOUNT, if this is the case).&lt;br /&gt;8) SQL CLR (recommended to be used on 64-bit SQL Servers)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Above list is certainly not exhaustive, but is more enough to get started in looking at the right areas. While we are on this topic, it is important to understand the difference between a Reserve and a Commit. These are windows concepts are remain the same for SQL Server as well, after all its &lt;a href="http://msdn.microsoft.com/en-us/library/aa366887%28VS.85%29.aspx"&gt;&lt;span style="color: #0000ff;"&gt;VirtualAlloc()&lt;/span&gt;&lt;/a&gt; underneath the covers.&lt;br /&gt;&lt;br /&gt;MEM_COMMIT&amp;nbsp;&amp;ndash; Region in VAS this is backed by RAM/paging file&lt;br /&gt;MEM_RESERVE&amp;nbsp;&amp;ndash; Region in VAS with no actual physical storage either in RAM or in the paging file.&lt;br /&gt;&lt;br /&gt;The problems we talked about so far occur when a call to VirtualAlloc() with MEM_RESERVE is made and that &amp;ldquo;reservation&amp;rdquo; fails resulting in the errors printed to errorlog. Most times, the call to reserve is subsequently followed by a COMMIT, but its not mandatory. I can reserve now and commit later on using the base address of the reservation. SQL Server is smart enough and during starting reserves a certain region of the address space referred to as MTL or Non-BPool region. It is here the crunch is and it is here the issue needs to be investigated/fixed.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;A quick workaround for above issues is to add the startup parameter&amp;nbsp;&amp;ndash;gXXX. (Sample usage- -g512)&lt;br /&gt;XXX- is the amount in MBytes to reserve on startup. &lt;br /&gt;&lt;br /&gt;I would advise against doing this as this is a workaround where you are increasing the MTL region rather than find out who/what is consuming it. &lt;a href="http://blogs.msdn.com/slavao/archive/2005/02/11/371063.aspx"&gt;&lt;span style="color: #0000ff;"&gt;Slava&amp;rsquo;s blog&lt;/span&gt;&lt;/a&gt; is a good read also on this topic.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Sudarshan Narasimhan&lt;br /&gt;&lt;/strong&gt;Technical Lead, Microsoft SQL Server CSS&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/sqlserverfaq/archive/2010/02/16/how-to-find-who-is-using-eating-up-the-virtual-address-space-on-your-sql-server.aspx" target="_blank"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/b/sqlserverfaq/archive/2010/02/16/how-to-find-who-is-using-eating-up-the-virtual-address-space-on-your-sql-server.aspx" target="_blank"&gt;原 文：http://blogs.msdn.com/b/sqlserverfaq/archive/2010/02/16/how-to-find- who-is-using-eating-up-the-virtual-address-space-on-your-sql-server.aspx&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nzperfect/aggbug/2249850.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nzperfect/archive/2011/11/15/2249850.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nzperfect/archive/2011/11/03/2234595.html</id><title type="text">[转]Troubleshooting MSDTC issues with the DTCPing tool</title><summary type="text">http://blogs.msdn.com/b/distributedservices/archive/2008/11/12/troubleshooting-msdtc-issues-with-the-dtcping-tool.aspxEvery day the Distributed Services support team in Microsoft helps customers in troubleshooting some of the most common Distributed Transaction errors which are a direct result of MS</summary><published>2011-11-03T07:29:00Z</published><updated>2011-11-03T07:29:00Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nzperfect/archive/2011/11/03/2234595.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/archive/2011/11/03/2234595.html"/><content type="html">&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/distributedservices/archive/2008/11/12/troubleshooting-msdtc-issues-with-the-dtcping-tool.aspx" target="_blank"&gt;http://blogs.msdn.com/b/distributedservices/archive/2008/11/12/troubleshooting-msdtc-issues-with-the-dtcping-tool.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;Every day the Distributed Services support team in Microsoft helps&#xD;
 customers in troubleshooting some of the most common Distributed &#xD;
Transaction errors which are a direct result of MSRPC (Microsoft Remote &#xD;
Procedure Call) communication failing in a network because of some &#xD;
Security\Firewall settings. On an application layer (like SQL), these &#xD;
are the common error messages that will be bubbled up. &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Server: Msg 7391, Level 16, State 1, Line 2 The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction. OLE/DB provider returned message: New transaction cannot enlist in the specified transaction coordinator.&lt;/li&gt;&#xD;
&lt;li lang="en"&gt;New transaction cannot enlist in the specified transaction coordinator (0x8004d00a)&lt;/li&gt;&#xD;
&lt;li lang="en"&gt;The transaction has already been implicitly or explicitly committed or aborted (0x8004d00e)&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;span&gt;If&#xD;
 you encounter one of the above error messages while using Distributed &#xD;
Transactions from your application, feel free to use the DTCPING tool to&#xD;
 find out where the problem lies. This blog explains how to use the &#xD;
DTCPing tool to narrow down the source of the problem and how to fix it.&#xD;
 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Distributed Transactions (specifically OleTx transactions) use the MSRPC protocol to talk to MSDTC on the other machine. To make sure that the two machines are able to communicate with each other using the MSRPC protocol, you can run the DTCPING tool on both the machines to test whether the normal RPC communication is working fine or not. Before talking about the various errors that are thrown by this tool, it is very important to understand the right way to run the tool properly so that we can get the right output from the tool&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;Distributed Transactions come in to picture whenever there is more than one server participating in a transaction. If there is just a single server involved in the distributed transaction and you are still getting some errors while running distributed transactions, then this is not the right article to focus upon. Once you have determined the right servers that are participating in the distributed transaction, launch the DTCPING.EXE tool simultaneously on both of the machines. DTCPING.EXE should be running at the same time on both the machines before you put the right server name and click the PING button.&lt;/li&gt;&#xD;
&lt;li&gt;In the Remote Server Name section of the DTCPING tool you should only put the &lt;span&gt;&lt;span style="text-decoration: underline;"&gt;NETBIOS&lt;/span&gt;&lt;/span&gt; name of the server with which you are trying to run distributed transaction. Any test which is done after specifying the IP address of the server or the FQDN of the server is an invalid test. You MUST provide the NETBIOS name of the server against which you are trying to run distributed transactions as MSDTC uses MSRPC as the underlying mechanism and MSRPC works on NETBIOS name resolution only.&lt;/li&gt;&#xD;
&lt;li&gt;In a Cluster - &lt;strong&gt;On a clustered machine you should always put the &lt;span&gt;name &lt;/span&gt;of the NETWORK RESOURCE on which the MSDTC resource is dependent on &lt;/strong&gt;in the Remote Server Name field. To find out the right NETWORK NAME to use in DTCPing, open up the Cluster Administrator and go to the group in which the MSDTC Resource is present. That group should have one network name resource on which the DTC Resource is dependent on. To find out the network name, just go to the properties of the network name resource and go to the Parameters tab. The name that you see there is what is network name for this MSDTC resource. Lets understand this with an example :- lets say that you have a 2 node cluster with two nodes with the NETBIOS names as DBSERVER01 and DBSERVER02 and you are trying to run distributed transactions from a third server APPSERVER. Then to run DTCPing in the right way, you should start the DTCPING.EXE on the APPSERVER and the active node of the cluster. (By active node, I mean the node on which the DTC resource is online). Then from the Cluster Administrator go to the properties of the NETWORK NAME resource in which the Distributed Transaction Coordinator resource is present and go to the PARAMETERS tab. Note this network name. Once you have determined the right network name, launch DTCPING on the active node of the cluster and the APPSERVER and inside the DTCPing window on the APPSERVER, put in the network name of the clustered MSDTC Resource inside the (Remote Server Name) field and then click PING.&lt;/li&gt;&#xD;
&lt;li&gt;You should always have only one instance of DTCPING.EXE running on the server when you are testing and for subsequent tests you should always close the DTCPING tool and open it again.&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;After ensuring that you have read the above points properly, you should just run the DTCPING tool and in the Remote Server name type in the right server name and click PING. If everything works fine you should see the following message being returned by the tool. (Here DTCPing was ran from machine with NETBIOS name SOURCE to the machine with NETBIOS name DESTINATION)&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p style="color: #0000ff;"&gt;&lt;br /&gt;++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;&lt;span lang="en"&gt; DTCping 1.9 Report for SOURCE &lt;/span&gt;&lt;br /&gt;++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;&lt;span lang="en"&gt;RPC server is ready&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;++++++++++++Validating Remote Computer Name++++++++++++&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;11-21, 04:31:01.455--&amp;gt;Start DTC connection test&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Name Resolution:&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt; DESTINATION--&amp;gt;65.52.22.254--&amp;gt;DESTINATION.contoso.com&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;11-21, 04:31:01.470--&amp;gt;Start RPC test (SOURCE--&amp;gt;DESTINATION)&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;RPC test is successful&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt; Partner's CID:084B708C-F0C5-4E65-95F2-8E2DEF73FFF3&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;++++++++++++RPC test completed+++++++++++++++&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;++++++++++++Start DTC Binding Test +++++++++++++&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Trying Bind to DESTINATION&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;11-21, 04:31:01.830--&amp;gt;SOURCE Initiating DTC Binding Test....&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt; Test Guid:B5544E05-D64B-40AC-B283-71947914DED3&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Received reverse bind call from DESTINATION&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt; Network Name: SOURCE&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt; Source Port: 1116&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt; Hosting Machine:SOURCE&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Binding success: SOURCE--&amp;gt;DESTINATION&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;++++++++++++DTC Binding Test END+++++++++++++&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;If you see the above message, go to the second server and put the name of the source server in the Remote Server Name field and hit PING and make sure that you see the same results as above. If both of the servers return success after running the DTCPING tool but the distributed transactions are still not working, then you should see the PART II of this article which talks about how to fix distributed transaction issues when the DTCPING works fine between two machines.&lt;/p&gt;&#xD;
&lt;p lang="en"&gt;If the result of the tool is not success, figure out what error you are getting and follow the steps mentioned in the sections below to fix the error message.&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;a lang="en" href="http://blogs.msdn.com/distributedservices/archive/2008/11/12/troubleshooting-msdtc-issues-with-the-dtcping-tool.aspx#getHostbynameFailure"&gt;getHostByname failure&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a lang="en" href="http://blogs.msdn.com/distributedservices/archive/2008/11/12/troubleshooting-msdtc-issues-with-the-dtcping-tool.aspx#TheRpcServerisUnavailable"&gt;The Rpc Server is Unavailable&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a lang="en" href="http://blogs.msdn.com/distributedservices/archive/2008/11/12/troubleshooting-msdtc-issues-with-the-dtcping-tool.aspx#TheRemoteProcedureCallFailed"&gt;The Remote Procedure Call Failed&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a lang="en" href="http://blogs.msdn.com/distributedservices/archive/2008/11/12/troubleshooting-msdtc-issues-with-the-dtcping-tool.aspx#Therearenomoreendpoints"&gt;There are no more endpoints from the endpoint mapper&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a lang="en" href="http://blogs.msdn.com/distributedservices/archive/2008/11/12/troubleshooting-msdtc-issues-with-the-dtcping-tool.aspx#AccessisDenied"&gt;Access is Denied&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a lang="en" href="http://blogs.msdn.com/distributedservices/archive/2008/11/12/troubleshooting-msdtc-issues-with-the-dtcping-tool.aspx#Notenoughresources"&gt;Not enough resources are available to complete this operation&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;ERROR MESSAGE 1 - &lt;/span&gt;&lt;/strong&gt;&lt;a title="getHostbynameFailure" name="getHostbynameFailure"&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;gethostbyname failure&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p style="color: #ff0000;"&gt;&lt;span lang="en"&gt;DTCPing log file: C:\Documents and Settings\username\Desktop\DTC_PING\TURTLES8618&lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;RPC server is ready &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Please Start Partner DTCPing before pinging&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;++++++++++++Validating Remote Computer Name++++++++++++&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;Please refer to following log file for details: C:\Documents and Settings\username\Desktop\DTC_PING\TURTLES861840.log &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Error(0xB7) at nameping.cpp @43 &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;--&amp;gt;gethostbyname failure --&amp;gt;183(Cannot create a file when that file already exists.) &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Can not resolve abc Invalid remote host name:abc&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;I think this error is more than self explanatory. You will get this if the host name that you added in the Remote Server Name is not a valid host name. Make sure that the remote server name that you specified in the DTCPING tool resolves to a valid IP address by running the ping command. If that host name is not resolving to any IP address, you can try adding the host name in the hosts file and try running the tool again.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;ERROR MESSAGE 2 - &lt;/strong&gt;&lt;/span&gt;&lt;a title="TheRpcServerisUnavailable" name="TheRpcServerisUnavailable"&gt;&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;The RPC server is unavailable&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p style="color: #ff0000;"&gt;&lt;span lang="en"&gt;DTCping log file: C:\Documents and Settings\username\Desktop\DTC_PING\TURTLES8618 &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;RPC server is ready Please Start Partner DTCping before pinging &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;++++++++++++Validating Remote Computer Name++++++++++++ &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Please refer to following log file for details: C:\Documents and Settings\username\Desktop\DTC_PING\TURTLES861896.log &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Invoking RPC method on turtle86 &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Problem:fail to invoke remote RPC method Error(0x6BA) at dtcping.cpp @303 &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;--&amp;gt;RPC pinging exception --&amp;gt;1722(The RPC server is unavailable.) &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;RPC test failed &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;This indicates that either the port 135 or one of the ports in the DCOM port range is blocked on the firewall. To confirm this further let's say you ran DTCPING from SERVER01 to SERVER02 and you got this error. Now open up a command prompt on SERVER01 and type telnet SERVER02 135 (Before running this test just ensure that the Telnet service is started on the server. On a Windows 2008 Server, the telnet service is not installed by default and you have to install it by configuring the role services on the server.). If you see a blank window with a cursor blinking, that is enough to tell that the port is NOT blocked but if the telnet command fails with an error, you can easily infer that the port 135 is blocked and you should check with your network team to get the port 135 opened up bi-directionally on the firewall. If telnet to port 135 works just fine, then do a NETSTAT -anob on the SERVER02 and find out the port on which the DTCPING.EXE is listening. Then come back to SERVER01 and do a telnet SERVER02 &amp;lt;PORT_NUMBER&amp;gt;. If you got this error, then this test has to fail. MSDTC uses the MSRPC protocol to talk to MSDTC on the remote machine. As a result of the normal working of the MSRPC protocol, MSDTC is free to use one of the dynamic ports within the range 1024-65535. Well if MSDTC can use any one port within this range, then how should I be configuring my firewall? Should I got ahead and open up the entire range on my firewall? Then what is use of a firewall? The answer to that is - you don't have to open up this entire range on the firewall but you can restrict the RPC End Point Mapper Service to just specify a range of ports that will be used by any DCOM program. &lt;strong&gt;Please note again - this range impacts ALL the programs that use MSRPC and not just MSDTC. &lt;/strong&gt;You can configure this range in the registry or in the DCOMCNFG UI. To specify this range, scroll down below to the section "RESTRICTING THE DCOM PORT RANGE" which talks about how to restrict DCOM to use a specific port range.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;ERROR MESSAGE 3 - &lt;/span&gt;&lt;/strong&gt;&lt;a title="TheRemoteProcedureCallFailed" name="TheRemoteProcedureCallFailed"&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;The remote procedure call failed&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p style="color: #ff0000;"&gt;&lt;span lang="en"&gt;RPC server is ready&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;++++++++++++Validating Remote Computer Name++++++++++++ &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Problem:fail to invoke remote RPC method&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;Error(0x6BE) at dtcping.cpp @303&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;--&amp;gt;RPC pinging exception --&amp;gt;1726(The remote procedure call failed.)&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;RPC test failed&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;This error is a result of a firewall disconnecting the TCP connection between the two machines. You have to get in touch with your firewall administrators to help you figure out why the Firewall is closing the TCP connection between two machines. To troubleshoot this error you can install Network Monitor tool on both the machines and re-run the test and you should see a TCP RESET packet sent by a network device which is trying to close the connection.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;ERROR MESSAGE 4 - &lt;/span&gt;&lt;/strong&gt;&lt;a title="Therearenomoreendpoints" name="Therearenomoreendpoints"&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;There are no more endpoints from the endpoint mapper&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p style="color: #ff0000;"&gt;&lt;span lang="en"&gt;DTCping log file: C:\Documents and Settings\username\Desktop\DTC_PING\TURTLES8626&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;RPC server is ready Please Start Partner DTCping before pinging&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;++++++++++++Validating Remote Computer Name++++++++++++ &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Please refer to following log file for details: C:\Documents and Settings\username\Desktop\DTC_PING\TURTLES86268.log &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Invoking RPC method on turtle86 &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Problem:fail to invoke remote RPC method Error(0x6D9) at dtcping.cpp @303 &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;--&amp;gt;RPC pinging exception --&amp;gt;1753(There are no more endpoints available from the endpoint mapper.) &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;RPC test failed &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;This error makes it appear that RPC is running out of DCOM Ports but you should not infer this error as a port exhaustion immediately. If you are able to run DTCPING.EXE on both the machines and during startup of the EXE, the tool doesn't complain of an out of port error, then this error is just a result of Firewall blocking the ports and the troubleshooting for this error should be exactly same as troubleshooting the "The RPC server is unavailable" error which is described above. Why am I saying that? Let's say that we are running out of DCOM ports (which can typically happen if you have specified a port range and the range is too small, something less than 30), then you should see an error the moment you start the DTCPING.EXE. Because that's when the DTCPing.exe will contact the End Point Mapper service (RpcSS) and ask for a dynamic port. If the DTCPing.exe starts up just fine, then it means that it got the right port allocated to it and hence there is no question of the Endpoint Mapper running out of DCOM ports.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;ERROR MESSAGE 5 - &lt;/span&gt;&lt;/strong&gt;&lt;a title="AccessisDenied" name="AccessisDenied"&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;ERROR MESSAGE 5 - Access is Denied&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p style="color: #ff0000;"&gt;&lt;span lang="en"&gt;Invoking RPC method on TURTLE86 &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Problem:fail to invoke remote RPC method &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;Error(0x5) at dtcping.cpp @303 &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;--&amp;gt;RPC pinging exception &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;--&amp;gt;5(Access is denied.) &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;This error will only occur if the destination machine is a Windows XP machine or a Windows VISTA machine. This is an additional security in the RPC layer which is configured on the client operating systems. More details on this security aspect is described in the article "RPC Interface Restriction" on Technet&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li lang="en"&gt;RPC Interface Restriction &lt;a href="http://technet.microsoft.com/en-us/library/cc781010.aspx"&gt;http://technet.microsoft.com/en-us/library/cc781010.aspx&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p lang="en"&gt;To get rid of this error just follow these steps to configure the registry key and REBOOT the machine.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span lang="en"&gt;1. Click Start, click Run, type Regedit, and then click OK. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;2. Locate and then click the following registry key: &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt; HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;3. On the Edit menu, point to New, and then click Key. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt; Note If the RPC registry key already exists, go to step 5. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;4. Type RPC, and then press ENTER. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;5. Click RPC. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;6. On the Edit menu, point to New, and then click DWORD Value. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;7. Type RestrictRemoteClients, and then press ENTER. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;8. Click RestrictRemoteClients. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;9. On the Edit menu, click Modify. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;10. In the Value data box, type 0, and then click OK. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt; Note To enable the RestrictRemoteClients setting, type1. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;11. Close Registry Editor and restart the computer. &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;ERROR MESSAGE 6 - &lt;/span&gt;&lt;/strong&gt;&lt;a title="Notenoughresources" name="Notenoughresources"&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Not enough resources are available to complete this operation&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p style="color: #ff0000;"&gt;&lt;span lang="en"&gt;DTCping log file: Z:\Tools\DTC_PING\TURTLE865072.log&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;Error(0x6B9) at rpcUtil.cpp @133&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;--&amp;gt;I_RpcServerAllocateIpPort&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;--&amp;gt;1721(Not enough resources are available to complete this operation.)&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;Error(0x6B9) at rpcUtil.cpp @54&lt;/span&gt; &lt;br /&gt;&lt;span lang="en"&gt;--&amp;gt;1721(Not enough resources are available to complete this operation.)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;You will get this error message immediately after starting the DTCPING window. This error message means that RPC is running out of the ports on the machine because the DCOM Port range that you defined is too less or there are a lot of other RPC applications which are using DCOM ports (Typically a DCOM or a RPC program just uses one DCOM port but it is possible for an application to acquire more than one DCOM port by calling the RPC API's directly). To fix this error message increase the port range by following these steps.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;" lang="en"&gt;RESTRICTING THE DCOM PORT RANGE&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;1. Go to Start -&amp;gt; Run. Type in DCOMCNFG. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;2. Go to the properties of the My Computer node under the Computers folder underneath Component Services. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;3. Under the My Computer Properties look under the Default Protocols tab. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;4. Over there make sure that Connection-oriented TCP/IP is selected and then click on Properties. &lt;/span&gt;&lt;br /&gt;&lt;span lang="en"&gt;5. You will see a window like this &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://blogs.msdn.com/blogfiles/distributedservices/WindowsLiveWriter/TroubleshootingMSDTCissueswiththeDTCPing_58B4/EmptyPortRange_2.jpg"&gt;&lt;img style="border-width: 0px; display: inline;" title="EmptyPortRange" src="http://blogs.msdn.com/blogfiles/distributedservices/WindowsLiveWriter/TroubleshootingMSDTCissueswiththeDTCPing_58B4/EmptyPortRange_thumb.jpg" alt="EmptyPortRange" width="346" height="326" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;span lang="en"&gt;If&#xD;
 you don&amp;rsquo;t see a range above and the window looks exactly like the one &#xD;
above, that would mean that the DCOM port range is not configured on the&#xD;
 machine. &lt;/span&gt;&lt;br /&gt;&lt;span&gt;You can click Add in the above window and &#xD;
type the range (let's say as 5000-5100) and say Ok. Make sure it looks &#xD;
like this. (Both the radio buttons should be selected for Internet &#xD;
Range) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://blogs.msdn.com/blogfiles/distributedservices/WindowsLiveWriter/TroubleshootingMSDTCissueswiththeDTCPing_58B4/PortRange5000_2.jpg"&gt;&lt;img style="border-width: 0px; display: inline;" title="PortRange5000" src="http://blogs.msdn.com/blogfiles/distributedservices/WindowsLiveWriter/TroubleshootingMSDTCissueswiththeDTCPing_58B4/PortRange5000_thumb.jpg" alt="PortRange5000" width="346" height="349" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;span&gt;You have to configure this range on both the machines and after that you have to &lt;strong&gt;reboot both the servers&lt;/strong&gt; for this Range to take effect. &lt;strong&gt;After doing that you have to open up the same range on your firewall bi-directionally&lt;/strong&gt;&lt;/span&gt;.&lt;/p&gt;&#xD;
&lt;p&gt;Let's say you have already opened enough ports but still you get this error message. In this case you should run NETSTAT -anob on the machine which is returning this error message and try to find out which program is using all the ports. You should look for the ports that you have defined in the RPC Port range and look for all EXE's which are listening on that port range.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;We hope this article gives you enough &#xD;
insight on how to troubleshoot issues with MSDTC using the DTCPing tool &#xD;
and we hope that going further you should be able to troubleshoot and &#xD;
diagnose issues related to MSDTC on your own. If you still need &#xD;
assistance from us to solve any DTCPING errors that were talked about in&#xD;
 the above blog, please feel free to collect the DTCPING log files from &#xD;
both the machine (where DTCPING was ran) and open up a Support Incident &#xD;
with Microsoft. We (the MSDTC support team) will be more than happy to &#xD;
provide you a timely resolution to the problem once we have the right &#xD;
data to look at. &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p lang="en"&gt;If you are interestedly to dig deeper in to the DCOM and the Firewall concepts, feel free to explore the following articles which talks about DCOM issues in general.&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li lang="en"&gt;DTCPING.exe download &lt;a href="http://download.microsoft.com/download/d/0/0/d00c8f6b-135d-4441-a97b-9de16a1935c1/dtcping.exe"&gt;http://download.microsoft.com/download/d/0/0/d00c8f6b-135d-4441-a97b-9de16a1935c1/dtcping.exe&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span lang="en"&gt;Using Distributed COM with Firewalls &lt;a href="http://msdn.microsoft.com/en-us/library/ms809327.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms809327.aspx&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span lang="en"&gt;Configuring Microsoft Distributed Transaction Coordinator (DTC) to work through a firewall &lt;a href="http://support.microsoft.com/kb/250367/en-us"&gt;http://support.microsoft.com/kb/250367/en-us&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span lang="en"&gt;Description of names and IP addresses that an MSDTC client in a cluster environment must have &lt;a href="http://support.microsoft.com/kb/311846/en-us"&gt;http://support.microsoft.com/kb/311846/en-us&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li lang="en"&gt;Troubleshooting Problems with MSDTC &lt;a href="http://msdn.microsoft.com/en-us/library/aa561924.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa561924.aspx&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/nzperfect/aggbug/2234595.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nzperfect/archive/2011/11/03/2234595.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nzperfect/archive/2011/11/03/2234015.html</id><title type="text">某个订阅库下存在很多关于更新MSreplication_subscriptions表造成的大量死锁</title><summary type="text">订阅库中有很多的死锁现象，MSreplication_subscriptions表中有8条记录，死锁大概是1小时40个，如下所示：deadlock-listdeadlock victim=processdbf1c8 process-list process id=processdbf1c8 taskpriority=0 logused=2116 waitresource=PAGE: 6:1:3304140 waittime=577 ownerId=1250752686 transactionname=user_transaction lasttranstarted=2011-11-03T09:</summary><published>2011-11-03T01:22:00Z</published><updated>2011-11-03T01:22:00Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nzperfect/archive/2011/11/03/2234015.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/archive/2011/11/03/2234015.html"/><content type="html">&lt;p&gt;订阅库中有很多的死锁现象，MSreplication_subscriptions表中有8条记录，死锁大概是1小时40个，如下所示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;deadlock-list&lt;br /&gt;&amp;nbsp;deadlock victim=processdbf1c8&lt;br /&gt;&amp;nbsp; process-list&lt;br /&gt;&amp;nbsp;&amp;nbsp; process id=processdbf1c8 taskpriority=0 logused=2116 waitresource=PAGE: 6:1:3304140 waittime=577 ownerId=1250752686 transactionname=user_transaction lasttranstarted=2011-11-03T09:17:09.920 XDES=0xffffffffaadb39a8 lockMode=U schedulerid=2 kpid=2868 status=suspended spid=72 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2011-11-03T09:17:15.100 lastbatchcompleted=2011-11-03T09:17:15.100 clientapp=EEAAPRD\EEAAPRD_db_ee_occ to RDJ hostname=EEAADIST hostpid=4932 loginname=repl_user isolationlevel=read committed (2) xactid=1250752686 currentdb=6 lockTimeout=4294967295 clientoption1=671156320 clientoption2=128056&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; executionStack&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame procname=adhoc line=1 stmtstart=164 sqlhandle=0x02000000246863336efb6f4b519564562cfd41f094d18561&lt;br /&gt;update MSreplication_subscriptions set transaction_timestamp = cast(@P1 as binary(15)) + cast(substring(transaction_timestamp, 16, 1) as binary(1)), "time" = @P2 where UPPER(publisher) = UPPER(@P3) and publisher_db = @P4 and publication = @P5 and subscription_type = 0 and (substring(transaction_timestamp, 16, 1) = 0 or datalength(transaction_timestamp) &amp;lt; 16)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame procname=unknown line=1 sqlhandle=0x000000000000000000000000000000000000000000000000&lt;br /&gt;unknown&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputbuf&lt;br /&gt;(@P1 varbinary(14),@P2 datetime,@P3 nvarchar(13),@P4 nvarchar(7),@P5 nvarchar(14))update MSreplication_subscriptions set transaction_timestamp = cast(@P1 as binary(15)) + cast(substring(transaction_timestamp, 16, 1) as binary(1)), "time" = @P2 where UPPER(publisher) = UPPER(@P3) and publisher_db = @P4 and publication = @P5 and subscription_type = 0 and (substring(transaction_timestamp, 16, 1) = 0 or datalength(transaction_timestamp) &amp;lt; 16)&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; process id=process407b8e8 taskpriority=0 logused=37032 waitresource=PAGE: 6:1:3304141 waittime=577 ownerId=1250752084 transactionname=user_transaction lasttranstarted=2011-11-03T09:17:08.693 XDES=0xffffffff99c24958 lockMode=U schedulerid=8 kpid=4356 status=suspended spid=92 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2011-11-03T09:17:14.917 lastbatchcompleted=2011-11-03T09:17:14.913 clientapp=EEAAPRD\EEAAPRD_db_ee_occ_lucene to RD hostname=EEAADIST hostpid=7184 loginname=repl_user isolationlevel=read committed (2) xactid=1250752084 currentdb=6 lockTimeout=4294967295 clientoption1=671156320 clientoption2=128056&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; executionStack&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame procname=adhoc line=1 stmtstart=164 sqlhandle=0x02000000c535342ae6f47e336782ad406ac4eccd72796c0c&lt;br /&gt;update MSreplication_subscriptions set transaction_timestamp = cast(@P1 as binary(15)) + cast(substring(transaction_timestamp, 16, 1) as binary(1)), "time" = @P2 where UPPER(publisher) = UPPER(@P3) and publisher_db = @P4 and publication = @P5 and subscription_type = 0 and (substring(transaction_timestamp, 16, 1) = 0 or datalength(transaction_timestamp) &amp;lt; 16)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame procname=unknown line=1 sqlhandle=0x000000000000000000000000000000000000000000000000&lt;br /&gt;unknown&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; inputbuf&lt;br /&gt;(@P1 varbinary(14),@P2 datetime,@P3 nvarchar(13),@P4 nvarchar(7),@P5 nvarchar(20))update MSreplication_subscriptions set transaction_timestamp = cast(@P1 as binary(15)) + cast(substring(transaction_timestamp, 16, 1) as binary(1)), "time" = @P2 where UPPER(publisher) = UPPER(@P3) and publisher_db = @P4 and publication = @P5 and subscription_type = 0 and (substring(transaction_timestamp, 16, 1) = 0 or datalength(transaction_timestamp) &amp;lt; 16)&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; resource-list&lt;br /&gt;&amp;nbsp;&amp;nbsp; pagelock fileid=1 pageid=3304140 dbid=6 objectname=db.dbo.MSreplication_subscriptions id=lock2f350b80 mode=IU associatedObjectId=72057594038845440&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; owner-list&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; owner id=process407b8e8 mode=IU&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; waiter-list&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; waiter id=processdbf1c8 mode=U requestType=wait&lt;br /&gt;&amp;nbsp;&amp;nbsp; pagelock fileid=1 pageid=3304141 dbid=6 objectname=db.dbo.MSreplication_subscriptions id=lock3184e900 mode=IU associatedObjectId=72057594038845440&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; owner-list&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; owner id=processdbf1c8 mode=IU&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; waiter-list&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; waiter id=process407b8e8 mode=U requestType=wait&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;发现已经有人把这个提交给微软了：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://connect.microsoft.com/SQLServer/feedback/details/695689/transactional-push-replication-deadlock-on-msreplication-subscriptions#tabs" target="_blank"&gt;http://connect.microsoft.com/SQLServer/feedback/details/695689/transactional-push-replication-deadlock-on-msreplication-subscriptions#tabs&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;解决方法&lt;/strong&gt;&lt;/span&gt;：&lt;/p&gt;&#xD;
&lt;p&gt;重建了该表的聚集索引，目前一小时内未出现死锁，持续监控中。&lt;br /&gt;alter index uc1MSReplication_subscriptions on dbo.MSreplication_subscriptions REBUILD&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nzperfect/aggbug/2234015.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nzperfect/archive/2011/11/03/2234015.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nzperfect/archive/2011/10/27/2226766.html</id><title type="text">[转]Working Set和Private Bytes</title><summary type="text">原文http://www.cnblogs.com/awpatp/archive/2010/01/26/1656651.htmlTask Manager跟Performance Monitor的区别(Working set和Private bytes)windows server 2003 :在Performance monitor中可以通过private bytes和Virtual bytes来衡量程序的内存使用. 在task manager中, 也有Memory Usage和VM Size两项. 但是仔细比较后会发现Memory Usage并不是对应private bytes, VM Siz</summary><published>2011-10-27T08:38:00Z</published><updated>2011-10-27T08:38:00Z</updated><author><name>nzperfect</name><uri>http://www.cnblogs.com/nzperfect/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nzperfect/archive/2011/10/27/2226766.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nzperfect/archive/2011/10/27/2226766.html"/><content type="html">&lt;p&gt;&lt;a target="_blank" href="http://www.cnblogs.com/awpatp/archive/2010/01/26/1656651.html"&gt;原文http://www.cnblogs.com/awpatp/archive/2010/01/26/1656651.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a id="ctl02_TitleUrl" href="http://www.cnblogs.com/awpatp/archive/2010/01/26/1656651.html"&gt;Task Manager跟Performance Monitor的区别(Working set和Private bytes)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;windows server 2003 :&lt;/p&gt;&#xD;
&lt;p&gt;在Performance monitor中可以通过private bytes和Virtual bytes来衡量程序的内存使用. 在task manager中, 也有Memory Usage和VM Size两项. 但是仔细比较后会发现Memory Usage并不是对应private bytes, VM Size也不是对应Virtual Bytes.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其实, &lt;strong&gt;task manager中的Memory Usage对应的是working set,&lt;/strong&gt; &lt;strong&gt;VM Size对应的是private bytes&lt;/strong&gt;. 因此如果使用task manager观察内存使用, 应该注意到这个差别.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Working Set和Private Bytes&lt;/p&gt;&#xD;
&lt;p&gt;==============&lt;/p&gt;&#xD;
&lt;p&gt;一个有趣的问题是, working set指目前程序所消耗的物理内存, private bytes指的是commit的内存, 那么为什么有些进程的working set比private bytes还大? 要回答这个问题, 需要仔细看看两者的定义:&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;"Working Set refers to the numbers of pages of virtual memory committed to a given process, both shared and private."&lt;/li&gt;&#xD;
&lt;li&gt;"Private Bytes is the current size, in bytes, of memory that this process has allocated that cannot be shared with other processes."&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;所以, Working Set包含了可能被其他程序共享的内存, 而Private Bytes只包括被当前进程使用的内存.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;DLL是一个典型的可能被其他程序共享的资源. DLL的加载使用文件映像, 因此包含DLL的物理内存可以被同时映像到多个进程上. 所以在进程中加载DLL的内存只能算到working set上, 而不能被算到private bytes上.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在解决内存问题的时候Shared的部分一般可以不用考虑.&lt;/p&gt;&#xD;
&lt;p&gt;一个进程使用内存的时候, 它占用的内存会被分为两部分, 一部分是working set, 另一部分是private byte减去working set. 其中working set是贮存在物理内存中的, 而剩下的另一部分是paging file, 存在磁盘上.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;一般来说把所有进程的working set加起来会比你机器上所拥有的物理内存要大, 这是因为有Shared的资源(比如DLL)的缘故.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;TechNet上的定义&lt;/p&gt;&#xD;
&lt;p&gt;==============&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Working Set&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The set of memory pages (areas of memory allocated to a process) recently used by the threads in a process. If available memory on the server is above a specified threshold, pages remain in the Working Set of a process even if they are not in use. When available memory falls below a specified threshold, pages are removed from the Working Set. If these pages are needed, they will be returned back to the Working Set before they leave main memory and are made available for other processes to use.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Private Bytes&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Displays the current number of bytes this process has allocated that cannot be shared with other processes.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Virtual Bytes. &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The current size, in bytes, of the virtual address space for this process. The virtual address space limit of a user mode process is 2 GB, unless 3 GB address space is enabled by using the /3GB switch in boot.ini.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Working Set, Virtual Bytes, 和Private Byte的更多信息&lt;/p&gt;&#xD;
&lt;p&gt;==============&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;原文:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Private Bytes&lt;/strong&gt; refer to the amount of physical memory (RAM) that the process executable has &lt;em&gt;asked for&lt;/em&gt; - not necessarily the amount it is &lt;em&gt;actually using&lt;/em&gt;. Private bytes are "private" because they (usually) exclude memory-mapped files (i.e. shared DLLs). But - here's the catch - they don't necessarily exclude memory &lt;em&gt;allocated by those files&lt;/em&gt;. So if your executable depends on any libraries - and almost every executable does - you cannot always tell whether a change in private bytes was due to the executable itself or some library it links to. Also note that "physical memory" is not a perfect description - what it really means is bytes that can be addressed &lt;em&gt;without a page fault&lt;/em&gt;.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;翻译:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Private Bytes指的是进程可执行程序已经索要了的物理内存的量, 不一定是它实际正在使用的内存量.&lt;/strong&gt; Private Bytes之所以是"private"的, 是因为它通常不包括内存映射文件(memory-mapped file), 比如说共享的DLL. 但是, 有一点要注意, 虽然private bytes不包括共享的DLL本身, 但是会包括由那些共享的DLL所分配的内存. 所以, 如果你的可执行文件依赖于任何的dll库(其实几乎所有的可执行程序都要依赖于dll库), 你就不能明确private byte的一个变动是由可执行程序自己引发的, 还是由DLL分配的. 还有, 注意, "物理内存"其实并不是对private bytes的一个完美的描述, 物理内存的真实的意义是: 无需page fault就可以寻址到的内存.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;原文:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Working Set&lt;/strong&gt; refers to the total physical &lt;strong&gt;address space&lt;/strong&gt; used by the process. This includes memory-mapped files and quite possibly several other things; a 32-bit process can access 4 GB of address space and &lt;em&gt;not all of that address space is actually memory&lt;/em&gt;. This is the same value that gets reported in Task Manager's "Mem Usage" and has been the source of endless amounts of confusion in recent years. Similarly to private bytes, this is "physical" in the sense that it can be addressed without a page fault.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;翻译:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;working set的意思是被进程使用的全部物理内存地址空间.&lt;/strong&gt; 这包括内存映射文件, 还有些其他的东西. 一个32位的进程可以寻址4GB的地址空间, 而且这4G并不都在实际的内存中. 跟private bytes相似, working set描述中的physical的意思也是无需page fault即可寻址.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;原文:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Virtual Bytes&lt;/strong&gt; are the total &lt;strong&gt;virtual address space&lt;/strong&gt; occupied by the entire process, including memory-mapped files such as shared DLLs. This is like the working set except it includes data that has already been paged out and is sitting in a pagefile somewhere. The total virtual bytes used by every process on a system under heavy load will add up to significantly more memory than the machine actually has.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;翻译:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Virtual Byte是整个进程占用的全部虚拟地址空间, 包括诸如共享dll在内的内存映射文件. 它跟working set很像, 不一样的是, 它还得算上已经被page out的存放在别的什么地方的pagefile中的数据. 一个高负荷系统中所有进程的全部的virtual bytes加起来, 会比机器实际拥有的内存多很多.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nzperfect/aggbug/2226766.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nzperfect/archive/2011/10/27/2226766.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
