我的服务器是赛扬2.4的CPU,1G内存。只能在线100多玩家..就卡了。经常的排队死锁。 
因为我的程序是经常的频繁的访问数据库,我相信是这方面的问题。通过做索引,优化查询等等,问题只能是缓解,没得到质的解决。今天我在QQ群里听到如下两句话对我有所启发。但不知具体如何实施:
-------
1.不过我们对数据库做了一次封装的,所有的操作都是在内存种操作的,只是每隔一段时间更新一次数据库!
2.频繁访问数据库 ,数据库服务器受不了,而且速度也很慢!
3.所有用户的数据 在登陆时候全部加载到内存,之后所有操作都是内存操作!对象化了~
--------
我现在是直接通过sqlServer修改查询的。但我不会实现。
比如asp.x上有pagelode方法,对象化之后,在load一遍,之前新new的对象不又的重新再new一遍吗?

解决方案 »

  1.   

    数据库死锁。
    就是并发更新时候更新同一行..或者更新的同时有人在访问
    其实CPU的利用率也不是很高。就是一卡一卡的。而且sqlServer2000好像也没有什么隔离,快照级别之类的东东
    难道是APlication之类的东东代替数据库?唉..
      

  2.   

    不知道这样是否可以通过cache缓存数据,对于不更新的,当然没有问题。如果是频繁更新的数据,那么读取也从缓存读取,更新先只更新缓存。
    然后定时将缓存更新到数据库。
    不知道更新缓存对于服务器的性能如何影响?
    就是
    HttpContext.Current.Cache.Insert("key", myValue);
    更新直接就
    httpContent.Current.Cache.Insert("key",newValue);
      

  3.   

    不要长时间锁表和数据库
    表尽量细分
    缓冲更新,delphi里很容易做到,asp.net里怎么做还真不太清楚,可能要自己控制
    事务要尽快结束,特别是不能挂着
    硬件升级
    分服务器
    做成分布式,自动负载平衡好像也没别的了
      

  4.   

    对于不经常更新的数据,可以把数据缓存起来,Ado.net 中有缓存依赖的概念:就是先把数据加入到缓存,查询数据时从缓存中取,当数据有更新时,缓存会自动把数据清空,下次查询的时候,就从数据库中查询,然后再把数据加入到缓存,详细用法请看我的Blog。
    http://blog.csdn.net/leehao_vip/archive/2008/10/08/3035017.aspx对于数据库的封装,要记得及时释放连接,否则连接池的连接数超过一定值时就会阻塞,关于连接池的详细信息,请看:http://blog.csdn.net/leehao_vip/archive/2008/10/08/3032555.aspx
      

  5.   

    唉。关键是我的程序也已经写成这个样子了。某些原始表我已经存在缓存里了。但即使更新和联表查询的存储过程,实在很难改成内存操作..
    我的机器配置如下:
    处理器: 
      Inter(R) Core(TM)2 CPU 6300@ 1.86GHz 
      Inter(R) Core(TM)2 CPU 6300@ 1.86GHz 
    SCSI和RAID控制器 
      D347PRT SCSI Controller 
    内存:2G 
    硬盘:160G 
    ------
    不算差吧。 一般的网站能容纳多少个并发访问?
      

  6.   

    贴一下详细的性能监测数据,比如cpu,内存,请求队列,以及数据库锁的情况