在数据库里Truncate 、Drop一个Table时,出现死锁,使用邹健的存储过程查看后发现死锁的进程语句是一个检查的查询语句:SELECT * FROM 视图 WHERE 字段='4'问:查询是如何造成死锁的呢?一般死锁不是插入、删除才会造成的吗?

解决方案 »

  1.   

    SELECT * FROM 视图 WHERE 字段='4' 跟另外的那个会话进行资源竞争了呢?找到那个会话对应的语句即可。
      

  2.   

    嗯 是等待吧   活动监视器里是这个 LCK_M_SCH_M
    等待时间很长
      

  3.   

    估计是那会有个插入操作,插入时 是直接 Insert Into 表1(字段) Select 字段 From 表1
      

  4.   

    LCK_M_SCH_M 架构锁,这种等待是正常的 生产时间段 最好别老这么操作drop啥的
      

  5.   

    避免死锁最有效的办法,就是允许select时脏读。
    如果你的SQL语句和程序,数据库水平不是相当高的话,使用脏读是你最好的方式。