首页 > 数据库 >SQL SERVER 死锁查询存储

SQL SERVER 死锁查询存储

时间:2023-10-09 13:03:29浏览次数:52  
标签:bl lock who SERVER int 死锁 spid SQL select

– exec sp_who_lock 查询哪个库的死锁,存储就建立在哪个库上

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N’[dbo].[sp_who_lock]’) AND type in (N’P’, N’PC’))

DROP PROCEDURE [dbo].[sp_who_lock]

GO


create procedure [dbo].[sp_who_lock]

as

begin

declare @spid int,@bl int,

@intTransactionCountOnEntry int,

@intRowcount int,

@intCountProperties int,

@intCounter int,

@hostname varchar(255)


create table #tmp_lock_who (

id int identity(1,1),

spid smallint,

bl smallint,

hostname varchar(255))


IF @@ERROR<>0 RETURN @@ERROR


insert into #tmp_lock_who(spid,bl,hostname)

select 0 ,blocked,hostname

from (select * from master.dbo.sysprocesses where blocked>0 ) a

where not exists(select * from (select * from master.dbo.sysprocesses where blocked>0 ) b

where a.blocked=spid)

union select spid,blocked,hostname from master.dbo.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 N’现在没有阻塞和死锁信息’ as message

– 循环开始

while @intCounter <= @intCountProperties

begin

– 取第一条记录

select @spid = spid,@bl = bl,@hostname = hostname

from #tmp_lock_who where Id = @intCounter

begin

if @spid =0

select N’引起数据库死锁的是:’ + CAST(@bl AS VARCHAR(10))+ N’进程号,主机名:’ + @hostname + N’其执行的SQL语法如下’

else

select N’进程号SPID:’+ CAST(@spid AS VARCHAR(10))+ N’被’ + N’进程号SPID:’+ CAST(@bl AS VARCHAR(10)) +N’阻塞,其当前进程执行的SQL语法如下’

DBCC INPUTBUFFER (@bl )

end


– 循环指针下移

set @intCounter = @intCounter + 1

end


drop table #tmp_lock_who


return 0

end

标签:bl,lock,who,SERVER,int,死锁,spid,SQL,select
From: https://blog.51cto.com/u_14682436/7772268

相关文章

  • mysql having多个条件
    groupby的个bai数,和having的个数没有什么必然的联系,groupby后面du可以跟多个zhi字段,同样你如果有多个聚合计算dao,当然having后面也可以跟多个聚合条件比如:selectname名字,sum(record)分数,avg(average)平均数fromstudentgroupbynamehavingsum(record)>xxxxxxa......
  • MySQL之分组函数学习
    分组函数:用作统计使用,又称为聚合函数或统计函数 分类:sum求和、avg平均值、max最大值、min最小值、count计算个数 特点:sum、avg一般用于处理数值型max、min、count可以处理任何类型 可以和distinct搭配实现去重的运算selectsum(distinctsalary),sum(sala......
  • MySQL DATEDIFF() 函数
    定义和用法DATEDIFF()函数返回两个日期之间的天数。语法DATEDIFF(date1,date2)date1 和 date2 参数是合法的日期或日期/时间表达式。注释:只有值的日期部分参与计算。实例例子1使用如下SELECT语句:SELECTDATEDIFF('2008-12-30','2008-12-29')ASDiffDate 例子2使用如下SE......
  • mysql插入小数变成整数的解决办法
    mysql输入小数自动变为整数,输了半天也不知道怎么回事。 数据库中字段的类型明显设置的是double,float等小数类型,但输入小数的时候,小数就会变成整数。很是奇怪。 使用的是navicat客户端。 仔细察看了一下,发现是在进行表配置的时候,没有配置小数点,见下图。这里把小数按照需求进行......
  • mysql 8 修改用户权限,限制ip远程连接
    因为数据库的安全的问题,不建议使用root用户用来连接数据库进行操作,所以需要创建一个新用户,并且需要指定ip,这样就会更安全,因为不是指定的ip,那么就连接不到mysql因为有多个服务器需要连接到mysql,并且最好是使用一个账号来连接,因为账号太多不易管理,所以就需要创建一个账号,并且指定......
  • SQL驱动包报错(8.0换成5.17)
    driverClassName=com.mysql.cj.jdbc.Driver,换成:driverClassName=com.mysql.jdbc.Driver  ......
  • SQL SERVER查询数据库表的数量
    SELECTcount(*)FROMsys.objectsWHEREtype='U'  --统计表数量SELECTNAME FROMsys.objectsWHEREtype='U'     --列出表名称或者SELECTCOUNT(*)FROMSysObjectsWhereXType='U'  --统计表数量SELECTNameFROMSysObjectsWhereXType='U'......
  • SQL Server 的版本号大全
    SQLServer的版本号大全参考官方网站如下:https://docs.microsoft.com/zh-cn/troubleshoot/sql/general/determine-version-edition-update-level SQLServer产品版本号和SQLServer产品名称对应关系如下简表 版本模式SQL产品15.0.x.xSQLServer201914.0.x.xSQLServer20171......
  • SQLite 数据库
    SQLite是跨平台的单机版关系型数据库。 SQLite是一个进程内的数据库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,意味着与其他数据库不一样,不需要在系统中配置。就像其他数据库,SQLite引擎不是一个独立的进程,可以按应用程序需求进......
  • 获取mysql库表清单和字段清单——MySQL查询表和字段注释信息
    最近接到一个需求,就是整理现有系统的库表清单和字段清单用于交付一个系统那么多表和字段,这工作量可不小啊作为一个技术人当然不甘于这样认输,果断查找是否可以通过sql查出,最后还是找到了一、前言说明在mysql中,information_schema这个数据库中保存了mysql服务器所有数据库的信息......