SQL死锁并无法KILL会话

单线程加锁 2011-04-06 02:25:53
我遇到了这样的情况,数据库死锁了,而且KILL那个会话的时候总是提示回滚了100%,很久了一直这样。
请教高手应该如何解决。

引起数据库死锁的是: 89进程号,其执行的SQL语法如下
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED Select top 20000 u1.FDetailID as FListEntryID,(u1.FQty-u1.FAllHookQTY) as FHookQTY,v1.FVchInterID as FVchInterID,v1.FTranType as FTranType,v1.FInterID as FInterID,u1.FEntryID as FEntryID,v1.Fdate as Fdate。。。。
进程号SPID:7被进程号SPID:79阻塞,其当前进程执行的SQL语法如下
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED Select top 20000 u1.FDetailID as FListEntryID,(u1.FQty-u1.FAllHookQTY) as FHookQTY,v1.FVchInterID as FVchInterID,v1.FTranType as FTranType,v1.FInterID as FInterID,u1.FEntryID as FEntryID,v1.Fdate as Fdate。。。。

kill 89
SPID 89: 正在进行事务回滚。估计回滚已完成: 100%。估计剩余时间: 0 秒。
kill 79
SPID 89: 正在进行事务回滚。估计回滚已完成: 100%。估计剩余时间: 0 秒。




...全文
1598 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
单线程加锁 2011-04-07
  • 打赏
  • 举报
回复
谢谢大家,我结贴了。
貓哥是個傳說 2011-04-07
  • 打赏
  • 举报
回复
死鎖的問題確實麻煩,馬克學習一下。。
唐诗三百首 2011-04-07
  • 打赏
  • 举报
回复
出现状况时用以下语句排查问题,

查79,89进程信息 --> 正常是2笔结果.
select spid,blocked,waittype,lastwaittype
from master.dbo.sysprocesses
where spid in (79,89)

查被79,89阻塞的进程信息 --> 正常是0笔结果.
select spid,blocked,waittype,lastwaittype
from master.dbo.sysprocesses
where blocked in (79,89)

查被79,89进程锁定的信息
SELECT * FROM master.dbo.syslockinfo where REQ_SPID
  • 打赏
  • 举报
回复
菜鸟路过留声,我的服务器锁表异常频繁,一天一次或更多,客户端是人家开发的,我又是数据库生手,头都大了。学习了
单线程加锁 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 obuntu 的回复:]
呵呵,找个时间重启下SQL Server的服务吧。
以前也遇到过这个问题,找了好久也没找到解决方法。
只好重启了。
[/Quote]
现在重启了,这个问题还是解决了。不过好的方法还是没找到。
obuntu 2011-04-06
  • 打赏
  • 举报
回复
呵呵,找个时间重启下SQL Server的服务吧。
以前也遇到过这个问题,找了好久也没找到解决方法。
只好重启了。
单线程加锁 2011-04-06
  • 打赏
  • 举报
回复
服务我关了再开也还不行。
重启了MSDTC也还一样。。。
liuyinbo0109 2011-04-06
  • 打赏
  • 举报
回复
有可能是客户端已经死机了,所以Kill SPID总是执行不成功,不需要重启SQLServer,只需要重启下MSDTC即可解锁
唐诗三百首 2011-04-06
  • 打赏
  • 举报
回复
对了哦,SQL2000企业管理器里,进程状态是没有自动刷新的,可能实际已不存在了,
点击刷新就没有阻塞了.
单线程加锁 2011-04-06
  • 打赏
  • 举报
回复
谢谢帮忙
我这个死锁好象有好几天了。。。。
上面显示的3-24号开始锁的。。只查了2W条应该不是数据量的问题
单线程加锁 2011-04-06
  • 打赏
  • 举报
回复
用select spid,blocked,waittype,lastwaittype
from master.dbo.sysprocesses
where spid in (79,89)

唐诗三百首 2011-04-06
  • 打赏
  • 举报
回复
以下2句查询是不同的,
select spid,blocked,waittype,lastwaittype
from master.dbo.sysprocesses
where spid in (79,89)
--> 正常是2笔结果.

select spid,blocked,waittype,lastwaittype
from master.dbo.sysprocesses
where blocked in (79,89)
--> 正常是0笔结果.
唐诗三百首 2011-04-06
  • 打赏
  • 举报
回复
怀疑是目标表的数据量太大,查询要执行很久很久,而产生的"假死锁"现象.
请看一下数据量是不是很大,且相关字段没有建索引.
单线程加锁 2011-04-06
  • 打赏
  • 举报
回复
查询结果是这样啊:
SQL code
select * from master.dbo.sysprocesses where blocked in (79,89)

79 0 0x0000 NETWORKIO
89 0 0x0200 EXCHANGE
89 0 0x0046 MISCELLANEOUS
89 0 0x0046 MISCELLANEOUS
[/Quote]
单线程加锁 2011-04-06
  • 打赏
  • 举报
回复
图片:
唐诗三百首 2011-04-06
  • 打赏
  • 举报
回复
确认 select * from master.dbo.sysprocesses where blocked in (79,89)
结果是空吗?

提供的SQL语句到"v1.Fdate as Fdate"就没了,没办法,SQL工具只能看到这么长的SQL语句.
单线程加锁 2011-04-06
  • 打赏
  • 举报
回复
谢谢你的回复

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
Select top 20000 u1.FDetailID as FListEntryID,(u1.FQty-u1.FAllHookQTY) as FHookQTY,v1.FVchInterID as FVchInterID,v1.FTranType as FTranType,v1.FInterID as FInterID,u1.FEntryID as FEntryID,v1.Fdate as Fdate
唐诗三百首 2011-04-06
  • 打赏
  • 举报
回复
从结果看, 79 & 89没有被阻塞(即blocked=0).

不过79 & 89也不可能阻塞其他进程,因为有READ UNCOMMITTED.
用select * from master.dbo.sysprocesses where blocked in (79,89)查看,正常应该是空.

可能与后面的select语句有关,请贴出来?
单线程加锁 2011-04-06
  • 打赏
  • 举报
回复

79 0 0x0000 NETWORKIO
89 0 0x0200 EXCHANGE
89 0 0x0046 MISCELLANEOUS
89 0 0x0046 MISCELLANEOUS
唐诗三百首 2011-04-06
  • 打赏
  • 举报
回复
楼主的现场还在吗?执行以下查询,把结果贴来看看,

select spid,blocked,waittype,lastwaittype
from master.dbo.sysprocesses
where spid in (79,89)
加载更多回复(9)

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧