现在出现我只能停止数据库后再启动
但这样不是办法
有没有办法,当出现锁或者死锁的时候,
通过一条SQL语句去查询出当前数据库的所有锁和所有引起这个锁的SQL语句
这样我看到这条SQL语句的时候也好判断是在哪里出错的,好去改自己的程序
万分感谢
8 个解决方案
#1
启用1022,3064跟踪标记,有死锁发生时,自动记录到SQL日志中,以利分析.
#3
--就是会话456阻塞了123
select spid, --会话id,比如:123
blocked --是哪个会话阻塞了上面的会话,比如:456
from sys.sysprocesses
where blocked <> 0
而且出现死锁的时候,会出现两条数据:
spid blocked
123 456
456 123
其实就表示,123和456相互阻塞,也就是死锁
#4
我主要是要知道,出现锁和死锁的是哪些SQL语句
谢谢
谢谢
#5
--查出OjbId大于0的是哪些ID
exec sp_lock
--再查询出对应OjbId
select * from sysobjects where id=OjbId
产生这种错误的原因大有可能是只有begin tran ,执行中因为错误后直接返回,没有执行commit tran或rollback tran
所以应该在begin tran前加上SET XACT_ABORT ON
exec sp_lock
--再查询出对应OjbId
select * from sysobjects where id=OjbId
产生这种错误的原因大有可能是只有begin tran ,执行中因为错误后直接返回,没有执行commit tran或rollback tran
所以应该在begin tran前加上SET XACT_ABORT ON
#6
这个最好是通过sql profiler,能跟踪详细的死锁的信息,不一定要跟踪所有锁的信息,因为锁的信息那是海量的信息,搞不好把你的服务器搞歇菜了哈 :
#7
补充一下上面的图,打开SQL Profile,选择显示所有事件,在Locks中选择的跟踪事件为:
Locks:Deadlock graph 会显示死锁图,很容易理解
Deadlock 报告死锁的信息
Deadlock Chain
Locks:Deadlock graph 会显示死锁图,很容易理解
Deadlock 报告死锁的信息
Deadlock Chain
#8
另外,也可以尝试:
--就是会话456阻塞了123
select t.spid, --会话id,比如:123
t.blocked, --是哪个会话阻塞了上面的会话,比如:456
s.text --会话所对应的sql语句
from sys.sysprocesses t
cross apply sys.dm_exec_sql_text(t.sql_handle)s
where blocked <> 0
#1
启用1022,3064跟踪标记,有死锁发生时,自动记录到SQL日志中,以利分析.
#2
#3
--就是会话456阻塞了123
select spid, --会话id,比如:123
blocked --是哪个会话阻塞了上面的会话,比如:456
from sys.sysprocesses
where blocked <> 0
而且出现死锁的时候,会出现两条数据:
spid blocked
123 456
456 123
其实就表示,123和456相互阻塞,也就是死锁
#4
我主要是要知道,出现锁和死锁的是哪些SQL语句
谢谢
谢谢
#5
--查出OjbId大于0的是哪些ID
exec sp_lock
--再查询出对应OjbId
select * from sysobjects where id=OjbId
产生这种错误的原因大有可能是只有begin tran ,执行中因为错误后直接返回,没有执行commit tran或rollback tran
所以应该在begin tran前加上SET XACT_ABORT ON
exec sp_lock
--再查询出对应OjbId
select * from sysobjects where id=OjbId
产生这种错误的原因大有可能是只有begin tran ,执行中因为错误后直接返回,没有执行commit tran或rollback tran
所以应该在begin tran前加上SET XACT_ABORT ON
#6
这个最好是通过sql profiler,能跟踪详细的死锁的信息,不一定要跟踪所有锁的信息,因为锁的信息那是海量的信息,搞不好把你的服务器搞歇菜了哈 :
#7
补充一下上面的图,打开SQL Profile,选择显示所有事件,在Locks中选择的跟踪事件为:
Locks:Deadlock graph 会显示死锁图,很容易理解
Deadlock 报告死锁的信息
Deadlock Chain
Locks:Deadlock graph 会显示死锁图,很容易理解
Deadlock 报告死锁的信息
Deadlock Chain
#8
另外,也可以尝试:
--就是会话456阻塞了123
select t.spid, --会话id,比如:123
t.blocked, --是哪个会话阻塞了上面的会话,比如:456
s.text --会话所对应的sql语句
from sys.sysprocesses t
cross apply sys.dm_exec_sql_text(t.sql_handle)s
where blocked <> 0