首先肯定是数据库问题,以前一直运行良好的程序,
最近总出现录入不了数据现象,于是查看数据库中
是否有死锁,无论是用网上流行的几种查看死锁的
存储过程还是在企业管理器中都看不出来死锁,
而用户当执行到那个存储过程的时候就会停止不动,
直至超时,存储过程无非是从一个表里取最大值,
有好几个这样的存储过程都是这样,他们也不是从一个
表中取的数据。这种现象偶尔就会出现,过了大概半小时
就会自动好转,不得其解。
难道会是因为数据库日志大吗,因为硬盘地方够,
日志一直没有清理,现在日志有200多G,会因为这个,
而锁柱某个表吗?而我查看是没有锁和阻塞信息的,
在企业管理器中查看锁/对象,有这样的信息,
master.dbo.spt_values,tempdb.dbo.##lockinfo,
当然也有被锁的数据库名字,
求大牛给指点

解决方案 »

  1.   

    这种现象,明显是阻塞了你这样修改下,在你求最大值的存储过程语句,比如原来是
    select max(id) as maxid from tab 
    改为
    select max(id) as maxid from tab with(nolock)
      

  2.   

    还是不妥你求最大值干什么,是否用来计算下一ID?不加锁可能会引起ID重复,关键在于你为什么要从库里查最大值,这种设计在数据量上升到一定程度一定出问题的,这是关键。
      

  3.   

    新建一个最大值ID表,专门存放表中字段的最大ID,程序从最大值ID表中读取ID并加1
    如:
    cTbName  iMaxId
    aa        100001
    bb        999
    cc        1599
      

  4.   

    日志200G.。。肯定是没备份数据库
    日志跟阻塞无关查看下DMV,若是2005 or 2008
    或者Profiler一下