查出引起死锁的进程和SQL语句
通过创建一个系统存储过程sp_who_lock.sql。代码如下:
if exists (select * from dbo.sysobjects
where id = object_id(N'[dbo].[sp_who_lock]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_who_lock]
GO
use master
go
create procedure sp_who_lock
as
begin
declare @spid int,@bl int,
@intTransactionCountOnEntry int,
@intRowcount int,
@intCountProperties int,
@intCounter int
create table #tmp_lock_who (
id int identity(1,1),
spid smallint,
bl smallint)
IF @@ERROR<>0 RETURN @@ERROR
insert into #tmp_lock_who(spid,bl) select 0 ,blocked
from (select * from sysprocesses where blocked>0 ) a
where not exists(select * from (select * from sysprocesses
where blocked>0 ) b
where a.blocked=spid)
union select spid,blocked from sysprocesses where blocked>0
IF @@ERROR<>0 RETURN @@ERROR
-- 找到临时表的记录数
select @intCountProperties = Count(*),@intCounter = 1
from #tmp_lock_who
IF @@ERROR<>0 RETURN @@ERROR
if @intCountProperties=0
select '现在没有阻塞和死锁信息' as message
-- 循环开始
while @intCounter <= @intCountProperties
begin
-- 取第一条记录
select @spid = spid,@bl = bl
from #tmp_lock_who where Id = @intCounter
begin
if @spid =0
select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10))
+ '进程号,其执行的SQL语法如下' else
select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
DBCC INPUTBUFFER (@bl )
end
-- 循环指针下移
set @intCounter = @intCounter + 1
end
drop table #tmp_lock_who
return 0
end
需要的时候直接调用: sp_who_lock
转载于:https://blog.51cto.com/xiao53771/1336311
查出引起死锁的进程和SQL语句相关推荐
- MYSQL死锁之路 - 常见SQL语句的加锁分析
这篇博客将对一些常见的 SQL 语句进行加锁分析,看看我们平时执行的那些 SQL 都会加什么锁.只有对我们所写的 SQL 语句加锁过程了如指掌,才能在遇到死锁问题时倒推出是什么锁导致的问题.在前面的博 ...
- MYSQL解决死锁之路 - 常见 SQL 语句的加锁分析
目录 前言 一.基本的加锁规则 二.简单 SQL 的加锁分析 2.1 聚簇索引,查询命中 2.2 聚簇索引,查询未命中 2.3 二级唯一索引,查询命中 2.4 二级唯一索引,查询未命中 2.5 二级非 ...
- SQl语句的效率问题
SQL语句效率 1. SQL优化的原则是:将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量. 调整不良SQL通常可以从以下几点切入: ...
- oracle 查看连接数语句,Oracle数据库中查询连接数的实用sql语句
查询数据库中的连接信息.其中SQL_COMMAND 是可以释放进程的sql语句: select A.SID,B.SPID,A.SERIAL#,a.lockwait,A.USERNAME,A.OSU ...
- sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取 原文:sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取 在多人开发中最头疼的是人少事多没有时间进行codereview ...
- oracle 根据spid查sql,探讨:Oracle数据库查看一个进程是如何执行相关的实际SQL语句...
Oracle数据库查看一个进程是如何执行相关的实际sql语句 代码如下: SELECT b.sql_text,sid,serial#,osuser,machine FROM v$session a,v ...
- Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
这篇文章主要介绍了Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)的相关资料,需要的朋友可以参考下 在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映.这个时候, ...
- mysql kill_Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映.这个时候,就需要kill掉某个正在消耗资源的query语句即可, KILL命令的语法格式如下: KILL [CONNECTION | ...
- 查看锁表进程SQL语句
查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao ...
最新文章
- 对象冒充_使用您的精神探照灯进行冒充冒名顶替综合症
- 个性化推荐系统研究热点之用户画像
- Java实现最小堆一
- 无刷新删除 Ajax,JQuery
- 家用计算机内存最大是多少,电脑支持最大内存是多少?选用多大内存才合理?方法技巧要知道...
- android中view刷新界面,Android view invalidate()使用
- atomic原子类实现机制_深入了解Java atomic原子类的使用方法和原理
- 涨知识 | 100个中国最难读的地名,第一个就折了
- akka的介绍_Akka笔记–演员介绍
- oracle安装 插件的执行方法失败_解决 VS Code 中 golang.org 被墙导致的 Go 插件安装失败问题...
- Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log
- leetcode 两个排序的中位数 python
- O2O营销方法有哪些 O2O营销模式的特点是什么?
- win10查看激活时间(Win10查看激活信息)
- 读取Xilinx FPGA芯片的唯一ID号DNA
- Chrome浏览器下调试和动态修改网页JavaScript
- Appium TestNg Maven Android Eclipse java简单启动实例
- Could not find any downloads that satisfy the requirement opencv-python
- 如何对音频文件进行剪辑
- 财富杂志:谷歌市场成功带来的10大启示