日期:2014-05-17  浏览次数:20487 次

死锁现象


在数据库里Truncate 、Drop一个Table时,出现死锁,使用邹健的存储过程查看后发现死锁的进程语句是一个检查的查询语句:SELECT * FROM 视图 WHERE 字段='4'

问:查询是如何造成死锁的呢?一般死锁不是插入、删除才会造成的吗?
------最佳解决方案--------------------
但查询当然不会死锁,但是另外的会话会影响这个表。导致你查询不成功。
------其他解决方案--------------------
避免死锁最有效的办法,就是允许select时脏读。
如果你的SQL语句和程序,数据库水平不是相当高的话,使用脏读是你最好的方式。

------其他解决方案--------------------
SELECT * FROM 视图 WHERE 字段='4' 跟另外的那个会话进行资源竞争了呢?

找到那个会话对应的语句即可。
------其他解决方案--------------------
引用:
但查询当然不会死锁,但是另外的会话会影响这个表。导致你查询不成功。


不是很明白

------其他解决方案--------------------
这不科学啊,是锁等待吧? 确定是死锁??
------其他解决方案--------------------
我觉得等待的机会会比较大。死锁就严重了
------其他解决方案--------------------
嗯 是等待吧   活动监视器里是这个 LCK_M_SCH_M
等待时间很长
------其他解决方案--------------------
估计是那会有个插入操作,插入时 是直接 Insert Into 表1(字段) Select 字段 From 表1


------其他解决方案--------------------
LCK_M_SCH_M 架构锁,这种等待是正常的 生产时间段 最好别老这么操作drop啥的
------其他解决方案--------------------
那样插入数据是为了模拟点大量数据,临时执行一下。结果就出现等待这个情况了。