<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_stswordman</title><subtitle type="text">人的梦想 是不会完结的</subtitle><id>http://feed.cnblogs.com/blog/u/17632/rss</id><updated>2012-02-09T07:42:14Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/17632/rss"/><entry><id>http://www.cnblogs.com/stswordman/archive/2012/02/09/2344052.html</id><title type="text">inactive subscription</title><summary type="text">The subscription(s) have been marked inactive and must be reinitialized. NoSync subscriptions will need to be dropped and recreated. (Source: MSSQLServer, Error number: 21074)Get help: http://help/21074当sql server检测到订阅和发布数据库不同步（例如网络原因）达到maximum retention（默认为72小时）, SQL Server会将订阅标记为inactive状态。此后，即使网络</summary><published>2012-02-09T07:42:00Z</published><updated>2012-02-09T07:42:00Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stswordman/archive/2012/02/09/2344052.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/archive/2012/02/09/2344052.html"/><content type="html">&amp;nbsp;The subscription(s) have been marked inactive and must be reinitialized. NoSync subscriptions will need to be dropped and recreated. (Source: MSSQLServer, Error number: 21074)&#xD;
&lt;p style="margin: 0in; font-family: 'Microsoft Sans Serif'; font-size: 8pt"&gt;Get help: &lt;a href="http://help/21074"&gt;http://help/21074&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-size: 11pt"&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;当&lt;/span&gt;&lt;span style="font-family: Calibri" lang="en-US"&gt;sql server&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;检测到订阅和发布数据库不同步（例如网络原因）达到&lt;/span&gt;&lt;span style="font-family: Calibri" lang="en-US"&gt;maximum retention&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;（默认为&lt;/span&gt;&lt;span style="font-family: Calibri" lang="en-US"&gt;72&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;小时）&lt;/span&gt;&lt;span style="font-family: Calibri" lang="en-US"&gt;, SQL Server&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;会将订阅标记为&lt;/span&gt;&lt;span style="font-family: Calibri" lang="en-US"&gt;inactive&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;状态。此后，即使网络恢复。订阅也无法恢复了。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in"&gt;&lt;span style="font-family: SimSun; font-size: 11pt" lang="zh-CN"&gt;这是由分发服务器的&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: green; font-size: 10pt" lang="en-US"&gt;Distribution clean up: distribution&lt;/span&gt;&lt;span style="font-family: SimSun; font-size: 11pt" lang="zh-CN"&gt;完成的。这个&lt;/span&gt;&lt;span style="font-family: Calibri; font-size: 11pt" lang="en-US"&gt;cleanup job&lt;/span&gt;&lt;span style="font-family: SimSun; font-size: 11pt" lang="zh-CN"&gt;实际调用存储过程&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt" lang="en-US"&gt;distribution&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: gray; font-size: 10pt" lang="en-US"&gt;.&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt" lang="en-US"&gt;sp_MSdistribution_cleanup @min_distretention &lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: gray; font-size: 10pt" lang="en-US"&gt;=&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt" lang="en-US"&gt; 0&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: gray; font-size: 10pt" lang="en-US"&gt;,&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt" lang="en-US"&gt; @max_distretention &lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: gray; font-size: 10pt" lang="en-US"&gt;=&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt" lang="en-US"&gt; 72&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: Calibri; font-size: 11pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in"&gt;&lt;span style="font-family: SimSun; font-size: 11pt" lang="zh-CN"&gt;执行&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt" lang="en-US"&gt;sp_MSdistribution_cleanup&lt;/span&gt;&lt;span style="font-family: SimSun; font-size: 10pt" lang="zh-CN"&gt;时，&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt" lang="zh-CN"&gt; &lt;/span&gt;&lt;span style="font-family: SimSun; font-size: 10pt" lang="zh-CN"&gt;这个存储过程会在下面这个代码段运行对于订阅的检查，如果大于了&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt" lang="en-US"&gt;retention,&lt;/span&gt;&lt;span style="font-family: SimSun; font-size: 10pt" lang="zh-CN"&gt;就标记为&lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt" lang="en-US"&gt;inactive.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Courier New'; font-size: 10pt"&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;Note:&amp;nbsp;we&amp;nbsp;need&amp;nbsp;to&amp;nbsp;use&amp;nbsp;the&amp;nbsp;same&amp;nbsp;cut_off&amp;nbsp;time&amp;nbsp;for&amp;nbsp;sp_MSsubscription_cleanup&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;and&amp;nbsp;sp_MSdistribution_delete&amp;nbsp;since&amp;nbsp;sp_MSsubscription_cleanup&amp;nbsp;need&amp;nbsp;to&amp;nbsp;disable&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;all&amp;nbsp;the&amp;nbsp;dist&amp;nbsp;agents&amp;nbsp;that&amp;nbsp;are&amp;nbsp;lag&amp;nbsp;behind&amp;nbsp;(their&amp;nbsp;pending&amp;nbsp;trans&amp;nbsp;will&amp;nbsp;be&amp;nbsp;removed)&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;select&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;@cutoff_time&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff00ff"&gt;dateadd&lt;/span&gt;(hour,&amp;nbsp;&lt;span style="color: #808080"&gt;-&lt;/span&gt;&lt;span style="color: #008000"&gt;@max_distretention&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #ff00ff"&gt;getdate&lt;/span&gt;())&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;Deactive&amp;nbsp;any&amp;nbsp;subscriptions&amp;nbsp;which&amp;nbsp;have&amp;nbsp;been&amp;nbsp;inactive&amp;nbsp;beyond&amp;nbsp;the&amp;nbsp;maximum&amp;nbsp;retention&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;exec&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;@retcode&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;dbo.sp_MSsubscription_cleanup&amp;nbsp;&lt;span style="color: #008000"&gt;@cutoff_time&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Courier New'; font-size: 10pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-size: 10pt"&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;在&lt;/span&gt;&lt;span style="font-family: 'Courier New'" lang="en-US"&gt;sp_MSsubscription_cleanup&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;，执行以下语句。详细的请参见&lt;/span&gt;&lt;span style="font-family: 'Courier New'" lang="en-US"&gt;sp_MSsubscription_cleanup&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;定义。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Courier New'; font-size: 10pt"&gt;&lt;span style="color: blue"&gt;update&lt;/span&gt; MSsubscriptions &lt;span style="color: blue"&gt;set&lt;/span&gt; &lt;span style="color: blue"&gt;status&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; @INACTIVE&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Courier New'; font-size: 10pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-size: 10pt"&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;我们可以很容易地&lt;/span&gt;&lt;span style="font-family: SimSun; font-weight: bold" lang="zh-CN"&gt;模拟&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;这种情况：停止相应的订阅的&lt;/span&gt;&lt;span style="font-family: 'Courier New'" lang="en-US"&gt;distributor job&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;，停止&lt;/span&gt;&lt;span style="font-family: 'Courier New'" lang="en-US"&gt;1&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;分钟，然后执行在&lt;/span&gt;&lt;span style="font-family: 'Courier New'" lang="en-US"&gt;distribution&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;数据库执行&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Courier New'; font-size: 10pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;select&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;@cutoff_time&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff00ff"&gt;dateadd&lt;/span&gt;(minute,&amp;nbsp;&lt;span style="color: #808080"&gt;-&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;3&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #ff00ff"&gt;getdate&lt;/span&gt;())&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;Deactive&amp;nbsp;any&amp;nbsp;subscriptions&amp;nbsp;which&amp;nbsp;have&amp;nbsp;been&amp;nbsp;inactive&amp;nbsp;beyond&amp;nbsp;the&amp;nbsp;maximum&amp;nbsp;retention&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;exec&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;@retcode&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;dbo.sp_MSsubscription_cleanup&amp;nbsp;&lt;span style="color: #008000"&gt;@cutoff_time&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Courier New'; font-size: 10pt"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-size: 11pt"&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;之后开启那个&lt;/span&gt;&lt;span style="font-family: Calibri" lang="en-US"&gt;job&lt;/span&gt;&lt;span style="font-family: SimSun" lang="zh-CN"&gt;，运行，会得到如下错误&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Microsoft Sans Serif'; font-size: 8pt"&gt;The subscription(s) have been marked inactive and must be reinitialized. NoSync subscriptions will need to be dropped and recreated. (Source: MSSQLServer, Error number: 21074)&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Microsoft Sans Serif'; font-size: 8pt"&gt;Get help: &lt;a href="http://help/21074"&gt;http://help/21074&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Microsoft Sans Serif'; font-size: 8pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Microsoft Sans Serif'; font-size: 8pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in; font-family: 'Microsoft Sans Serif'; font-size: 11.5pt"&gt;&lt;span style="font-weight: bold"&gt;&amp;nbsp;Action Plan&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0in"&gt;&lt;span style="font-family: SimSun; font-size: 8pt" lang="zh-CN"&gt;对于这种情况，我们推荐进行重新初始化。&lt;/span&gt;&lt;span style="font-family: 'Microsoft Sans Serif'; font-size: 8pt" lang="zh-CN"&gt; &lt;/span&gt;&lt;span style="font-family: SimSun; font-size: 8pt" lang="zh-CN"&gt;当然也可以手工的将&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: blue; font-size: 10pt" lang="en-US"&gt;upda&lt;/span&gt;&lt;span style="font-family: 'Microsoft Sans Serif'; font-size: 8pt" lang="en-US"&gt;te MSsubscriptions &lt;/span&gt;&lt;span style="font-family: SimSun; font-size: 8pt" lang="zh-CN"&gt;的状态变更为&lt;/span&gt;&lt;span style="font-family: 'Microsoft Sans Serif'; font-size: 8pt" lang="en-US"&gt;2&lt;/span&gt;&lt;span style="font-family: SimSun; font-size: 8pt" lang="zh-CN"&gt;，不过这会导致数据的不一致性，用户需要自己来维护丢失的数据变更&lt;/span&gt;&lt;span style="font-family: 'Microsoft Sans Serif'; font-size: 8pt" lang="zh-CN"&gt; &lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/stswordman/aggbug/2344052.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2012/02/09/2344052.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stswordman/archive/2011/10/06/2199752.html</id><title type="text">一个filegroup backup+log backup的bug</title><summary type="text">USEmaster;GOdropdatabaseSalesgoCREATEDATABASESalesONPRIMARY(NAME=SPri1_dat,FILENAME=&amp;#39;D:\SalesData\SPri1dat.mdf&amp;#39;,SIZE=10,MAXSIZE=50,FILEGROWTH=15%),FILEGROUPSalesGroup1(NAME=SGrp1Fi1_dat,FILENAME=&amp;#39;D:\SalesData\SG1Fi1dt.ndf&amp;#39;,SIZE=10,MAXSIZE=50,FILEGROWTH=5)LOGON(NAME=Sales_log,FILENAME</summary><published>2011-10-06T01:29:00Z</published><updated>2011-10-06T01:29:00Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stswordman/archive/2011/10/06/2199752.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/archive/2011/10/06/2199752.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;USE&lt;/span&gt;&amp;nbsp;master;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;drop&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;database&lt;/span&gt;&amp;nbsp;Sales&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;&amp;nbsp;&lt;span style="color: #0000ff"&gt;DATABASE&lt;/span&gt;&amp;nbsp;Sales&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;PRIMARY&lt;/span&gt;&lt;br /&gt;(&amp;nbsp;NAME&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;SPri1_dat,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILENAME&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;D:\SalesData\SPri1dat.mdf&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SIZE&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;10&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MAXSIZE&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;50&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILEGROWTH&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;15&lt;/span&gt;&lt;span style="color: #808080"&gt;%&lt;/span&gt;&amp;nbsp;),&lt;br /&gt;FILEGROUP&amp;nbsp;SalesGroup1&lt;br /&gt;(&amp;nbsp;NAME&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;SGrp1Fi1_dat,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILENAME&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;D:\SalesData\SG1Fi1dt.ndf&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SIZE&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;10&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MAXSIZE&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;50&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILEGROWTH&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;5&lt;/span&gt;&amp;nbsp;)&lt;br /&gt;&lt;span style="color: #ff00ff"&gt;LOG&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;&lt;br /&gt;(&amp;nbsp;NAME&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;Sales_log,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILENAME&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;D:\SalesLog\salelog.ldf&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SIZE&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;5MB,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MAXSIZE&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;25MB,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILEGROWTH&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;5MB&amp;nbsp;)&amp;nbsp;;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;USE&lt;/span&gt;&amp;nbsp;Sales&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;&amp;nbsp;&lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt;&amp;nbsp;TA(A&amp;nbsp;&lt;span style="color: #0000ff"&gt;INT&lt;/span&gt;&amp;nbsp;,B&amp;nbsp;&lt;span style="color: #0000ff"&gt;INT&lt;/span&gt;&amp;nbsp;,C&amp;nbsp;&lt;span style="color: #0000ff"&gt;INT&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;&amp;nbsp;&amp;nbsp;SalesGroup1&lt;br /&gt;&lt;span style="color: #0000ff"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;use&lt;/span&gt;&amp;nbsp;master&lt;br /&gt;&lt;span style="color: #0000ff"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;backup&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;database&lt;/span&gt;&amp;nbsp;sales&amp;nbsp;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;to&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;disk&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;sales.bck&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;with&lt;/span&gt;&amp;nbsp;init&lt;br /&gt;&lt;span style="color: #0000ff"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;BACKUP&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;DATABASE&lt;/span&gt;&amp;nbsp;Sales&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FILEGROUP&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;SalesGroup1&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;TO&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;DISK&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;SalesGroup1.bck&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;with&lt;/span&gt;&amp;nbsp;init&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&#xD;
&lt;p&gt;insert&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; sales&lt;/font&gt;&lt;font color="#808080" size="2"&gt;&lt;font color="#808080" size="2"&gt;..t&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;a &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;default&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;values&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;BACKUP&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff00ff"&gt;log&lt;/span&gt;&amp;nbsp;Sales&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;TO&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;DISK&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;Sales_log.bck&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;with&lt;/span&gt;&amp;nbsp;init&lt;br /&gt;&lt;span style="color: #0000ff"&gt;go&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;restore&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;database&lt;/span&gt;&amp;nbsp;sales&amp;nbsp;&lt;span style="color: #0000ff"&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;disk&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;SalesGroup1.bck&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;with&lt;/span&gt;&amp;nbsp;recovery&lt;br /&gt;&lt;span style="color: #0000ff"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;restore&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff00ff"&gt;log&lt;/span&gt;&amp;nbsp;sales&amp;nbsp;&lt;span style="color: #0000ff"&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;disk&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;Sales_log.bck&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;with&lt;/span&gt;&amp;nbsp;recovery&lt;br /&gt;&lt;span style="color: #0000ff"&gt;go&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;select&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #0000ff"&gt;From&lt;/span&gt;&amp;nbsp;sales..TA&lt;/div&gt;&lt;/div&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;span style="color: #008080"&gt;insert&amp;nbsp;sales..ta&amp;nbsp;default&amp;nbsp;values&lt;/span&gt;这句话的注释掉，会返回这个错误&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="1"&gt;&lt;span style="color: red"&gt;&amp;nbsp;Msg 8653, Level 16, State 1, Line 1&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;The query processor is unable to produce a plan for the table or view 'TA' because the table resides in a filegroup which is not online.&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果我们单独执行restore database和restore log语句。会发现两条警告信息&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The roll forward start point is now at log sequence number (LSN) &lt;span style="color: red"&gt;25000000019700001&lt;/span&gt;. Additional roll forward past LSN &lt;span style="color: red"&gt;25000000020400001 &lt;/span&gt;is required to complete the restore sequence.&lt;/p&gt;&#xD;
&lt;p&gt;RESTORE DATABASE ... FILE=&amp;lt;name&amp;gt; successfully processed 8 pages in 0.036 seconds (1.736 MB/sec).&lt;/p&gt;&#xD;
&lt;p&gt;Processed 0 pages for database 'sales', file 'SGrp1Fi1_dat' on file 1.&lt;/p&gt;&#xD;
&lt;p&gt;The roll forward start point is now at log sequence number (LSN) &lt;span style="color: red"&gt;25000000019900001&lt;/span&gt;. Additional roll forward past LSN &lt;span style="color: red"&gt;25000000020400001 &lt;/span&gt;is required to complete the restore sequence.&lt;/p&gt;&#xD;
&lt;p&gt;RESTORE LOG successfully processed 0 pages in 0.003 seconds (0.000 MB/sec).&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;restore database时显示仍然需要roll forward到&lt;span style="color: red"&gt;25000000020400001 &lt;/span&gt;，但是log备份中的日志并没有达到/超过预期的lsn，而是在&lt;span style="color: red"&gt;25000000019900001&lt;/span&gt;就结束了。&lt;/p&gt;&#xD;
&lt;p&gt;我们通过restore head对比&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;restore&lt;/span&gt;&amp;nbsp;headeronly&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;disk&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;SalesGroup1.bck&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&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;restore&lt;/span&gt;&amp;nbsp;headeronly&amp;nbsp;&lt;span style="color: #0000ff"&gt;from&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;disk&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;Sales_log.bck&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/stswordman/logbackup.png" width="531" height="162" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="1"&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/font&gt;&amp;nbsp;Log包含的最大的lsn没有办法满足之前restore database所需要的lsn...&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;此问题可以在SQL SERVER 2008 R2 RTM中重现&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/stswordman/aggbug/2199752.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/10/06/2199752.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stswordman/archive/2011/07/27/2118405.html</id><title type="text">找出性能差的语句</title><summary type="text">1 找出效率低的语句 SELECTTOP10qs.total_worker_time,qs.total_logical_reads,qs.last_logical_writes,qs.plan_handle,qs.execution_count,(SELECTSUBSTRING(text,qs.statement_start_offset/2+1,(CASEWHENqs.statement_end_offset=-1THENLEN(CONVERT(nvarchar(max),text))*2ELSEqs.statement_end_offsetEND-qs.statement_start_o.</summary><published>2011-07-27T07:15:00Z</published><updated>2011-07-27T07:15:00Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stswordman/archive/2011/07/27/2118405.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/archive/2011/07/27/2118405.html"/><content type="html">&lt;p&gt;&lt;/p&gt; &lt;p&gt;1 找出效率低的语句&lt;/p&gt; &lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;qs.total_worker_time&amp;nbsp;,qs.total_logical_reads,qs.last_logical_writes,&amp;nbsp;&amp;nbsp;&amp;nbsp;qs.plan_handle,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;qs.execution_count,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;qs.statement_start_offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;/&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;CASE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;WHEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;qs.statement_end_offset&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&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;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;THEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;LEN&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;CONVERT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;nvarchar&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;max&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ELSE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;qs.statement_end_offset&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;END&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;qs.statement_start_offset)&lt;/span&gt;&lt;span style="color: #808080;"&gt;/&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sys.dm_exec_sql_text(sql_handle))&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;query_text&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sys.dm_exec_query_stats&amp;nbsp;qs&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;total_worker_time&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;2 查看这些语句对应的client, hostname,loginname&lt;/p&gt; &lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;s.&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;host_name&lt;/span&gt;&lt;span style="color: #000000;"&gt;,s.PROGRAM_NAME,s.login_name,&amp;nbsp;t.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;From&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sys.dm_exec_requests&amp;nbsp;r&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;cross&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;apply&amp;nbsp;&lt;br /&gt;sys.dm_exec_sql_text(r.sql_handle)&amp;nbsp;t&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;inner&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;join&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sys.dm_exec_sessions&amp;nbsp;s&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;r.session_id&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;s.session_id&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;where&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;like&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;%sqlstatement%&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;---&amp;nbsp;place&amp;nbsp;your&amp;nbsp;sql&amp;nbsp;statement&amp;nbsp;here&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;s.session_id&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; font-weight: bold;"&gt;@@SPID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;3确定这些语句隶属的存储过程&lt;/p&gt; &lt;p&gt;通过第一步得到的plan_handle,代入dm_exec_query_plan，得到具体的存储过程的名称。如果返回空，则说明该语句是ad-hoc或者是prepared或者是在存储过程内部使用批结字符串弄出来的语句。如果是以上几种情况，我们是无法定位对象的，只能让程序员们逐个排查了&lt;/p&gt; &lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;OBJECT_NAME&lt;/span&gt;&lt;span style="color: #000000;"&gt;(objectid)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sys.dm_exec_query_plan&amp;nbsp;(&amp;nbsp;plan_handle&amp;nbsp;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/stswordman/aggbug/2118405.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/07/27/2118405.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stswordman/archive/2011/07/19/2110443.html</id><title type="text">一个单表死锁的示例</title><summary type="text">准备数据，插入1w条数据 create table locktest(id int primary key identity(1,1))gobegin traninsert locktest default valuesgo 10000commit 执行顺序如下，在第三部的时候会出现死锁 执行顺序 session1 session2 1 begin trandelete from locktest where id=2 2 set transaction isolation level repeatable readbegin transelect * from locktest where </summary><published>2011-07-19T04:48:00Z</published><updated>2011-07-19T04:48:00Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stswordman/archive/2011/07/19/2110443.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/archive/2011/07/19/2110443.html"/><content type="html">&lt;p&gt;准备数据，插入1w条数据&lt;/p&gt; &lt;p&gt;create&amp;nbsp; table locktest(id int primary key identity(1,1))&lt;br /&gt;go&lt;br /&gt;begin tran&lt;br /&gt;insert locktest default values&lt;br /&gt;go 10000&lt;br /&gt;commit&lt;br /&gt;&lt;/p&gt; &lt;p&gt;执行顺序如下，在第三部的时候会出现死锁&lt;/p&gt; &lt;table style="color: #4b4b4b" border="0" cellpadding="2" cellspacing="0" width="401"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="110"&gt;执行顺序&lt;/td&gt; &lt;td valign="top" width="140"&gt;session1 &lt;/td&gt; &lt;td valign="top" width="149"&gt;session2&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="110"&gt;1&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;begin tran&lt;br /&gt;delete from locktest where id=2&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="149"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="110"&gt;2&lt;/td&gt; &lt;td valign="top" width="140"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="149"&gt; &lt;p&gt;set transaction isolation level repeatable read&lt;br /&gt;begin tran&lt;br /&gt;select * from locktest where id&amp;lt;3&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="110"&gt;3&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;delete from locktest where id=1&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="149"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="158"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="174"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/stswordman/aggbug/2110443.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/07/19/2110443.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stswordman/archive/2011/07/14/2106504.html</id><title type="text">DDL Trigger</title><summary type="text">create TRIGGER indexTrigger ON ALL SERVER --FOR DROP_INDEX ,ALTER_INDEX,create_indexFOR DROP_INDEXAS declare @original_login sysname ,@login_name sysname,@user_name sysname,@eventtype nvarchar(100),@commandText nvarchar(max),@dbname sysnameselect @original_login=ORIGINAL_LOGIN(),@login_name=SUSER_NA</summary><published>2011-07-14T08:20:00Z</published><updated>2011-07-14T08:20:00Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stswordman/archive/2011/07/14/2106504.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/archive/2011/07/14/2106504.html"/><content type="html">&lt;p&gt;&lt;br /&gt;create TRIGGER indexTrigger &lt;br /&gt;ON ALL SERVER &lt;br /&gt;--FOR DROP_INDEX ,ALTER_INDEX,create_index&lt;br /&gt;FOR DROP_INDEX&lt;br /&gt;AS &lt;br /&gt;declare @original_login sysname ,@login_name sysname,@user_name sysname,@eventtype nvarchar(100),@commandText nvarchar(max),@dbname sysname&lt;br /&gt;select &lt;br /&gt;@original_login=ORIGINAL_LOGIN(),&lt;br /&gt;@login_name=SUSER_NAME(),&lt;br /&gt;@user_name=CURRENT_USER,&lt;br /&gt;@dbname=EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'sysname') ,&lt;br /&gt;@eventtype= EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)') ,&lt;br /&gt;@commandText= EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')&lt;/p&gt; &lt;p&gt;if not exists(select 1 from tempdb.sys.tables where name='indexTrigger')&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; create table tempdb.DBO.indexTrigger(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; original_login sysname ,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; login_name sysname,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user_name sysname,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eventtype nvarchar(100),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; commandText nvarchar(max),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dbname sysname,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; createtime datetime default getdate()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;end&lt;br /&gt;insert tempdb.dbo.indexTrigger([original_login],[login_name],[user_name],[eventtype],[commandText],dbname)&lt;br /&gt;select @original_login,@login_name,@user_name,@eventtype,@commandText,@dbname&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms173781%28v=sql.90%29.aspx"&gt;EVENTDATA (Transact-SQL)&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/stswordman/aggbug/2106504.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/07/14/2106504.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stswordman/archive/2011/07/07/2100280.html</id><title type="text">DistributionDB过大的原因</title><summary type="text">1 同一个发布库的对象被多个发布包(n)所包含，导致产生了n倍的数据 在发布库执行下面的语句，会返回被多次发布的对象 select objid,count(*) from sysarticles group by objid having(count(*)&amp;gt;1) order by COUNT(*) desc 2 distribution cleanup job停止工作，导致MSrepl_commands和MSrepl_transactions数据无法被清除 3 发布库中的任意一个发布的匿名订阅属性/立即初始化属性为true，这会导致全部的数据在max retention到达之前无法被删除</summary><published>2011-07-07T09:05:00Z</published><updated>2011-07-07T09:05:00Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stswordman/archive/2011/07/07/2100280.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/archive/2011/07/07/2100280.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;1 同一个发布库的对象被多个发布包(n)所包含，导致产生了n倍的数据  &lt;p&gt;在发布库执行下面的语句，会返回被多次发布的对象  &lt;p&gt;select objid,count(*) from sysarticles group by objid having(count(*)&amp;gt;1) order by COUNT(*) desc  &lt;p&gt;2 distribution cleanup job停止工作，导致MSrepl_commands和MSrepl_transactions数据无法被清除  &lt;p&gt;3 发布库中的任意一个发布的匿名订阅属性/立即初始化属性为true，这会导致全部的数据在max retention到达之前无法被删除（具体的删除逻辑见sp_MSdelete_publisherdb_trans）  &lt;p&gt;在distributiondb执行下面的语句，找出存在匿名订阅/立即初始化的发布:  &lt;p&gt;select a.article,p.publication from MSsubscriptions s inner join MSpublications p&lt;br&gt;on s.publication_id=p.publication_id &lt;br&gt;inner join MSarticles a&amp;nbsp; on s.article_id=a.article_id&amp;nbsp; where &lt;strong&gt;&lt;font color="#ff0000"&gt;subscriber_id &amp;lt; 0&lt;/font&gt;&lt;/strong&gt; &lt;br&gt;go&lt;br&gt;sp_helpdistpublisher&lt;/p&gt; &lt;p&gt;找到后在发布库执行以下语句即可  &lt;p&gt;exec sp_changepublication @publication = 'xx' ,@property = 'allow_anonymous' , @value = false  &lt;p&gt;exec sp_changepublication @publication = 'publicationTest' , @property = 'immediate_sync' , @value = false&lt;/p&gt; &lt;img src="http://www.cnblogs.com/stswordman/aggbug/2100280.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/07/07/2100280.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stswordman/archive/2011/06/21/2072296.html</id><title type="text">事物复制的troubleshooting 1</title><summary type="text">本文大量照抄了Transactional Replication Conversations 上图是一个事物复制的拓扑. 大致可以把这个流程分为3步 logReader Agent从publicationDB的日志文件中读取需要复制的日志信息 logReader Agent将读取的信息写入到distributor的distribution库中 distribution Agent将distribution库中的数据写入到subscriber 三个阶段都可能出现性能问题. 先使用tracertoken进行定位，找到是哪一部出现问题 如果是发布到分发的问题 在logreader agent的作业里</summary><published>2011-06-21T08:06:00Z</published><updated>2011-06-21T08:06:00Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stswordman/archive/2011/06/21/2072296.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/archive/2011/06/21/2072296.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&lt;div&gt;本文大量照抄了&lt;a href="http://blogs.msdn.com/b/chrissk/archive/2009/05/25/transactional-replication-conversations.aspx"&gt;Transactional Replication Conversations&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106032131092199.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106032131107399.png" border="0" height="503" width="327" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;上图是一个事物复制的拓扑. 大致可以把这个流程分为3步&lt;/p&gt; &lt;ol&gt; &lt;li&gt;logReader Agent从publicationDB的日志文件中读取需要复制的日志信息  &lt;/li&gt;&lt;li&gt;logReader Agent将读取的信息写入到distributor的distribution库中  &lt;/li&gt;&lt;li&gt;distribution Agent将distribution库中的数据写入到subscriber&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;三个阶段都可能出现性能问题. 先使用&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/06/01/2065979.html"&gt;tracertoken&lt;/a&gt;进行定位，找到是哪一部出现问题&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="6"&gt;&lt;strong&gt;如果是发布到分发的问题&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;在logreader agent的作业里添加output参数,输出具体的信息. 方法见参见&amp;#8217;&lt;a href="http://support.microsoft.com/kb/312292/en-us"&gt;How to enable replication agents for logging to output files in SQL Server&amp;#8217;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;和 &lt;a href="http://blogs.msdn.com/b/repltalk/archive/2010/07/13/using-verbose-history-agent-profile-while-troubleshooting-replication.aspx"&gt;Using &amp;#8220;Verbose history agent profile.&amp;#8221; while troubleshooting Replication&lt;/a&gt;&lt;/p&gt; &lt;p&gt;一个示例:-Publisher [TESTDB1] -PublisherDB [pub] -Distributor [TESTDB2] -DistributorSecurityMode 1&amp;nbsp; -Continuous&amp;nbsp; -Output C:\sqldata\logreader.txt -Outputverboselevel 2&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;下面是文本输出的部分信息.&lt;/p&gt; &lt;p&gt;******************** STATISTICS SINCE AGENT STARTED ***************************&lt;br /&gt;06-01-2011 15:28:36&lt;/p&gt; &lt;p&gt;Execution time (ms): 633551&lt;br /&gt;Work time (ms): 633348&lt;br /&gt;Distribute Repl Cmds Time(ms): 620035&lt;br /&gt;&lt;strong&gt;Fetch time(ms): 658458&lt;/strong&gt;&lt;br /&gt;Repldone time(ms): 60429&lt;br /&gt;&lt;strong&gt;Write time(ms): 273870&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Num Trans: 667500&amp;nbsp; Num Trans/Sec: 1053.922962&lt;br /&gt;&amp;nbsp;&amp;nbsp; Num Cmds: 3076294&amp;nbsp; Num Cmds/Sec: 4857.193833&lt;br /&gt;*******************************************************************************&lt;/p&gt; &lt;p&gt;在分析这段统计信息之前先介绍一下发布到分发传输数据的大致步骤:&lt;/p&gt; &lt;p&gt;1 发布库数据被更新/插入/删除,产生事务日志(这其中包含需要进行复制的日志记录和不需要进行日志记录的事物)&lt;/p&gt; &lt;p&gt;2 LogReader agent去读取日志信息:&lt;/p&gt; &lt;ol&gt; &lt;ol&gt; &lt;p&gt;i.&amp;nbsp;&amp;nbsp;&amp;nbsp; 读取LogReader profile里的配置信息,按照这些信息的配置参数去工作.(代理重启时会执行这个操作,然后将信息存储起来,直到下次代理重启才会再次执行). 例如每次读取多少记录,多长时间读取一次.详细信息查看&lt;strong&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/06/02/2068718.html"&gt;Agent的profile信息&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;ii.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://msdn.microsoft.com/en-us/library/ms186983.aspx"&gt;sp_replcmds&lt;/a&gt;命令读取事务日志, 这是一个sp_replcmds调用的示例: exec sp_replcmds 1000,0,-1,0x,5023,0,500000 .其中第一个参数1000为ReadBatchSize. [在发布端执行]&lt;br /&gt;iii.&amp;nbsp;&amp;nbsp;&amp;nbsp; sp_MSadd_repl_commands去处理sp_replcmds得到的日志信息,将这些信息转化后插入distribution库[在分发端执行]&lt;br /&gt;iv.&amp;nbsp;&amp;nbsp;&amp;nbsp; sp_repldone对日志记录进行标记(之后这些日志记录就允许被截断了,并且避免被再次读取..), 也就是那些已经在distribution端处理的记录.[在发布端执行]&lt;/p&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Execution time&lt;/strong&gt;:从logreader agent开始运行之后的总时间&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Work time&lt;/strong&gt;:除去Ideal后的Execution time, 是刨去PollingInterval的时间。另外，如果代理程序处于Idle状态（例如没有事务需要发布，都不会算作Work Time）&lt;/p&gt; &lt;p&gt;. 如果复制出现延迟,并且Work time和Execution Time有明显差距,则可能需要调整pollinginterval和ReadBatchSize&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Distribute Repl Cmds Time&lt;/strong&gt;:从publisher上读取出需要复制的事务的信息、写入缓存并写入到distribution库中所持续的总时间&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Fetch time:&lt;/strong&gt; 读取事物日志的时间,对应前面的&lt;strong&gt;ii&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Repldone time&lt;/strong&gt;: sp_repldone花费的时间,对应&lt;strong&gt;iv&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Write time&lt;/strong&gt;:将读取到的信息写入distribution花费的时间.对应&lt;strong&gt;iii&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;分析&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;一般来说，消耗时间的步骤就是ii和iii&lt;/p&gt; &lt;p&gt;第ii步是发布端执行,造成延迟的原因可能如下: &lt;/p&gt;&lt;p&gt;1. 执行了一些操作,这些操作产生的大量的不需要被复制的日志记录(例如rebuild index). logreader在读取时候需要进行筛选,大量的非复制性日志会延长时间.  &lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;在非高峰时间运行rebuild index, 或者将恢复模式切换成BULK_LOGGED&lt;/p&gt; &lt;p&gt;下面的语句返回发布库中需要复制的数据和非复制数据&lt;/p&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;Use&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;published&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;database&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;Total&amp;nbsp;records&amp;nbsp;in&amp;nbsp;the&amp;nbsp;log&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;count&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;::fn_dblog(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;GO&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;--&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;Records&amp;nbsp;marked&amp;nbsp;for&amp;nbsp;REPLICATION&lt;/span&gt;&lt;span style="color: #008080;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;count&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;::fn_dblog(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Description&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;REPLICATE&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt; &lt;p&gt;2. 一个事务里的命令操作了很多行数据,产生了大量的日志 &lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;避免这种情况,将大事物拆分成小的事物分批执行.  &lt;/p&gt;&lt;p&gt;考虑使用&lt;a href="http://msdn.microsoft.com/en-us/library/ms152754.aspx"&gt;Publishing Stored Procedure Execution in Transactional Replication&lt;/a&gt; &lt;/p&gt;&lt;p&gt;调整MaxCmdsInTran。 缺点：如果发布库事务回滚，会导致发布服务器和分发服务器数据不一致。 参考&lt;a href="http://msdn.microsoft.com/en-us/library/ms146878.aspx"&gt;Replication Log Reader Agent&lt;/a&gt; &lt;/p&gt;&lt;p&gt;可以使用下面的语句查看 &lt;/p&gt;&lt;p&gt;在发布服务器执行 &lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;database&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;,begin_lsn,commit_lsn,rows,cmds_in_tran&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sys.dm_repl_traninfo &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;或者在分发库执行 &lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;xact_seqno,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;count&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;count&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;into&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;#MSrepl_commands&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dbo.MSrepl_commands&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;group&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;by&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;xact_seqno&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;having&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;count&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t.xact_seqno,t.entry_time,c.&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;[&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;count&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;MSrepl_Transactions&amp;nbsp;t&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;inner&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;join&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;#MSrepl_commands&amp;nbsp;c&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t.xact_seqno&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;c.xact_seqno&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;order&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;by&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;c.&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;count&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;desc&lt;/span&gt;&lt;span style="color: #000000;"&gt;,t.entry_time&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt; &lt;p&gt;3. 小而多的&lt;a href="http://support.microsoft.com/kb/949523"&gt;VLF&lt;/a&gt; &lt;/p&gt;&lt;p&gt;过的的VLF会影响日志读取速度, 造成这种情况的原因多是日志的FILEGROWTH 过小(例如1mb)并且日志频繁的自动扩张. 解决方法:日志文件压缩,然后一次性扩张到预期的大小. 通过dbcc loginfo返回当前数据库的VLF信息. &amp;lt;1000是可以接受的 &lt;/p&gt;&lt;p&gt;4. 日志磁盘存在IO压力. 如果发布数据库的压力,会影响读取速度. 解决方法:将文件存放在更高性能的磁盘上.通过performance monitor进行监控Avg. Disk Sec/Read和Avg. Disk Sec/Write,请参考&lt;a href="http://msdn.microsoft.com/en-us/library/dd672789%28v=sql.100%29.aspx"&gt;Troubleshooting Performance Problems in SQL Server 2008&lt;/a&gt; &lt;/p&gt;&lt;p&gt;5. Logreader配置错误。例如ReadBatchSize设置过小或PollingInterval设置过大 &lt;/p&gt;&lt;p&gt;6. 网络原因。 发布服务器和分发服务器之间存在网络瓶颈。检查两个服务器的Performance monitor的Network Interface output queue length.理想情况应当低于2 &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;第iii部是分发端执行,造成延迟的原因可能如下:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;1 不良的复制结构：同一个对象被多个发布所（n个）包含，这样在msrepl_commands和MSrepl_transationcs会产生n倍的对象，导致插入时间增长。在发布库执行以下语句，返回被多次发布的对象:&lt;/p&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;objid,&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;count&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sysarticles&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;group&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;by&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;objid&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;having&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;count&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;order&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;by&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;COUNT&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;desc&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;2 阻塞：插入作业和清除作业之间形成阻塞. 解决方法：在非高峰时间运行清除作业，不过这样会导致distribution agent运行效率降低 &lt;br /&gt;3 IO压力：distribution的日志盘存在io压力，导致写入缓慢。参见上文 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2,3还可以通过 SQL SERVER 2005/8 Performance Dashboard Reports查看 &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;SQLSERVER PROFILER收集logreader相关的命令 &lt;/p&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;duration,&amp;nbsp;starttime,&amp;nbsp;endtime,&amp;nbsp;textdata&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;::fn_trace_gettable(&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;C:\DISTRIBUTOR_sp_trace.trc&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DEFAULT&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;TEXTDATA&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;LIKE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;%SP_MSadd_replcmds%&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;AND&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EVENTCLASS&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Or &lt;/p&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;TOP&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;25&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;st.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;qp.query_plan,&lt;br /&gt;&lt;br /&gt;(qs.total_logical_reads&lt;/span&gt;&lt;span style="color: #808080;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;qs.execution_count)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;avg_logical_reads,&lt;br /&gt;&lt;br /&gt;(qs.total_logical_writes&lt;/span&gt;&lt;span style="color: #808080;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;qs.execution_count)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;avg_logical_writes,&lt;br /&gt;&lt;br /&gt;(qs.total_physical_reads&lt;/span&gt;&lt;span style="color: #808080;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;qs.execution_count)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;avg_phys_reads,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;qs.&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sys.dm_exec_query_stats&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;qs&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CROSS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;APPLY&amp;nbsp;sys.dm_exec_sql_text(qs.sql_handle)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;st&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;CROSS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;APPLY&amp;nbsp;sys.dm_exec_query_plan(qs.plan_handle)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;qp&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;st.&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;text&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;like&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;CREATE&amp;nbsp;PROCEDURE&amp;nbsp;sp_MSadd_replcmds%&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;ORDER&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;BY&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;qs.total_worker_time&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;DESC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/chrissk/archive/2009/05/25/transactional-replication-conversations.aspx"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="6"&gt;&lt;strong&gt;如果是分发到订阅的问题&amp;#8230;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="6"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/stswordman/aggbug/2072296.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/06/21/2072296.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stswordman/archive/2011/06/16/2082696.html</id><title type="text">distribution cleanup job2</title><summary type="text">第25行开始清除事务和命令 sp_MSdistribution_delete以发布库（@publisher_database_id)为单位清除： 第15行，得到改发布库的需要清除的最大序列号（@max_cleanup_xact_seqno) 地20行，调用sp_MSdelete_publisherdb_trans来删除这些数据，所以早于@max_cleanup_xact_seqno的数据都会被删除 sp_MSdelete_publisherdb_trans是真正执行删除操作的存储过程。该存储过程删除msrepl_commands，并通过调用sp_MSdelete_dodelete来删除msre</summary><published>2011-06-16T06:56:00Z</published><updated>2011-06-16T06:56:00Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stswordman/archive/2011/06/16/2082696.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/archive/2011/06/16/2082696.html"/><content type="html">第25行开始清除事务和命令&lt;a href="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106161456185613.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106161456193171.png" width="879" border="0" height="617" /&gt;&lt;/a&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;sp_MSdistribution_delete以发布库（@publisher_database_id)为单位清除：&lt;/p&gt; &lt;ol&gt; &lt;li&gt;第15行，得到改发布库的需要清除的最大序列号（@max_cleanup_xact_seqno)&lt;/li&gt; &lt;li&gt;地20行，调用sp_MSdelete_publisherdb_trans来删除这些数据，所以早于@max_cleanup_xact_seqno的数据都会被删除&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106161456193760.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106161456207938.png" width="1019" border="0" height="526" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;sp_MSdelete_publisherdb_trans是真正执行删除操作的存储过程。该存储过程删除msrepl_commands，并通过调用sp_MSdelete_dodelete来删除msrepl_transactions&lt;/p&gt;&lt;img src="http://www.cnblogs.com/stswordman/aggbug/2082696.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/06/16/2082696.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stswordman/archive/2011/06/15/2081269.html</id><title type="text">在分发服务器上查看信息</title><summary type="text">1 发布信息 use [distribution] select publication,publication_id,publisher_db, case publication_type when 0 then &amp;#39;transactional&amp;#39; when 1 then &amp;#39;snapshot&amp;#39; when 2 then &amp;#39;merge&amp;#39; end as publication_type , allow_anonymous, case sync_method when 0 then &amp;#39;native&amp;#39; when 1 then &amp;#39;cha</summary><published>2011-06-15T02:46:00Z</published><updated>2011-06-15T02:46:00Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stswordman/archive/2011/06/15/2081269.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/archive/2011/06/15/2081269.html"/><content type="html">&lt;p&gt;&lt;font size="5"&gt;&lt;strong&gt;1 发布信息&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;use [distribution]&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;select publication,publication_id,publisher_db, case publication_type &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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when 0 then 'transactional' &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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when 1 then 'snapshot' &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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when 2 then 'merge' &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;&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;&amp;nbsp; end&amp;nbsp; as publication_type , &lt;br /&gt;allow_anonymous,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case sync_method &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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when 0 then 'native' &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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when 1 then 'character' &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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when 3 then 'concurrent' &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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when 4 then 'concurrent_c' &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;&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;&amp;nbsp; end&amp;nbsp; as publication_type , &lt;br /&gt;allow_initialize_from_backup &lt;br /&gt;From MSpublications&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106021709466905.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106021709487820.png" border="0" height="98" width="648" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="5"&gt;2 查看Agent的profile信息&lt;/font&gt;&lt;/strong&gt;, 每个agent都有相应的系统表可以供查看:&lt;/p&gt; &lt;p&gt;select *From MSsnapshot_agents&lt;/p&gt; &lt;p&gt;select *From MSdistribution_agents &lt;br /&gt;select *From MSlogreader_agents&lt;/p&gt; &lt;p&gt;上面的查询会返回正在应用的profileid,将返回的profileid赋值&lt;a href="http://technet.microsoft.com/en-us/library/ms187318%28SQL.100%29.aspx"&gt;sp_help_agent_parameter&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;我们以logReader agent为例&lt;/p&gt; &lt;p&gt;select *From MSlogreader_agents&lt;/p&gt; &lt;p&gt;exec sp_help_agent_parameter @profile_id=17&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/stswordman/201106/20110602170948295.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106021709529932.png" border="0" height="217" width="1004" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="5"&gt;3 查看是否存在匿名订阅(allow_anonymous)或立即初始化(immediate_sync)选项&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;select * from MSsubscriptions where subscriber_id &amp;lt; 0&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这两个选项会导致msrepl_transactions和msrepl_commands表的内容在到达max retention之前无法被分发清除作业清除.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/stswordman/aggbug/2081269.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/06/15/2081269.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/stswordman/archive/2011/06/14/2080396.html</id><title type="text">Top子句对查询计划的影响</title><summary type="text">1子查询的影响 Nest loop适用于被连接的数据 如果两个表做join操作,会有三种join方式: Nested join, Merge Join, Hash Join Nested Join适用于结果集较小表 Hash Join适用于结果集很大的表 示例如下 createtablemoderatetable1(idintidentity(1,1)primarykey,c1int,c2int,c3int,c4int)createtablemoderatetable2(idintidentity(1,1)primarykey,c1int,c2int,c3int,c4int)declare@n</summary><published>2011-06-14T03:02:00Z</published><updated>2011-06-14T03:02:00Z</updated><author><name>stswordman</name><uri>http://www.cnblogs.com/stswordman/</uri></author><link rel="alternate" href="http://www.cnblogs.com/stswordman/archive/2011/06/14/2080396.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/stswordman/archive/2011/06/14/2080396.html"/><content type="html">&lt;p&gt;&lt;strong&gt;1子查询的影响&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Nest loop适用于被连接的数据&lt;/p&gt; &lt;p&gt;如果两个表做join操作,会有三种join方式: Nested join, Merge Join, Hash Join&lt;/p&gt; &lt;p&gt;Nested Join适用于结果集较小表&lt;/p&gt; &lt;p&gt;Hash Join适用于结果集很大的表&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;示例如下&lt;/p&gt; &lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;create&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;table&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable1(id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;identity&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;primary&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;key&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;c1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;,c2&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;,c3&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;,c4&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;create&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;table&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable2(id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF00FF;"&gt;identity&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;primary&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;key&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;c1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;,c2&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;,c3&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;,c4&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;declare&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&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: #800000; font-weight: bold;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;100000&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;insert&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable1(c1,c2,c3,c4)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;values&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;insert&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable2(c1,c2,c3,c4)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;values&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;@n&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;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;create&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;index&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;index1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable1(C1)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;create&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;index&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;index1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable2(C2)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;go&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;statistics&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;io&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t1.c1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable1&amp;nbsp;t1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;inner&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;join&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable2&amp;nbsp;t2&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t1.c1&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;t2.c1&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;下图是上面查询的执行计划和io统计信息&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106141101394372.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106141101406597.png" border="0" height="227" width="684" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;IO情况&lt;/p&gt; &lt;p&gt;(100000 行受影响)&lt;br /&gt;表 'Worktable'。扫描计数 0，逻辑读取 0 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。&lt;br /&gt;表 'moderatetable2'。扫描计数 1，逻辑读取 361 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。&lt;br /&gt;表 'moderatetable1'。扫描计数 1，逻辑读取 176 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。&lt;/p&gt; &lt;p&gt;(1 行受影响)&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;如果只想取前50行,可以指定top 50:&lt;/p&gt; &lt;p&gt;select top 50 t1.c1 from moderatetable1 t1 inner join moderatetable2 t2&lt;br /&gt;on t1.c1=t2.c1&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106141101404438.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106141101405550.png" border="0" height="172" width="831" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;(50 行受影响)&lt;br /&gt;表 'moderatetable1'。扫描计数 50，逻辑读取 124 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。&lt;br /&gt;表 'moderatetable2'。扫描计数 1，逻辑读取 2 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。&lt;/p&gt; &lt;p&gt;(1 行受影响)&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;我们看到,当指定了top 50之后,查询计划成了nested join.&amp;nbsp; 当使用TOP时,SQLSEVER会认为这是一个较小的数据集,所以会使用nested join.对于这个查询,IO的开销比较李小. 但SQLSERVER经常会估计错误(即使统计信息是正确的).&lt;/p&gt; &lt;p&gt;我们看一下下面的查询:&lt;/p&gt; &lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;top&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;500&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t1.c1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable1&amp;nbsp;t1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;inner&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;join&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable2&amp;nbsp;t2&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t1.c1&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;t2.c1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106141101406979.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106141101418092.png" border="0" height="180" width="858" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(500 行受影响)&lt;br /&gt;表 'moderatetable1'。扫描计数 500，逻辑读取 1080 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。&lt;br /&gt;表 'moderatetable2'。扫描计数 1，逻辑读取 4 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。&lt;/p&gt; &lt;p&gt;(1 行受影响)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;返回行数增加到了500,SQLSERVER仍然使用nested join,得到了较差的IO&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;随着TOP的行数的增多,IO开销会越来越大. 但也不是总是这样,当top值达到一个临界点后,执行计划会变更成hash join.&lt;/p&gt; &lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;top&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;20000&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t1.c1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable1&amp;nbsp;t1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;inner&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;join&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;moderatetable2&amp;nbsp;t2&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;on&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;t1.c1&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;t2.c1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106141101413108.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/stswordman/201106/201106141101417045.png" border="0" height="211" width="868" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;(20000 行受影响)&lt;br /&gt;表 'Worktable'。扫描计数 0，逻辑读取 0 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。&lt;br /&gt;表 'moderatetable2'。扫描计数 1，逻辑读取 74 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。&lt;br /&gt;表 'moderatetable1'。扫描计数 1，逻辑读取 176 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。&lt;/p&gt; &lt;p&gt;(1 行受影响)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;慎用TOP ...&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/stswordman/aggbug/2080396.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/stswordman/archive/2011/06/14/2080396.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
