代码改变世界

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

2008-03-25 17:04  咒语  阅读(3732)  评论(18编辑  收藏  举报

一般情况下,我们是从数据层级别(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]