数据库堵塞后,最后语句为set noexec off set parseonly off ,请问大概是什么原因引起的堵塞?

解决方案 »

  1.   


    运行下
    sp_who 里面的blk值是否大于0如果大于0,就说明有堵塞kill spId
      

  2.   


    这个进程锁定了哪些资源? (sp_lock @spid)
    然后再查该进程使用到该资源的sql语句。若以上方法都不管用,则祭出Profiler,必定管用。
      

  3.   


     现在用到的SQL语句就是set noexec off set parseonly off这句话啊,从这句怎样判断问题在哪里呢??
      

  4.   


    你是用DBCC INPUTBUFFER查到的吗?
    我是说让你用sp_lock结合你的前端程式去查。
      

  5.   

    显示最后一条SQL语句当然用DBCC INPUTBUFFER,返回结果就是set noexec off set parseonly off,现在想借助大家的经验来帮忙看看是什么问题引起的。谢谢
      

  6.   


    出现set noexec off set parseonly off有两种可能一是在改变连接属性,像Query Analyzer选项中变更连接属性二是SQL语句中指定了set noexec off set parseonly off但无论如何,仅仅是这两句是不可能引起锁定的。楼主你要做的是,用sp_lock @spID  去查这个出现set noexec off set parseonly off的进程到底锁定了什么资源,然后再去查。而不是用DBCC INPUTEBUFFER。
      

  7.   

    --找引起阻塞的进程
    select blocked from master..processes where blocked > 0-- 找到引起阻塞的语句
    dbcc inputbuffer(上面的进程blocked) 
      

  8.   

    快照复制:
    建立从分发服务器到发布服务器的连接,并在发布所包含的所有表上设置共享锁。共享锁保证了数据快照的一致性。由于这些共享锁阻止所有其他用户更新这些表,所以快照代理程序必须安排在数据库活动的非峰值期间执行。事务复制:
    一般来讲,随着快照的生成,SQL Server 在快照生成期间,将在所有作为复制一部分进行发布的表上放置共享锁。这可以防止在发布表上进行更新。只有使用事务复制才可用的并发快照处理,在整个快照生成过程中,将不包含共享锁,因而,在 SQL Server 2000 创建初始快照文件时,允许用户不间断地连续工作。当使用事务复制新建发布并指出所有订阅服务器都是 SQL Server 7.0 或 SQL Server 2000 的实例时,可使用并发快照处理。复制开始以后,快照代理程序将共享锁放在发布表中。直到在日志文件中输入了表明快照开始的记录后,锁才开始阻止更改。在接收到事务后,共享锁即被除去,从而可继续修改数据库中的数据。即使复制的数据量很大,包含锁的持续时间也是很短暂的(几秒钟)。5分钟做一次的话,建议使用事务复制
     
      

  9.   

    你是修改表结构还是指UPDATE表的数据?
      

  10.   

    当然是Update表的数据,发布的表是不能修改表结构的,除非把发布服务去掉。
      

  11.   


    为什么没有快照项目呢?
    事务复制首先必须要生成一次快照,然后才能把生成快照文件之后的所有操作,包括insert ,update,delete等发布到订阅服务器上可以设置调度的啊引用帮助文件的话:
    事务复制用事务日志捕获已发布表中发生的增量更改。Microsoft® SQL Server™ 2000 监视 INSERT、UPDATE 和 DELETE 语句或其它数据修改,并将这些更改存储到分发数据库中,这里分发数据库相当于一个可靠的队列。然后将更改传播到订阅服务器上,并按其发生次序加以应用。利用事务复制,在发布服务器上进行的增量更改根据分发代理程序调度流动。可将此调度设置为连续,以获得最少滞后时间,或对订阅服务器按调度间隔进行设置。由于必须在发布服务器上进行数据更改(使用事务复制,不用立即更新或排队更新选项),避免了更新冲突。这将保证事务的 ACID 属性得到维护。最终,所有订阅服务器都将获得与发布服务器同样的值。如果事务复制使用了立即更新或排队更新选项,更新可以在订阅服务器上进行,而如果使用了排队更新,则可能发生冲突。