/*以此表为例: SELECT * FROM tb 姓名 课程 分数 --------------------- 张三 语文 74 张三 数学 83 李四 语文 74 李四 数学 84 李四 物理 94 */ --新建第一个会话窗口,执行以下语句: BEGIN TRAN UPDATE dbo.tb SET 分数 = 85 WHERE 姓名 = '张三' AND 课程 = '语文' --COMMIT TRAN --新建第二个会话窗口,执行以下语句: UPDATE dbo.tb SET 分数 = 90 WHERE 姓名 = '张三' AND 课程 = '语文' /* 此时第二个窗口一直处于执行状态; 新建第三个会话窗口,用于分析查看阻塞语句; */ --查看锁的信息,更多信息(sp_lock:http://msdn.microsoft.com/zh-cn/library/ms187749.aspx) exec sp_lock; --SELECT * FROM sys.dm_tran_locks; --比第一个信息多些
--可以看到,会话ID号 spid=54 处于等待状态,mode='U'为更新锁 --下面查看 session_id=54 是被什么会话阻塞了. SELECT blocking_session_id,wait_duration_ms,session_id FROM sys.dm_os_waiting_tasks WHERE session_id=54 go --或 EXEC sp_who2 active --BlkBy 被谁阻塞……
--结果为session_id=52阻塞了.接下来看看其运行了什么语句; SELECT t.text FROM sys.dm_exec_connections c CROSS APPLY sys.dm_exec_sql_text (c.most_recent_sql_handle) t WHERE c.session_id = 52
--直接删除session_id = 52的会话,此会话的语句中断,后面的语句正常执行; KILL 52 SELECT * FROM tb /* 姓名 课程 分数 --------------------- 张三 语文 90 张三 数学 83 李四 语文 74 李四 数学 84 李四 物理 94 */
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。