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

一般情况下,我们是从数据层级别(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 一线风 阅读(3152) 评论(18) 编辑 收藏

 回复 引用 查看   
#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

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

 回复 引用 查看   
#18楼[楼主] 2009-06-08 14:00 一线风      
--引用--------------------------------------------------
梁逸晨: 我在自己的网站上面是采用静态生成XML的办法的。然后由客户端加载XSLT来合成网页,并且通过AJAX来最小话流量和计算量。<br>http://blog.kvspas.com<br><br>使用了六个月了,还不错的样子,服务器的压力非常小。
--------------------------------------------------------
如果客户端不支持XML+Xslt的解析就比较危险了,我的做法是在服务器端生成Xhtml文档的,呵,http://max.cszi.com 这个项目用的就是这个办法.