如何查看SQL死锁

服务器CPU中SQL占用率很高。有人说是死锁造成的。请问如何在SQL中查看死锁,该如何解决,谢谢。... 服务器CPU中SQL占用率很高。
有人说是死锁造成的。

请问如何在SQL中查看死锁,该如何解决,谢谢。
展开
 我来答
晏玄素si
2007-12-03 · TA获得超过3572个赞
知道大有可为答主
回答量:1766
采纳率:0%
帮助的人:2169万
展开全部
其实所有的死锁最深层的原因就是一个:资源竞争
表现一:
一个用户A 访问表A(锁住了表A),然后又访问表B
另一个用户B 访问表B(锁住了表B),然后企图访问表A

这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了
同样用户B要等用户A释放表A才能继续这就死锁了
解决方法:
这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法
仔细分析你程序的逻辑,
1:尽量避免同时锁定两个资源
2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源.

表现二:
用户A读一条纪录,然后修改该条纪录
这是用户B修改该条纪录
这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释
放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。
这种死锁比较隐蔽,但其实在稍大点的项目中经常发生。
解决方法:
让用户A的事务(即先读后写类型的操作),在select 时就是用Update lock
语法如下:
select * from table1 with(updlock) where ....
cpa3000
推荐于2018-02-27 · 超过18用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:0
展开全部
服务器CPU中SQL占用率高,可能是下面的情况
1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
2、I/O吞吐量小,形成了瓶颈效应。
3、没有创建计算列导致查询不优化。
4、内存不足
5、网络速度慢
6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
9、返回了不必要的行和列
10、查询语句不好,没有优化

查看死锁,可以打开企业管理器->(数据库服务器中的)管理->当前活动->锁/进程中看到
死锁一般是数据库手工起事务没有关闭(commit tran)造成的,但如果程序代码量大,很难找出来的
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
圣鸾OJ
推荐于2016-02-23 · TA获得超过1629个赞
知道小有建树答主
回答量:1136
采纳率:96%
帮助的人:113万
展开全部
查询出来:
select
request_session_id spid,
OBJECT_NAME(resource_associated_entity_id) tableName
from
sys.dm_tran_locks
where
resource_type='OBJECT

杀死死锁进程:
kill spid
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lllmouse
2007-12-04 · TA获得超过3660个赞
知道小有建树答主
回答量:805
采纳率:0%
帮助的人:971万
展开全部
装个DBArtisan
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式