﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<?xml-stylesheet type="text/css" href="/style/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>FSherp RSS</title>
    <link>http://qianxun.net</link>
    <description>FSherp聚合资料</description>
    <generator>RainbowSoft Studio Z-Blog 1.6 Final Build 60816</generator>
    <language>zh-CN</language>
    <copyright>Copyright 2008 FSherp.cn Some Rights Reserved.</copyright>
    <pubDate>Fri, 20 Mar 2009 10:48:42 GMT</pubDate>
    <lastBuildDate>Fri, 20 Mar 2009 10:48:42 GMT</lastBuildDate>
    <item>
      <title>SQL Server 性能调优札记之三</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/2/4641.shtml</link>
      <pubDate>20 Feb 2009 11:01:46</pubDate>
      <guid>http://qianxun.net/Post/2009/2/4641.shtml</guid>
      <description><![CDATA[<div><h2>提出方案</h2><p>以下是找出来的TOP SQL 。</p><div class="wp_codebox"><pre><span style="color: blue">select distinct </span>s<span style="color: gray">.</span>parentId<span style="color: gray">,</span>s<span style="color: gray">.</span>pkId<span style="color: gray">,</span>1<span style="color: gray">,</span>s<span style="color: gray">.</span>title<span style="color: gray">,</span>s<span style="color: gray">.</span>comeOrg<span style="color: gray">,</span>s<span style="color: gray">.</span>fileDate<span style="color: gray">,    </span>s<span style="color: gray">.</span>fileName<span style="color: gray">,</span>s<span style="color: gray">.</span>filePath<span style="color: gray">,</span>1<span style="color: gray">,</span>l<span style="color: gray">.</span>optionstatus<span style="color: gray">,</span>s<span style="color: gray">.</span>remark3<span style="color: gray">,</span>urgencyLevel    <span style="color: blue">from </span>shouwen <span style="color: blue">as </span>s<span style="color: gray">,     </span>jt_ComitOA<span style="color: gray">.</span>dbo<span style="color: gray">.</span><span style="color: magenta">log </span><span style="color: blue">as </span>l     <span style="color: blue">where     </span><span style="color: gray">(</span>s<span style="color: gray">.</span>fileSerialNumber <span style="color: gray">like </span><span style="color: red">'%%' </span><span style="color: gray">or </span>s<span style="color: gray">.</span>title <span style="color: gray">like </span><span style="color: red">'%%'      </span><span style="color: gray">or </span>s<span style="color: gray">.</span>keywords <span style="color: gray">like </span><span style="color: red">'%%' </span><span style="color: gray">or </span>s<span style="color: gray">.</span>fileZi <span style="color: gray">like </span><span style="color: red">'%%'</span><span style="color: gray">)      and  </span>s<span style="color: gray">.</span>status<span style="color: gray">&lt;&gt;</span><span style="color: red">'4'      </span><span style="color: gray">and </span>s<span style="color: gray">.</span>pkid <span style="color: gray">in        (</span><span style="color: blue">select distinct</span><span style="color: gray">(</span>mid<span style="color: gray">) </span><span style="color: blue">from </span><span style="color: magenta">log </span><span style="color: blue">where uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span>typeid<span style="color: gray">=</span><span style="color: red">'shouwen'</span><span style="color: gray">)     and </span>l<span style="color: gray">.</span>mid<span style="color: gray">=</span>s<span style="color: gray">.</span>pkid <span style="color: gray">and </span><span style="color: blue">uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span>typeid<span style="color: gray">=</span><span style="color: red">'shouwen'</span><span style="color: blue">order by </span>s<span style="color: gray">.</span>fileDate <span style="color: blue">desc  </span></pre></div><p>从执行计划中可以看到两个比较大操作，两个对Log表&ldquo;聚集索引扫描&rdquo;，观察语句不难以下发现就是导致两个&ldquo;聚集索引扫描&rdquo;的原因。</p><div class="wp_codebox"><pre><span style="color: gray">(</span><span style="color: blue">select distinct</span><span style="color: gray">(</span>mid<span style="color: gray">) </span><span style="color: blue">from </span><span style="color: magenta">log </span><span style="color: blue">where uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span>typeid<span style="color: gray">=</span><span style="color: red">'shouwen'</span><span style="color: gray">)</span></pre></div><div class="wp_codebox"><pre><span style="color: gray">and </span>l<span style="color: gray">.</span>mid<span style="color: gray">=</span>s<span style="color: gray">.</span>pkid <span style="color: gray">and </span><span style="color: blue">uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span>typeid<span style="color: gray">=</span><span style="color: red">'shouwen'</span></pre></div><p>这次运气比较好，mid、uid和typeid都在这两个语句里面，于是我计划在Log表的mid、uid和typeid上面建索引</p><div class="wp_codebox"><pre><span style="color: blue">CREATE NONCLUSTERED INDEX </span>[idx_log__uid_typeid] <span style="color: blue">ON </span>[Log] <span style="color: gray">(    </span>[uid] <span style="color: blue">ASC</span><span style="color: gray">,    </span>[typeID] <span style="color: blue">ASC</span><span style="color: gray">,    </span>[mid] <span style="color: blue">ASC</span><span style="color: gray">);</span></pre></div>看一下执行计划新的执行计划：<p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_BDA7/%E5%BB%BA%E7%B4%A2%E5%BC%95%E5%90%8E%E7%9A%84%E6%89%A7%E8%A1%8C%E8%AE%A1%E5%88%922.png"><img title="建索引后的执行计划2" border="0" alt="建索引后的执行计划2" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_BDA7/%E5%BB%BA%E7%B4%A2%E5%BC%95%E5%90%8E%E7%9A%84%E6%89%A7%E8%A1%8C%E8%AE%A1%E5%88%922_thumb.png" width="826" height="353" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>留意左上角对ShouWen这个表的聚集索引扫描，由原先的相对比例0%（其实是接近0%），上升到27%，可见整体的资源消耗已经大大降低了。</p><div class="MyCode"><pre>表 'Log'。扫描计数 2，逻辑读取 3272 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。表 'ShouWen'。扫描计数 1，逻辑读取 1436 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。SQL Server 执行时间:   CPU 时间 = 62 毫秒，占用时间 = 293 毫秒。</pre></div><p>对Log表的访问量大大减少，这可是有25万条数据的表啊，总的执行时间更是大大减少，疗效相当的不错啊。</p><p>至此，可以认为该调优已经达到很好的效果了，从26秒的执行时间缩减到0.3秒，非常不错的成绩了。</p><p>&nbsp;</p><h2>审视方案</h2><p>在新的执行计划中有两个键查找，键查找用来检索筛选索引没有涵盖的剩余列,说白了，就有一些输出列不在这个索引的覆盖范围中。看一下select的输出，的确有一个Log表的optionstatus字段，于是将索引的创建语句调整为：</p><div class="wp_codebox"><pre><span style="color: blue">CREATE NONCLUSTERED INDEX </span>[idx_log__uid_typeid] <span style="color: blue">ON </span>[Log] <span style="color: gray">(    </span>[uid] <span style="color: blue">ASC</span><span style="color: gray">,    </span>[typeID] <span style="color: blue">ASC</span><span style="color: gray">,    </span>[mid] <span style="color: blue">ASC</span><span style="color: gray">)</span><span style="color: blue">INCLUDE </span><span style="color: gray">( </span>[optionstatus]<span style="color: gray">)</span></pre></div><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_BDA7/image_2.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_BDA7/image_thumb.png" width="887" height="258" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a>&nbsp;</p><p>同样以左上角的ShouWen表的&ldquo;聚集索引扫描&rdquo;为参照点，就执行计划来看，的确资源占用率再次大大降低了，看看执行的统计信息。</p><div class="MyCode"><pre>表 'Log'。扫描计数 2，逻辑读取 16 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。表 'ShouWen'。扫描计数 1，逻辑读取 1436 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。SQL Server 执行时间:   CPU 时间 = 78 毫秒，占用时间 = 282 毫秒。</pre></div><p>Log表的逻辑读取数大大减少，执行时间并没有太大变化。这是由于这次缩减的是逻辑读，即在缓存中读取，通常缓存是在内存中的，内存可是比磁盘快多了。</p></div>]]></description>
      <category>2908</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>SQL Server 性能调优札记之二</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/2/4640.shtml</link>
      <pubDate>20 Feb 2009 11:01:03</pubDate>
      <guid>http://qianxun.net/Post/2009/2/4640.shtml</guid>
      <description><![CDATA[<div><h3>分析问题</h3><p>将数据库备份到一台测试的服务器上，查看一下数据库的数据文件和日志文件情况，发现日志文件比较大，貌似这也是一个SQL Server 存在的问题，具体原因不清楚，但是解决方法已经非常成熟，该问题暂时不影响使用，先不管它。</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_2.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_thumb.png" width="905" height="636" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a> 上一篇定位了问题，找出了多条Top SQL，其中这条最过分。</p><div class="wp_codebox"><pre><span style="color: blue">exec </span><span style="color: teal">oa_SWLIST </span><span style="color: red">'glzyf'</span><span style="color: gray">,</span><span style="color: red">'(s.fileSerialNumber like ''%%'' or s.title like ''%%'' or s.keywords like ''%%'' or s.fileZi like ''%%'') and '</span><span style="color: gray">,</span><span style="color: red">' (  ft.userid=''glzyf'' ) '</span></pre></div><p>&nbsp;</p><p>分析一下这个存储过程，我习惯是先看看SQL语句的结构，而不是马上看执行计划，或者直接跑语句获得统计信息。</p><div class="wp_codebox"><pre><span style="color: blue">ALTER PROCEDURE </span><span style="color: teal">[dbo]</span><span style="color: gray">.</span><span style="color: teal">[oa_SWLIST]    @userID </span><span style="color: blue">varchar</span><span style="color: gray">(</span>20<span style="color: gray">),    </span><span style="color: teal">@sql </span><span style="color: blue">varchar</span><span style="color: gray">(</span>1000<span style="color: gray">),    </span><span style="color: teal">@userIDs </span><span style="color: blue">varchar</span><span style="color: gray">(</span>1000<span style="color: gray">)</span><span style="color: blue">ASDECLARE </span><span style="color: teal">@SQL1 </span><span style="color: blue">nchar</span><span style="color: gray">(</span>4000<span style="color: gray">) ;</span><span style="color: blue">DECLARE </span><span style="color: teal">@SQL2 </span><span style="color: blue">nchar</span><span style="color: gray">(</span>4000<span style="color: gray">) ;</span><span style="color: blue">create table </span><span style="color: teal">#employees</span><span style="color: gray">(</span><span style="color: teal">[id] [int] </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) NOT NULL,</span><span style="color: teal">parentId </span><span style="color: blue">int</span><span style="color: gray">,</span><span style="color: teal">pkId </span><span style="color: blue">int</span><span style="color: gray">,</span><span style="color: blue">status int</span><span style="color: gray">,</span><span style="color: teal">title </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>1500<span style="color: gray">),</span><span style="color: teal">comeOrg </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>100<span style="color: gray">),</span><span style="color: teal">fileDate </span><span style="color: blue">DateTime</span><span style="color: gray">,</span><span style="color: blue">fileName nvarchar</span><span style="color: gray">(</span>4000<span style="color: gray">),</span><span style="color: teal">filePath </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>4000<span style="color: gray">),</span><span style="color: teal">readStatus </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>10<span style="color: gray">),</span><span style="color: teal">optionStatus </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>10<span style="color: gray">), </span><span style="color: teal">depId </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>20<span style="color: gray">),</span><span style="color: teal">urgencyLevel </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>10<span style="color: gray">));</span><span style="color: blue">set </span><span style="color: teal">@SQL1</span><span style="color: gray">=</span><span style="color: red">'insert into #employees (parentId,pkId,status,title,comeOrg,fileDate,fileName,filePath,readStatus,optionStatus,depId,urgencyLevel)select distinct s.parentId,s.pkId,0,s.title,s.comeOrg,s.fileDate,    s.fileName,s.filePath,ft.readStatus,0,s.remark3,case when urgencyLevel=''普通'' then 0when urgencyLevel=''急件'' then 1when urgencyLevel=''特办'' then 2when urgencyLevel=''特急件'' then 3when urgencyLevel=''限时'' then 4else 0end as urgencyLevel      from ShouWen as s ,  FlowTurning as ft where '</span><span style="color: gray">+</span><span style="color: teal">@sql</span><span style="color: gray">+</span><span style="color: red">' ft.status=0 and ft.type=''sw'' and s.pkid=ft.pkid and s.status&lt;&gt;''4'' and '</span><span style="color: gray">+</span><span style="color: teal">@userIDs</span><span style="color: gray">+</span><span style="color: red">' order by urgencyLevel desc,s.filedate desc'</span><span style="color: blue">set </span><span style="color: teal">@SQL2</span><span style="color: gray">=</span><span style="color: red">'insert into #employees (parentId,pkId,status,title,comeOrg,fileDate,fileName,filePath,readStatus,optionStatus,depId,urgencyLevel)select distinct s.parentId,s.pkId,1,s.title,s.comeOrg,s.fileDate,    s.fileName,s.filePath,1,l.optionstatus,s.remark3,urgencyLevel    from shouwen as s, log as l where '</span><span style="color: gray">+</span><span style="color: teal">@sql</span><span style="color: gray">+</span><span style="color: red">' s.status&lt;&gt;''4'' and s.pkid in(select distinct(mid) from log where uid='''</span><span style="color: gray">+</span><span style="color: teal">@userID</span><span style="color: gray">+</span><span style="color: red">''' and typeid=''shouwen'')and l.mid=s.pkid and uid='''</span><span style="color: gray">+</span><span style="color: teal">@userID</span><span style="color: gray">+</span><span style="color: red">''' and typeid=''shouwen''order by s.fileDate desc'</span><span style="color: blue">print </span><span style="color: gray">(</span><span style="color: teal">@SQL1</span><span style="color: gray">);</span><span style="color: blue">exec </span><span style="color: gray">(</span><span style="color: teal">@SQL1</span><span style="color: gray">)</span><span style="color: blue">print </span><span style="color: gray">(</span><span style="color: red">'+++++++++++++++++++++++++++++++++++'</span><span style="color: gray">);    </span><span style="color: blue">print </span><span style="color: gray">(</span><span style="color: teal">@SQL2</span><span style="color: gray">);</span><span style="color: blue">exec </span><span style="color: gray">(</span><span style="color: teal">@SQL2</span><span style="color: gray">)</span><span style="color: blue">select </span><span style="color: gray">* </span><span style="color: blue">from </span><span style="color: teal">#employees</span><span style="color: blue">delete from </span><span style="color: teal">#employees</span></pre></div><p>从结果来看该存储过程其实就是执行了两条动态SQL，分别存在@SQL1和SQL2。我稍微修改了一下存储过程，加入了一些调试信息，打开统计器。</p><div class="wp_codebox"><pre><span style="color: blue">SET STATISTICS IO on</span><span style="color: gray">; </span><span style="color: blue">SET STATISTICS TIME on</span><span style="color: gray">; </span></pre></div><p>执行存储过程，这里由于信息量比较大，我就不贴了，上一张图吧。</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_4.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_thumb_1.png" width="825" height="792" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>&nbsp;</p><p>可见@SQL1的语句耗时并不多，@SQL2资源占用是非常厉害的。其中 Log 表扫描530次，这个表的数据量有257417条，说大不大，说小也不小了，而且还得扫描530次，唉，啥也不说了，而shouwen这张表就小很多也有25000+条记录。</p><p>我将@SQL2的语句整理出来，去掉那个讨厌的 insert into #employees。</p><div class="wp_codebox"><pre><span style="color: blue">select distinct </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">parentId</span><span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">pkId</span><span style="color: gray">,</span>1<span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">title</span><span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">comeOrg</span><span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">fileDate</span><span style="color: gray">,    </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: blue">fileName</span><span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">filePath</span><span style="color: gray">,</span>1<span style="color: gray">,</span><span style="color: teal">l</span><span style="color: gray">.</span><span style="color: teal">optionstatus</span><span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">remark3</span><span style="color: gray">,</span><span style="color: teal">urgencyLevel    </span><span style="color: blue">from </span><span style="color: teal">shouwen </span><span style="color: blue">as </span><span style="color: teal">s</span><span style="color: gray">,     </span><span style="color: magenta">log </span><span style="color: blue">as </span><span style="color: teal">l     </span><span style="color: blue">where     </span><span style="color: gray">(</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">fileSerialNumber </span><span style="color: gray">like </span><span style="color: red">'%%' </span><span style="color: gray">or </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">title </span><span style="color: gray">like </span><span style="color: red">'%%'      </span><span style="color: gray">or </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">keywords </span><span style="color: gray">like </span><span style="color: red">'%%' </span><span style="color: gray">or </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">fileZi </span><span style="color: gray">like </span><span style="color: red">'%%'</span><span style="color: gray">)      and  </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: blue">status</span><span style="color: gray">&lt;&gt;</span><span style="color: red">'4'      </span><span style="color: gray">and </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">pkid </span><span style="color: gray">in        (</span><span style="color: blue">select distinct</span><span style="color: gray">(</span><span style="color: teal">mid</span><span style="color: gray">) </span><span style="color: blue">from </span><span style="color: magenta">log </span><span style="color: blue">where uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span><span style="color: teal">typeid</span><span style="color: gray">=</span><span style="color: red">'shouwen'</span><span style="color: gray">)     and </span><span style="color: teal">l</span><span style="color: gray">.</span><span style="color: teal">mid</span><span style="color: gray">=</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">pkid </span><span style="color: gray">and </span><span style="color: blue">uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span><span style="color: teal">typeid</span><span style="color: gray">=</span><span style="color: red">'shouwen'</span><span style="color: blue">order by </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">fileDate </span><span style="color: blue">desc  </span></pre></div><p>看看这个select 语句的执行计划啦。</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_6.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_thumb_2.png" width="870" height="296" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>以下才是重点，两个在Log表上面的&ldquo;聚集索引扫描&rdquo;：</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_8.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_thumb_3.png" width="633" height="269" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>无论哪个RDBMS的语句调优，绝大部分的情况下都是将执行计划中的&ldquo;扫描&rdquo;转变为&ldquo;查找&rdquo;。下一篇讲解如何将&ldquo;扫描&rdquo;变为&ldquo;查找&rdquo;。</p></div>]]></description>
      <category>2908</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>SQL Server 性能调优札记之一</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/2/4639.shtml</link>
      <pubDate>20 Feb 2009 11:00:24</pubDate>
      <guid>http://qianxun.net/Post/2009/2/4639.shtml</guid>
      <description><![CDATA[<div><h3>发现问题</h3><p>今天服务器检查的时候发现SQL Server 2005服务器的CPU负载很高，而且一直居高不下，这是我当时在现场的截图:</p><p>&nbsp;</p><p>服务器是一台4路服务器有4颗XEON 3GHz的CPU，8G的内容，SQL Server 2005是32位，打了SP2。</p><p>该服务器上跑了很多个业务系统的数据其中属于JT的数据库就有好几个，业务量还是挺大的。</p><p>排除是其他进程搞的鬼，确定是SQL Server 进程把服务器搞得这么忙。</p><p>&nbsp;<a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_B6EA/taskManager_CPU_Memory.png"><img title="taskManager_CPU_Memory" border="0" alt="taskManager_CPU_Memory" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_B6EA/taskManager_CPU_Memory_thumb.png" width="651" height="488" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><h3>定位问题</h3><p>打开活动监视器按照CPU排序，得到如下信息，可见jt_user在jt_ComitOA上面的连接所作所为都是大动作啊。</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_6.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_thumb_2.png" width="907" height="426" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>&nbsp;</p><p>&nbsp;</p><p>接下来换一个工具，SQL Server Profiler 出场，调整跟踪的属性，调整为只是监视&ldquo;SQL:Batch Completed&rdquo;，而且将&ldquo;DatabaseName&rdquo;这个列选上，再调整一下列筛选器，如图：</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_8.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_thumb_3.png" width="409" height="317" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>这个列筛选器有个小Bug，输入完条件后最好按一下回车，否则有可能输入无效，OK开始我们的跟踪之旅。我这里简单地设置了一下DatabaseName，LoginName，CPU和Duration ，以便过滤掉一些无关紧要的值。</p><p>经过半个小时的收集，我得到了如下的跟踪信息：</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_14.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_thumb_6.png" width="941" height="507" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>&nbsp;</p><p>我将部分语句Copy出来，顺便整理了一下格式。</p><div class="wp_codebox"><pre><span style="color: blue">exec </span><span style="color: teal">oa_SWLIST </span><span style="color: red">'glzyf'</span><span style="color: gray">,</span><span style="color: red">'(s.fileSerialNumber like ''%%'' or s.title like ''%%'' or s.keywords like ''%%'' or s.fileZi like ''%%'') and '</span><span style="color: gray">,</span><span style="color: red">' (  ft.userid=''glzyf'' ) '</span></pre></div><div class="wp_codebox"><pre><span style="color: blue">exec </span><span style="color: teal">oa_DBSX </span><span style="color: red">'cwkfss'</span><span style="color: gray">,</span><span style="color: red">''</span></pre></div><div class="wp_codebox"><pre><span style="color: blue">exec </span><span style="color: teal">oa_FlowTurning </span><span style="color: red">'jgstyb'</span></pre></div><div class="wp_codebox"><pre><span style="color: blue">update </span><span style="color: teal">FlowTurning </span><span style="color: blue">set </span><span style="color: teal">readStatus</span><span style="color: gray">=</span>1 <span style="color: blue">where type</span><span style="color: gray">=</span><span style="color: red">'sw' </span><span style="color: gray">and </span><span style="color: teal">pkid</span><span style="color: gray">=</span><span style="color: red">'21712' </span><span style="color: gray">and </span><span style="color: teal">userid</span><span style="color: gray">=</span><span style="color: red">'cwkfss'</span></pre></div><p>其中第一条语句的的占用率最严重，比其他的语句足足多了一个数量级。</p></div>]]></description>
      <category>2908</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
  </channel>
</rss>