摘要:
注:本文仅针对 DiscuzNT3.0, sqlserver 2000版本,其他版本请勿对号入座.经过前面的几次优化之后我们的论坛终于稳定了一段时间,大概半年之后我们的论坛迎来了每天大约50万的pv,这时候论坛有开始出现了问题。症状是这样的:管理员发现,网站经常会打不开, 但是也不报错,好像永远一直在打开,直到浏览器认为它打不开了,这样的症状每天会出现几次,而且越来越频繁。每次发生这样的情况过后一般iis的事件查看器都会asp.net有死锁提示,于是我知道,我终于遇上传说中的死锁了,每次有死锁迹象的时候我都跟踪了一下sqlserver,发现数据库是正常的,那看来就是asp.net这边的问题了。 阅读全文
摘要:
注:本文仅针对 DiscuzNT3.0, sqlserver 2000版本,其他版本请勿对号入座.在前两篇已经对看帖,发帖回帖做了优化,做过优化之后论坛访问起来果然顺畅多了。随着论坛帖子数的不断增加,论坛出现了一个新的问题,管理员在删帖的时候经常报错,超时,删除失败。由于有了之前的两次经验,现在找起问题来比之前要快多了,现在先找到删帖的存储过程dnt_deletetopicbytidlist3,脚本如下:ALTERPROCEDURE[dnt_deletetopicbytidlist3]@tidlistASVARCHAR(2000),@chanagepostsASBITASDECLARE@pos 阅读全文
摘要:
注:本文仅针对 DiscuzNT3.0, sqlserver 2000版本,其他版本请勿对号入座.上次对DiscuzNT的看帖做了性能优化,这次主要针对发帖和回帖做下优化,本文还是以优化数据库为主,C#的优化以后有时间另外记录。看帖,发帖,回帖 都是一个论坛的基本操作,如果性能不好导致这些操作变慢,论坛的效果可想而知了,那我们来看看DiscuzNT发帖和回帖都有些什么操作,性能如何。做事情总要有个先后,我给这次的优化工作也做了个步骤:(有图有真相)1)看代码,查到发帖回帖调用的存储过程;发帖调用了两个过程,代码如下:publicintCreateTopic(TopicInfotopicInfo 阅读全文
摘要:
很多人都遇到过这样的情况,当网站达到一定的访问量,数据库就会成为瓶颈,进而引起阻塞。有人认为这可能就是硬件的极限了,于是想办法增加硬件设备。而我本人认为问题的元凶可能是性能不高的sql脚本,引起了阻塞。如果你和我有相同的看法,那我们就一起想办法找出问题的源头。案例1.某一天我被告知,我们的书城网站不能访问了,我马上查看,发现书城的有两台iis服务器均显示service unavailable,我初步断定是sqlserver数据库发生了阻塞,因为同一套程序使两台iis服务器同时当机的可能性不大。要知道是否发生了阻塞,当然要看master库的sysprocess表,看看是否有什么进程堵住了别的进程 阅读全文
摘要:
注:本文仅针对 DiscuzNT3.0, sqlserver 2000版本,其他版本请勿对号入座.去年用DiscuzNT3.0做过二次开发,做过一些性能优化,但是时间关系一直没机会写下来;趁着5.1长假,来写篇回忆性的随笔吧。之前看过园子里代震军同学的博客,知道了老代同学是DiscuzNT团队的一员,从他的博文学了不少东西 ,我这里写的博文是针对一些问题提出自己的看发和解决方案,针对问题并无针对任何人之意,秉着技术交流的原则。DiscuzNT给我的印象是1)功能很强大,所有你能想到的基本都已经有了;2)性能有待优化,数据量较大的情况会产生性能瓶颈(这也正是写此文的目的)。之前发的博文由于缺乏经 阅读全文
摘要:
1. int.Parse() VS int.TryParse()你是不是正在这样写[代码]4如果是可以这样试试[代码]3前一种写法,一旦 Request["id"] 是非数值型的,将引发一个异常,引发异常的开销是非常巨大的,而后一种则不会引发任何异常。2.string.IndexOf()你正在这样写吗?[代码]intpos=s.IndexOf(",");其实对于单字符的查找,这样写会更好[代码]i... 阅读全文
摘要:
这是这两天刚刚发现的问题,记下来,希望对被web性能困扰的同仁有所帮助!下面说说网站的环境和状况吧:环境:win2003 + asp.net + sqlserver2000, 一个在线读书项目,日PV超500万,独立IP超3万状况:1)内存占用218M平稳;2)cpu约占5%,但是每隔20秒会突然冲到30%,有时甚至50%;(这个很重要)3)每次重新更新发布程序,cpu会稳定占5%一段时间(约30... 阅读全文
摘要:
在c#中除法默认不保留小数点,看看下面的结果decimal result = 100 / 1000; // result = 0;需要保留小数点,可以如下decimal result = 100m / 1000;m代表decimal.如果是变量要如何处理呢?这是需要用到Math.Round()int x= 120;int y= 100000;decimal result = (decimal)x ... 阅读全文