论坛用户数较多...积分表会死锁
因为操作积分表的过程很多,各地方都用到了(论坛游戏等也用到了积分表)
alter table user_jf
(
  UserId int,
  jf int)
在userid上有主关键字索引
填充因子90
很多处都用到
     update user_jf set jy=xxx where userid=@userid
请问怎么解决好些

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/3696/3696385.xml?temp=.7042658
    http://support.microsoft.com/kb/224453/zh-cn
    http://support.microsoft.com/kb/271509/EN-US/
      

  2.   

    1。打开企业管理器--〉选择服务器--〉Management-->
     Current Activity-->Locks/ProcessID-->
    看看锁定的是在执行什么语句,另外可以看到锁定processid,可以kill掉互相锁住的进程
    2。执行sp_lock察看--这个我很少用一般用第一个,具体方法要看看什么时候,用户执行什么动作才知道!(我原来也有死锁特别厉害的问题,后来加个临时表后就没有啦)FYI
      

  3.   

    可以kill掉互相锁住的进程手动KILL?
      

  4.   

    kill不是最终目的,关键是分析你的代码逻辑,找出原因
    http://community.csdn.net/Expert/topic/3696/3696385.xml?temp=.7042658
    这个帖子里邹建说的比较详细
      

  5.   

    我是说你可以查看死锁发生的原因,在你没有修改代码之前可以kill解决燃眉之急,在我的代码没有修改好我的代码前,我就是直接kill,因为用户总不能全部停下来等你把代码改好吧,千万不要误会我的意思!
      

  6.   

    象积分表都是UPDATE,怎么用临时表呢?
      

  7.   

    我的问题和你不一样,我的是同时有人在网上开送货,非常多人,几百家厂商 然后仓管的人用PDA做点收,品管做检验,然后... 经常就是开单的人很多的时候,仓管的人用PDA读取,改写其中2个表的时候,互锁,因为开单的新增逻辑特别的复杂,如果直接新增,再update特别慢,所以后来改为先产生送货单号,所有的资料归类分析好后在往住表插入,就没有这样的问题了啦另外公司的DATABASE工程师还把数据、日志、索引放到不同的I/O设备上,增加读取速度;DB Server 和APPLication Server 分离;OLTP和OLAP分离(该君是个高手)你可以通过通过SQL Server Performance Monitor监视相应硬件的负载具体原因,你要先找出来,至少其他查询加上with nolock,那么减少锁定的机会!
    update user_jf set jy=xxx where userid=@userid
    --是在前台的程式计算了总分再update吗?考虑以其他方式计算分数后update!
      

  8.   

    是在后台UPDATE的,因为实时性要求比较好
      

  9.   

    建议楼主写到dataset中然后各自操作自己的dataset再分别绑定返回修改给数据库。
      

  10.   

    回复人: mynokia6230(mynokia6230) ( ) 信誉:100  2005-08-23 22:38:00  得分: 0  
     
     
       是在后台UPDATE的,因为实时性要求比较好
      
     
    ---这个是好想法,我的也有这样的缺陷,我的是封装在一个dll里面处理后update到数据库,这样已经直接在调用的代码快多了,不过我还是觉得写成sp比较好,不过事情太多,那么大的一个系统实在是很难全部翻过来,所以暂时一直没改!但是我优化了查询语句,减少死锁的机会,然后硬体工程师作了很大的改善,问题就解决了,很少出现死锁!在后台计算,update当然比较优,不过你的到底是在执行什么操作时候锁住,仅仅是update user_jf set jy=xxx where userid=@userid吗?计算总分的规则是什么
      

  11.   


    http://www.51testing.com/html/57/785.html