浅谈服务器的压力解决方案

一般情况下,我们是从数据层级别(MSSQL2000为例) 经过逻辑层级别(IIS)的处理后发送到客户端去.

那么,解决的方案就有三种级别:

1. 优化数据库
2. 优化代码
3. 使用静态


一.数据库优化:
   1) 合理的设计索引,正确的使用索引;
   2) 对于不重要的数据,采有with(nolock) 锁 能提高读取的效率,重要的就采用事务吧;
   3) 根据执行计划来查找耗时关键点,总执行成本高于0.01的话就比较危险了,如果是千万级的数据最好要重新设计索引或表结构;
   4) 尽量使用SP,而不是让Sql裸奔.
   5) 如果一个表实在是太大(超级千万)并且在未来很短的时间内有增加的趋势,那么就最好要采用分表

二 代码的优化:
   1) 一次性读取用户数据,避免每调一次就读一次数据库的情况(这算不上优化,应该就是错误的写法,我有朋友是真的碰到过的).
 如:我们可以选取用户信息保存至UserModel里(UserInfo info = DAL.GetUserInfo(1)),然后通过调info.UserId,info.UserName等查询用户的信息,而不是userId = DAL.GetUserId,userName = DAL.GetUserName
   2) 合理正确的使用缓存.
 通过缓存类来保存一些全局的设定等,或是通过页面级缓存或是控件级的缓存减少服务器的压力(这个在Asp.Net是比较容易实现的).这里面就有个度的问题了.还要看你的服务器内存.如果是单服务器单站,嘿~~~
   3) 及时关闭非托管资源(比如文件的打开,数据库连接的打开,等)

三 生成静态文件:
   1) 如果是经常用,更且不需要及时更新的数据内容,如榜单,友情链接,新闻等 ,可按一定的时间来重复生成静态的Js或是纯文本或是Html(其实都是文本内容)


    这三种方式各有优缺点,各有特色.
    数据库(比做赛车)优化是根本,数据库没有设计好,下面的都是假的,再好的代码也跑不起来!
    好代码就像是优秀的赛车手,好的赛车手+好的赛车跑起来,那叫杠杠的
    静态生成一般来说不是必要不要用.因为不是很灵活.但,它往往也是解决压力的关键.使数据库服务器和代码更好更快更高效的运行


    本人浅论,不足之处,欢迎指正.

[一线风 最后修改于:2008-3-25 17:12:22]
posted @ 2008-03-25 17:04 一线风 阅读(2877) 评论(17)  编辑 收藏 所属分类: 心得体会

  回复  引用  查看    
#1楼 2008-03-25 17:59 | 老钱      
学习
  回复  引用  查看    
#2楼 2008-03-25 18:22 | 生鱼片      
整点实例
  回复  引用  查看    
#3楼 2008-03-25 18:43 | jillzhang      
5) 如果一个表实在是太大(超级千万)并且在未来很短的时间内有增加的趋势,那么就最好要采用分表
-------------------------------------------------------------
分表的说法在05上似乎有些不妥,分区更严谨些
包括水平和垂直两种.可以说分区才是解决性能问题的终极方法,不是提高性能,而是解决性能问题.
  回复  引用    
#4楼 2008-03-25 19:31 | 哈哈才 [未注册用户]
没有什么实质的内容
  回复  引用  查看    
#5楼 2008-03-25 19:50 | 红尘中迷茫      
不错,浅显易懂。。
  回复  引用    
#6楼 2008-03-25 20:51 | wtw.asaw [未注册用户]
那个赛车的比喻很是恰当
  回复  引用  查看    
#7楼 2008-03-25 22:03 | 神龙腾翔      
学习啦。。。
  回复  引用  查看    
#8楼 2008-03-25 23:03 | overred      

呵呵
还有分布式。。。负载均衡。。。。。。分Pool。。。。

  回复  引用  查看    
#9楼 2008-03-26 00:31 | 簡簡單單..      
mark
  回复  引用  查看    
#10楼 2008-03-26 01:17 | 一抹微蓝      
还是想了解多服务器部署,windows服务器的CDN部署
  回复  引用  查看    
#11楼 [楼主]2008-03-26 08:44 | 一线风      
--引用--------------------------------------------------
jillzhang: 5) 如果一个表实在是太大(超级千万)并且在未来很短的时间内有增加的趋势,那么就最好要采用分表
-------------------------------------------------------------
分表的说法在05上似乎有些不妥,分区更严谨些
包括水平和垂直两种.可以说分区才是解决性能问题的终极方法,不是提高性能,而是解决性能问题.
--------------------------------------------------------
感谢Jillzhang,由于本人接触有限,所以我写的基本上是我能接触并且应用上的,呵~谢谢你的提出与补充.
  回复  引用  查看    
#12楼 [楼主]2008-03-26 08:46 | 一线风      
--引用--------------------------------------------------
overred:
呵呵
还有分布式。。。负载均衡。。。。。。分Pool。。。。

--------------------------------------------------------
感谢您的补充,分布式和负载均衡我听说过,不过分Pool没有听过,回头查查相关的资料.

  回复  引用    
#13楼 2008-03-26 09:30 | imxjb [未注册用户]
嗯,总结的还不错,不过似乎还少了些
  回复  引用    
#14楼 2008-03-26 09:53 | look look [未注册用户]
学习了 谢谢分享
  回复  引用  查看    
#15楼 2008-03-26 10:45 | Klesh Wong      
太于泛泛……
  回复  引用  查看    
#16楼 2008-03-26 11:49 | romce      
xue xi
  回复  引用  查看    
#17楼 2008-03-26 13:08 | 梁逸晨      
我在自己的网站上面是采用静态生成XML的办法的。然后由客户端加载XSLT来合成网页,并且通过AJAX来最小话流量和计算量。
http://blog.kvspas.com

使用了六个月了,还不错的样子,服务器的压力非常小。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-03-25 17:45 编辑过
成果网帮您增加网站收入


相关链接: