﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><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>博客园-風語·深蓝</title><link>http://www.cnblogs.com/Xrinehart/</link><description>Agile Methodology, HeadStorm And MindMap, they will change me.</description><language>zh-cn</language><lastBuildDate>Wed, 03 Dec 2008 04:24:06 GMT</lastBuildDate><pubDate>Wed, 03 Dec 2008 04:24:06 GMT</pubDate><ttl>60</ttl><item><title>解决数据库查询中的锁冲突</title><link>http://www.cnblogs.com/Xrinehart/archive/2008/01/22/1049185.html</link><dc:creator>風語者·疾風</dc:creator><author>風語者·疾風</author><pubDate>Tue, 22 Jan 2008 12:30:00 GMT</pubDate><guid>http://www.cnblogs.com/Xrinehart/archive/2008/01/22/1049185.html</guid><wfw:comment>http://www.cnblogs.com/Xrinehart/comments/1049185.html</wfw:comment><comments>http://www.cnblogs.com/Xrinehart/archive/2008/01/22/1049185.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Xrinehart/comments/commentRss/1049185.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Xrinehart/services/trackbacks/1049185.html</trackback:ping><description><![CDATA[<P>公司的项目中遇到一个问题，以前解决过，不过忘记了具体的内容，所以记录一下。<BR>场景：<BR>压力环境下，不断在对数据库中的A表进行数据插入和更新；同时，为减轻数据库查询压力，所以开发人员对该表做了一个全缓存，每隔5分钟获取一次。这个时候就出现问题了：<BR>因为在读取同时，该表也正在做更新操作，而更新操作会导致那行记录被加锁，所以当SELECT到那行记录的时候会引发锁冲突异常。<BR>解决办法是：<BR>SELECT COUNT(*) FROM table WITH (NOLOCK)<BR>或者修改更新语句为：<BR>UPDATE TABLE WITH （ROWLOCK）SET…<BR><BR><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体"><FONT size=3>更为详细的内容引用别人的文章：<BR><BR><BR></P>
<P align=left><STRONG><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">NOLOCK的使用 </SPAN></STRONG><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体"></SPAN></P>
<P align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">NOLOCK可以忽略锁，直接从数据库读取数据。这意味着可以避开锁，从而提高性能和扩展性。但同时也意味着代码出错的可能性存在。你可能会读取到运行事务正在处理的无须验证的未递交数据。 这种风险可以量化。 </SPAN></P>
<P align=left><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">如果是金融方面的代码或者一些非常规的总计<SPAN lang=EN-US><FONT face=宋体>(你想绝对保证安全性)，你应该小心行事并且不使用这种技术。 但是我认为使用该技术会比你90%应用系统性能要好，当用户(或者是交互代码)发现一个未递交的修改时，使用技术会保证不会像未使用该技术那样引起大麻烦。实际上，你可能发现你的大多数数据很少或者甚至不进行 修改的，这样我们就不会因为这些数据被锁住而浪费大量的时间。 </FONT></SPAN></SPAN></P>
<P align=left><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">例如，如果你想统计在<SPAN lang=EN-US><FONT face=宋体>2000年6月份到8月份之间加入Streamload.com的所有用户，就没有理由去锁住任何记录： 2000年9月1号一到来，这个用户数就是确定的。又例如要列举在Streamload.com的文件列表：这种结果即使 不是100%的正确，也不是大问题。因为你要么不拥有该文件，当然也无所谓你是否能找到它，或者你确实拥有该文件，这种情况下你当然知道你是否修改了该文件，以及该文件是否已经上传完毕了。 </FONT></SPAN></SPAN></P>
<P align=left><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">但是，如果这些数据的修改，对数据库来说是基础性的修改，或者这些数据对于用户来说，必须是百分之百保证 是修改正确的<SPAN lang=EN-US><FONT face=宋体>(例如帐单或者余额数据)，那么你不要使用该技术。 </FONT></SPAN></SPAN></P>
<P align=left><STRONG><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">ROWLOCK的使用</SPAN></STRONG><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体"></SPAN> </P>
<P align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">ROWLOCK告诉SQL Server只使用行级锁。ROWLOCK语法可以使用在SELECT,UPDATE和DELETE语句中，不过 我习惯仅仅在UPDATE和DELETE语句中使用。如果在UPDATE语句中有指定的主键，那么就总是会引发行级锁的。但是当SQL Server对几个这种UPDATE进行批处理时，某些数据正好在同一个页面(page)，这种情况在当前情况下 是很有可能发生的，这就象在一个目录中，创建文件需要较长的时间，而同时你又在更新这些文件。当页面锁引发后，事情就开始变得糟糕了。而如果在UPDATE或者DELETE时，没有指定主键，数据库当然认为很多数据会收到影响，那样 就会直接引发页面锁，事情同样变得糟糕。 </SPAN></P>
<P align=left><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">通过指定使用行级锁，这种情况可以得到避免。但是需要小心的是，如果你错误地使用在过多行上，数据库并不会聪明到自动将行级锁升级到页面锁，服务器也会因为行级锁的开销而消耗大量的内存和<SPAN lang=EN-US><FONT face=宋体>CPU，直至无法响应。尤其主要留意的是 企业管理器中"管理/当前活动"(Management/Current Activity)这一项。该项会花较长的时间来载入锁的信息。这些信息 时十分有用的，当你使用行级锁后，你如果在"锁/处理"(Locks/Processes)下看到几百个锁，一点都不奇怪，而恰恰应该庆幸锁超时和死锁的问题减少了。 </FONT></SPAN></SPAN></P>
<P align=left><STRONG><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">注意事项</SPAN></STRONG><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体"></SPAN> </P>
<P align=left><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">我认为<SPAN lang=EN-US><FONT face=宋体>SQL Server倾向于使用NOLOCK关键字，而ROWLOCK关键字由用户根据情况自行决定。你可以仅仅在 SELECT语句中使用NOLOCK，这些SELECT语句场合包括INNER查询，以及在INSERT语句中的SELECT使用，在连接查询下也可以使用，例如： </FONT></SPAN></SPAN></P>
<P align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">SELECT COUNT</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">(Users.UserID)<BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">FROM</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体"> Users </SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">WITH</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体"> (</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">NOLOCK</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">)<BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">JOIN</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体"> UsersInUserGroups </SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">WITH</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体"> (</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">NOLOCK</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">) </SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">ON </SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体"><BR>Users.UserID = UsersInUserGroups.UserID </SPAN></P>
<P align=left><STRONG><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">NOLOCK 和 ROWLOCK的使用效果</SPAN></STRONG><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体"></SPAN> </P>
<P align=left><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">很难去量化在使用<SPAN lang=EN-US><FONT face=宋体>NOLOCK和ROWLOCK后，Streamload.com或者你的网站性能到底改善了多少。 不过在使用NOLOCK和ROWLOCK前，Streamload.com的速度很慢，而且经常无法使用，以及很不稳定。使用后，就变得快速、容易访问以及稳定了。两者简直就是天壤之别。这些改变当然无法在 关于锁的文档中很难找到。那些文档会建议你重写你的应用，当表数据被使用，锁产生了(没错，就是这样)，然后你应该使用小事务并且以批处理的形式执行(不错，实际经验就是如此)，使用低级别的隔离措施 (也没错，NOLOCK就是一个极端的例子)，还建议你有限的连接，从而让处理器进行合作(好复杂的描述，而且总觉得怪怪的不像个好点子)。我不知道是否用数据库咨询师会提到本文中的技术(或类似的技术)， 但是我只想说的是，Streamload.com的运行状况的确因为该技术得到了改善。如果你遇到了锁争用的问题，也可以试试NOLOCK和ROWLOCK。 </FONT></SPAN></SPAN></P>
<P align=left><STRONG><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">申明</SPAN></STRONG><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体"></SPAN> </P>
<P align=left><SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体">是否使用<SPAN lang=EN-US><FONT face=宋体>NOLOCK和ROWLOCK，需要自行判断，并谨慎运用。我用该技术的方法是通过查看我的存储过程和即时查询语句，在我自己的理解上来觉得哪里用和如何用。我需要判断如果用NOLOCK 而引起一些返回的不准确，或者ROWLOCK是否会造成太多的锁，这些情况出现时，对于访问者或者使用者来说，是否是可以接受的。在大多数情况下，我认为是没有问题的，但是也许你的代码不适用， 你需要小心对待。你需要创建一些独立的过程，是否加锁，如何加锁，以作为对比。当UPDATE或者 DELETE查询影响到很多数据行时，你在使用PAGELOCK,TABLOCK时也会遇到别的问题。 </FONT></SPAN></SPAN></P>
<P>&nbsp;<FONT size=2>附：</FONT></P>
<DIV class=bvMsg><FONT size=2>－－－－－－－－－－－－－－－</FONT></DIV>
<DIV class=bvMsg><FONT size=2>　UPDLOCK</FONT></DIV>
<DIV class=bvMsg><FONT size=2>　　读取表时使用更新锁，而不使用共享锁，并将锁一直保留到语句或事务的结束。UPDLOCK 的优点是允许您读取数据（不阻塞其它事务）并在以后更新数据，同时确保自从上次读取数据后数据没有被更改。</FONT></DIV>
<DIV class=bvMsg><FONT size=2>　　这是SqlServer2000中对更新锁的说明.</FONT></DIV>
<DIV class=bvMsg><FONT size=2>　　当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁，从而加上锁的记录在其它的线程中是不能更改的只能等本线程的事务结束后才能更改，我如下示例：</FONT></DIV>
<DIV class=bvMsg><FONT size=2></FONT></DIV>
<DIV class=bvMsg>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><FONT size=2><IMG alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">BEGIN</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">TRANSACTION</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #008080">--</SPAN><SPAN style="COLOR: #008080">开始一个事务</SPAN></FONT><SPAN style="COLOR: #008080"><BR><FONT size=2><IMG alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></FONT></SPAN><SPAN style="COLOR: #0000ff"><FONT size=2>SELECT</FONT></SPAN><FONT size=2><SPAN style="COLOR: #000000">&nbsp;Qty<BR><IMG alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;myTable&nbsp;</SPAN><SPAN style="COLOR: #0000ff">WITH</SPAN></FONT><FONT size=2><SPAN style="COLOR: #000000">&nbsp;(UPDLOCK)<BR><IMG alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">WHERE</SPAN><SPAN style="COLOR: #000000">&nbsp;Id&nbsp;</SPAN><SPAN style="COLOR: #808080">in</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">1</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">2</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">3</SPAN></FONT><FONT size=2><SPAN style="COLOR: #000000">)<BR><IMG alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">UPDATE</SPAN><SPAN style="COLOR: #000000">&nbsp;myTable&nbsp;</SPAN><SPAN style="COLOR: #0000ff">SET</SPAN><SPAN style="COLOR: #000000">&nbsp;Qty&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Qty&nbsp;</SPAN><SPAN style="COLOR: #808080">-</SPAN></FONT><FONT size=2><SPAN style="COLOR: #000000">&nbsp;A.Qty<BR><IMG alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;myTable&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">AS</SPAN></FONT><FONT size=2><SPAN style="COLOR: #000000">&nbsp;A&nbsp;<BR><IMG alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">INNER</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">JOIN</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">@_Table</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">AS</SPAN><SPAN style="COLOR: #000000">&nbsp;B&nbsp;</SPAN><SPAN style="COLOR: #0000ff">ON</SPAN><SPAN style="COLOR: #000000">&nbsp;A.ID&nbsp;</SPAN><SPAN style="COLOR: #808080">=</SPAN></FONT><FONT size=2><SPAN style="COLOR: #000000">&nbsp;B.ID<BR><IMG alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">COMMIT</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">TRANSACTION</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #008080">--</SPAN><SPAN style="COLOR: #008080">提交事务</SPAN></FONT></DIV></DIV></DIV>
<DIV class=bvMsg><FONT size=2></FONT></DIV>
<DIV class=bvMsg><FONT size=2>　　这样在更新时其它的线程或事务在这些语句执行完成前是不能更改ID是１，２，３的记录的．其它的都可以修改和读，１，２，３的只能读，要是修改的话只能等这些语句完成后才能操作.从而保证的数据的修改正确.</FONT></DIV></FONT></SPAN><img src ="http://www.cnblogs.com/Xrinehart/aggbug/1049185.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43772/" target="_blank">[新闻]Digg创始人：不再考虑出售公司 将适机并购</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>DotNET 2.0 System.Configuration 配置类的不足</title><link>http://www.cnblogs.com/Xrinehart/archive/2007/12/23/1011876.html</link><dc:creator>風語者·疾風</dc:creator><author>風語者·疾風</author><pubDate>Sun, 23 Dec 2007 15:23:00 GMT</pubDate><guid>http://www.cnblogs.com/Xrinehart/archive/2007/12/23/1011876.html</guid><wfw:comment>http://www.cnblogs.com/Xrinehart/comments/1011876.html</wfw:comment><comments>http://www.cnblogs.com/Xrinehart/archive/2007/12/23/1011876.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/Xrinehart/comments/commentRss/1011876.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Xrinehart/services/trackbacks/1011876.html</trackback:ping><description><![CDATA[<P>&nbsp;　　这次是两年后再次使用２.０带的配置类编写配置文件，以前就觉得不是太灵活，但当时解决了问题就没有再深入研究了。现在再次使用，发现有很大限制。主要如下：<BR><BR>1、默认情况下ConfigurationCollection类型下的Element只能是以add开头（除去remove、clear）。当然这个问题倒是可以解决：<BR>　　　　[ConfigurationCollection(typeof(TypeCollection), AddItemName = "Type")]<BR><BR>2、ConfigurationCollection类型下不支持添加ConfigurationCollection类型的节点，只允许添加ConfiguarationElement类型的节点。<BR><BR>3、ConfiguarationElement类型下不支持多个ConfigurationCollection类型节点，若写多个ConfigurationCollection类型节点，只有第一个节点可以读取到值。<BR><BR>另外，ConfigurationCollection类型下支持多个ConfiguarationElement类型。<BR><BR>补充：ConfigurationSection类型下同时支持多个ConfigurationCollection以及多个ConfiguarationElement类型。<BR><BR>以上作为记录。</P><img src ="http://www.cnblogs.com/Xrinehart/aggbug/1011876.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43771/" target="_blank">[新闻]福布斯:中国经济增长减速 网游行业从中获益</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Visaul Studio 2008(TeamSuit/Professional/Development/TFS/TestLoad)全系列下载链接</title><link>http://www.cnblogs.com/Xrinehart/archive/2007/11/25/972019.html</link><dc:creator>風語者·疾風</dc:creator><author>風語者·疾風</author><pubDate>Sun, 25 Nov 2007 14:03:00 GMT</pubDate><guid>http://www.cnblogs.com/Xrinehart/archive/2007/11/25/972019.html</guid><wfw:comment>http://www.cnblogs.com/Xrinehart/comments/972019.html</wfw:comment><comments>http://www.cnblogs.com/Xrinehart/archive/2007/11/25/972019.html#Feedback</comments><slash:comments>39</slash:comments><wfw:commentRss>http://www.cnblogs.com/Xrinehart/comments/commentRss/972019.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Xrinehart/services/trackbacks/972019.html</trackback:ping><description><![CDATA[摘要: 都是MSDN版的，非90天试用版，如果有需要的朋友可以下载。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Xrinehart/archive/2007/11/25/972019.html'>阅读全文</a><img src ="http://www.cnblogs.com/Xrinehart/aggbug/972019.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43770/" target="_blank">[新闻]苹果正调查MacBook笔记本“黑屏死机”故障</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>设计高可用和高负载的网站系统(转载)</title><link>http://www.cnblogs.com/Xrinehart/archive/2007/07/11/813730.html</link><dc:creator>風語者·疾風</dc:creator><author>風語者·疾風</author><pubDate>Wed, 11 Jul 2007 03:06:00 GMT</pubDate><guid>http://www.cnblogs.com/Xrinehart/archive/2007/07/11/813730.html</guid><wfw:comment>http://www.cnblogs.com/Xrinehart/comments/813730.html</wfw:comment><comments>http://www.cnblogs.com/Xrinehart/archive/2007/07/11/813730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Xrinehart/comments/commentRss/813730.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Xrinehart/services/trackbacks/813730.html</trackback:ping><description><![CDATA[随着网站的运营，用户访问量和数据存储量会随着时间发生几何级变化，很快整个系统不堪重负，频繁出现问题。其实要设计一个高可用、高负载的系统还是有一定的规矩可循的，其手段无外乎向上扩展(Sacle Up 硬件扩展)或者向外扩展(Scale Out 软件扩展)，这两种方案在某一阶段时期，会显著改善网站的性能，但不久之后，问题依旧。本文参考网上相关资料，试图提供一个可行的 "有限" 解决方案。<BR><BR><STRONG>早期</STRONG><BR><BR>1. 对业务应用进行垂直分割，将不同的业务边界划分出来。程序员常说的 "多层体系" 只是纵向解决了不同编程层次的划分，相对于业务而言，并没有做出什么处理。现在 SOA 大行其道，除了人们认识到面向服务带来的互联、扩展性以外，它也将不同服务的变化区分开来，各自拥有独立的实现和存储机制。每个服务使用不同的数据库或数据表，从一定程度上减轻了以往单个数据库频繁造成的 "锁" 和 I/O 瓶颈问题。<BR><BR>2. 将网站系统中的动态内容和静态资源分离出来，使用单独的更加高效的服务器(诸如 Apache + Linux)提供静态信息。多数情况下，流量的极大部分来源于图片、视频等，用多台服务器同时提供页面显示除了可以提高页面响应和现实速度外，同时他将流量分解到多台服务器上。另外，我们应该避免使用动态解析 (ASPNET_ISAPI.dll / HttpModule / HttpHandler) 来处理静态数据的过滤和路径重写。<BR><BR>3. 使用缓存机制，包括使用诸如 ASP.NET Cache、PageCache、创建静态页面等手段。设计良好的缓存机制能极大提高系统性能和响应速度。<BR><BR>4. 使用 64 位数据库系统。SQL Server 2005 在 64 位系统上可以使用更多的内存(最高64GB)，而且在多 CPU 下也拥有更好的性能。有了更大的内存，我们甚至可以将某些常用且极少变化的表(比如分类目录表等)设置为内存表以提高响应速度。<BR><BR>5. 关闭操作系统的某些安全设置，比如 Windows 2003 预防 DDOS 攻击的一些设置，也可以避免一些意外的访问瓶颈。<BR><BR><STRONG>运行期</STRONG><BR><BR>6. 建立多数据库体系。使用单个或多个用于数据更新的数据库服务器，然后利用数据库的复制和订阅功能同步到其他多台专门用于显示的数据库服务器上，这样可以有效减少因为更新带来的数据库访问等待。当然，这种体系并不适用所有的业务。<BR><BR>7. 对大数据表进行分区。现在的主流数据库基本都支持数据表分区功能，我们可以横向分区，将不同时期的数据存放到多个分区表中；也可以纵向分区，将不常用的字段放到其他分区表中。分区表并不会影响到我们的开发模式，无须对代码进行调整，但数据表尺寸从 TB 减小到 GB 所带来的好处是无法忽略的。<BR><BR>8. 使用负载均衡等手段提升性能。包括DNS负载均衡、代理服务器负载均衡、地址转换网关负载均衡、协议内部支持负载均衡、NAT负载均衡、反向代理负载均衡等，负载均衡作为最常用的上扩手段，其效果也非常明显。<BR><BR>9. 使用 SAN 等专用的存储系统来提高 I/O 性能。SAN 使用光纤通道连接多个存储设备，可以改善多个服务器硬盘之间使用网线传输数据的性能问题。此外，SAN 还可以动态调整存储容量，更加有利于系统备份和恢复。<BR><BR>10. 电力备份。如果是自主机房，除了配置 UPS 电源外，最好拥有独立的发电设备。当然，对中小型网站而言，这过于奢侈了些。<BR><BR>本文只是一个摘要性的东西，有关各条细节，请参考专业文章。&nbsp;&nbsp;<BR><img src ="http://www.cnblogs.com/Xrinehart/aggbug/813730.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43769/" target="_blank">[新闻]007最牛电脑探秘：应用界面来自中国(组图)</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>SQL Server 2005中托管C# SP不是鸡肋</title><link>http://www.cnblogs.com/Xrinehart/archive/2007/06/14/783893.html</link><dc:creator>風語者·疾風</dc:creator><author>風語者·疾風</author><pubDate>Thu, 14 Jun 2007 12:54:00 GMT</pubDate><guid>http://www.cnblogs.com/Xrinehart/archive/2007/06/14/783893.html</guid><wfw:comment>http://www.cnblogs.com/Xrinehart/comments/783893.html</wfw:comment><comments>http://www.cnblogs.com/Xrinehart/archive/2007/06/14/783893.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/Xrinehart/comments/commentRss/783893.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Xrinehart/services/trackbacks/783893.html</trackback:ping><description><![CDATA[<P>最近群里来了个大牛，比较才发现自己的差距，嘿嘿，以前是不知天高地厚的，好事好事。讨论下了SQL Server 2005中的托管SP的应用场景问题，结论主要归结如下：<BR><BR>1、解决写T-SQL SP处理逻辑运算比较麻烦的问题。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个问题要分多个方面来看待：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先，T-SQL SP的定位是基本的CRUD的I/O操作无法取代；托管SP的作用不是为了取代它的价值。这样来看就不用为托管SP操作数据的写法和直接在业务层里面写Ado.NET相似而介怀了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其次，托管SP用于处理数据的逻辑运算的原则是Near Data，但是这样看起来和架构设计的责任分离原则又有冲突：通常是不建议存储过程里面有业务逻辑的，不利于移植迁移以及系统扩展。如何处理这样的矛盾，关键在于，选择使用托管SP来写逻辑运算的都是一些需要往返参数较小，但却需要大量操作运算的过程，比如：用户的登录验证，传递的只有用户名和密码，返回是否对某些操作有授权，但却需要对数据库做大量的查询，数据间关系运算操作，因此这种应该用SP来做，使用托管SP会更方便。（往返数据小，数据处理复杂）<BR><BR>2、托管SP弥补了T-SQL SP在部署管理方面的一些缺陷<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;正如上面关于用户登录授权的问题，部分业务放在SP中并没有体现出托管SP的必要性来。T-SQL SP最大的问题是移植和扩展性上，那么如果业务部分换成托管SP，在部署时候托管SP肯定比T-SQL SP更具灵活性和可移植性，而才基本的CRUD操作方面，各个数据库之间的差异并不是很大。<BR><BR>3、托管SP在安全性方面比T-SQL更好。这个我没有太明白，他提到的是利用CAS，不清楚这是什么东西了。<BR><BR>主要就这三个方面的思考，其他还有一些发散，不如例举了在SQL Server里面调用Web Services，这种情况还是遵循是否该选择SP的原则进行；以及提及到了存储过程的继承？呵呵，这个需要更多一些讨论了。<BR><BR><BR></P><img src ="http://www.cnblogs.com/Xrinehart/aggbug/783893.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43768/" target="_blank">[新闻]新浪网遭攻击瘫痪500分钟 被迫答应黑客要求</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>面向对象设计与分析培训(含PPT)</title><link>http://www.cnblogs.com/Xrinehart/archive/2007/05/31/766297.html</link><dc:creator>風語者·疾風</dc:creator><author>風語者·疾風</author><pubDate>Thu, 31 May 2007 05:18:00 GMT</pubDate><guid>http://www.cnblogs.com/Xrinehart/archive/2007/05/31/766297.html</guid><wfw:comment>http://www.cnblogs.com/Xrinehart/comments/766297.html</wfw:comment><comments>http://www.cnblogs.com/Xrinehart/archive/2007/05/31/766297.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/Xrinehart/comments/commentRss/766297.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Xrinehart/services/trackbacks/766297.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近给公司做了一个面向对象设计与分析的培训，作为第一节内容，只能做全面性的概括和介绍的引子。但领导对此不是很满意，没办法，领导是希望培训后有现实立杆见影的效果，这个……目前能力达不到……<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把整理的<FONT color=#ff0000><A href="/Files/Xrinehart/面向对象分析与设计.rar">PPT</A></FONT>放在这里，作为概念性的介绍，自觉还是已经相当不错</P><img src ="http://www.cnblogs.com/Xrinehart/aggbug/766297.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43767/" target="_blank">[新闻]联发科称“死机短信”不会伤害手机硬件</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>使用C#编写可被桌面应用调用的ActiveX控件</title><link>http://www.cnblogs.com/Xrinehart/archive/2007/04/13/712074.html</link><dc:creator>風語者·疾風</dc:creator><author>風語者·疾風</author><pubDate>Fri, 13 Apr 2007 06:58:00 GMT</pubDate><guid>http://www.cnblogs.com/Xrinehart/archive/2007/04/13/712074.html</guid><wfw:comment>http://www.cnblogs.com/Xrinehart/comments/712074.html</wfw:comment><comments>http://www.cnblogs.com/Xrinehart/archive/2007/04/13/712074.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Xrinehart/comments/commentRss/712074.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Xrinehart/services/trackbacks/712074.html</trackback:ping><description><![CDATA[摘要: 用C#编写提供给WEB页面使用的"ActiveX控件"大家一定非常熟悉了。当前项目需要将C#编写的控件提供给VC6++调用，虽然.NET可以非常方便的将程序集编译为COM组件，但是COM组件并不是ActiveX，不能在VC++的对话框里进行展现，因此需要用一种特殊的方式进行。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Xrinehart/archive/2007/04/13/712074.html'>阅读全文</a><img src ="http://www.cnblogs.com/Xrinehart/aggbug/712074.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43766/" target="_blank">[新闻]金融危机引爆Web2.0变革：社区网站价值被高估</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>TFS2005无法启动问题以及解决办法</title><link>http://www.cnblogs.com/Xrinehart/archive/2006/12/18/596097.html</link><dc:creator>風語者·疾風</dc:creator><author>風語者·疾風</author><pubDate>Mon, 18 Dec 2006 11:49:00 GMT</pubDate><guid>http://www.cnblogs.com/Xrinehart/archive/2006/12/18/596097.html</guid><wfw:comment>http://www.cnblogs.com/Xrinehart/comments/596097.html</wfw:comment><comments>http://www.cnblogs.com/Xrinehart/archive/2006/12/18/596097.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Xrinehart/comments/commentRss/596097.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Xrinehart/services/trackbacks/596097.html</trackback:ping><description><![CDATA[今天突然发现无法链接到TFS2005服务器上了，连接就显示服务器503错误。于是登录到服务器上查看系统日志，发现TFS的几个应用程序池都无法启动，并且TFS2005的几个服务也无法启动。重新启动服务器无法解决，重新启动服务无法解决...<BR>仔细想了之后想到是否是因为TFS一开始设定的那几个服务的运行账号TFSService根据Win2K3的过期策略过期了？打开用户管理一看，果然真是这个问题，把该用户账号修改为永不过期，重新启动IIS后，一切正常。<BR>希望能对遇到这个问题的朋友有些帮助。<img src ="http://www.cnblogs.com/Xrinehart/aggbug/596097.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43765/" target="_blank">[新闻]MySpace称目前是收购创业公司良机</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>服务器安装要点</title><link>http://www.cnblogs.com/Xrinehart/archive/2006/10/31/545690.html</link><dc:creator>風語者·疾風</dc:creator><author>風語者·疾風</author><pubDate>Tue, 31 Oct 2006 08:25:00 GMT</pubDate><guid>http://www.cnblogs.com/Xrinehart/archive/2006/10/31/545690.html</guid><wfw:comment>http://www.cnblogs.com/Xrinehart/comments/545690.html</wfw:comment><comments>http://www.cnblogs.com/Xrinehart/archive/2006/10/31/545690.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Xrinehart/comments/commentRss/545690.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Xrinehart/services/trackbacks/545690.html</trackback:ping><description><![CDATA[1、安装Windows2003 SP1。防火墙设置可以Ping，开放文件共享，远程桌面共享，以及WEB，FTP等服务端口，然后设置IP地址为192.168.1.190。最后在线更新系统。<BR><BR>2、安装SQL Server 2005，安装完成后打开防火墙的TCP 1433端口和UDP 1434端口，否则无法远程连接。<BR><BR>3、安装Web SharePoint&nbsp; Service SP2中文版，以服务场方式。<BR><BR>4、安装TFS光盘上的两个HotFix补丁后，为安装TFS Server建立三个管理员账号：TFSSETUP、TFSSERVICE、TFSREPORTS。<BR><BR>5、以TFSSETUP账号登录，开始安装TFS Server，安装过程中需要填写TFSSERVICE账号和TFSREPORTS账号。<BR><BR>6、完成安装后，必须在本机安装TFS Explorer。使用TFS Explorer连接到TFS Server进行权限设定，默认只有TFSSETUP账户是TFS的已授权账号。因为WorkGroup版的5授权限制，需要用以下语句在数据库中对用户组进行授权。（<A href="http://cleo.cnblogs.com/archive/2006/04/07/369013.html">参见</A>）<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">declare</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #008000">@container</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #000000">varchar</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">100</SPAN><SPAN style="COLOR: #000000">),</SPAN><SPAN style="COLOR: #008000">@member</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #000000">varchar</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">100</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #008000">@container</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">sid</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">TfsIntegration</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000">.</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">dbo</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000">.</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">tbl_security_identity_cache</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">where</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">display_name</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">N</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">Team&nbsp;Foundation&nbsp;Licensed&nbsp;Users</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">and</SPAN><SPAN style="COLOR: #000000">&nbsp;deleted</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">0</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">SELECT</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #008000">@member</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">sid</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">FROM</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">TfsIntegration</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000">.</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">dbo</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000">.</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">tbl_security_identity_cache</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">where</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">display_name</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="COLOR: #000000">N</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">Domain&nbsp;Admins</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">and</SPAN><SPAN style="COLOR: #000000">&nbsp;deleted</SPAN><SPAN style="COLOR: #808080">=</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">0</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">insert</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">TfsIntegration</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000">.</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">dbo</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000">.</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">tbl_security_membership_cache</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>(&nbsp;</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">container</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #ff0000">[</SPAN><SPAN style="COLOR: #ff0000">member</SPAN><SPAN style="COLOR: #ff0000">]</SPAN><SPAN style="COLOR: #000000">)&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">values</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #008000">@container</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #008000">@member</SPAN><SPAN style="COLOR: #000000">)</SPAN></DIV><BR><BR>7、调整TFS的分析频率：<BR>执行：net stop TFSServerScheduler<BR>再调用以下链接：<BR><A href="http://localhost:8080/Warehouse/V1.0/warehousecontroller.asmx">http://localhost:8080/Warehouse/V1.0/warehousecontroller.asmx</A><BR>选择ChangeSetting，settingID填写RunIntervalSeconds，newValue填写执行分析服务的间隔时间，单位秒。<img src ="http://www.cnblogs.com/Xrinehart/aggbug/545690.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43764/" target="_blank">[新闻]诺基亚推出触摸屏手机N97</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>TransactionScope使用注意事项</title><link>http://www.cnblogs.com/Xrinehart/archive/2006/10/23/537023.html</link><dc:creator>風語者·疾風</dc:creator><author>風語者·疾風</author><pubDate>Mon, 23 Oct 2006 02:15:00 GMT</pubDate><guid>http://www.cnblogs.com/Xrinehart/archive/2006/10/23/537023.html</guid><wfw:comment>http://www.cnblogs.com/Xrinehart/comments/537023.html</wfw:comment><comments>http://www.cnblogs.com/Xrinehart/archive/2006/10/23/537023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Xrinehart/comments/commentRss/537023.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Xrinehart/services/trackbacks/537023.html</trackback:ping><description><![CDATA[使用2.0的新事务方式也有快一年了，刚开始时候遇到的一些使用疑点问题都在现在的项目中遇到，并解决，现在做一下总结：<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一、在TransactionScope中，如果不是必须要避免它启用DTC分布式事务，因为性能低下；而对于TransactionScope来说它是以连接对象Connection做为识别单位的，也就是说即便是相同连接字符串ConnectionString的两个连接对象Connection在TransactionScope也是会启用DTC分布式事务的，避免的方法就是在一个TransactionScope中使用一个唯一的连接对象Connection。<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二、在TransactionScope中默认的事务级别是Serializable，即在事务过程中，完全性锁表。别的进程不能查询，修改，新增，删除。这样会导致效率大大降低，虽然数据完整性很高。通常我们不需要那么高的数据完整性。所以需要修改默认的事务级别：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TransactionOptions&nbsp;option&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;TransactionOptions();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;option.IsolationLevel&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;System.Transactions.IsolationLevel.ReadCommitted;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;(TransactionScope&nbsp;ts&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;TransactionScope(TransactionScopeOption.Required,&nbsp;option))</SPAN></DIV><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所有的事务级别如下：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">成员名称&nbsp;说明&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;Chaos&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无法改写隔离级别更高的事务中的挂起的更改。&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;ReadCommitted&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不可以在事务期间读取可变数据，但是可以修改它。&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;ReadUncommitted&nbsp;&nbsp;&nbsp;&nbsp;可以在事务期间读取和修改可变数据。&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;RepeatableRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以在事务期间读取可变数据，但是不可以修改。可以在事务期间添加新数据。&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;Serializable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以在事务期间读取可变数据，但是不可以修改，也不可以添加任何新数据。&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;Snapshot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以读取可变数据。在事务修改数据之前，它验证在它最初读取数据之后另一个事务是否更改过这些数据。如果数据已被更新，则会引发错误。这样使事务可获取先前提交的数据值。&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>在尝试提升以此隔离级别创建的事务时，将引发一个&nbsp;InvalidOperationException，并产生错误信息“Transactions&nbsp;with&nbsp;IsolationLevel&nbsp;Snapshot&nbsp;cannot&nbsp;be&nbsp;promoted”（无法提升具有&nbsp;IsolationLevel&nbsp;快照的事务）。<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;Unspecified&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;正在使用与指定隔离级别不同的隔离级别，但是无法确定该级别。如果设置了此值，则会引发异常。&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><img src ="http://www.cnblogs.com/Xrinehart/aggbug/537023.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43763/" target="_blank">[新闻]消息称AOL前CEO米勒欲筹资收购雅虎</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item></channel></rss>