当前位置:首页 » 编程语言 » sqlserversplock
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlserversplock

发布时间: 2023-08-27 01:15:43

sqlServer死锁的解除方法

SQL Server死锁使我们经常遇到的问题 下面就为您介绍如何查询SQL Server死锁 希望对您学习SQL Server死锁方面能有所帮助

SQL Server死锁的查询方法

exec master dbo p_lockinfo 显示死锁的进程 不显示正常的进程

exec master dbo p_lockinfo 杀死死锁的进程 不显示正常的进程

SQL Server死锁的解除方法

Create proc p_lockinfo

@kill_lock_spid bit= 是否杀掉死锁的进程 杀掉 仅显示

@show_spid_if_nolock bit= 如果没有死锁的进程 是否显示正常进程信息 显示 不显示

as

declare @count int @s nvarchar( ) @i int

select id=identity(int ) 标志

进程ID=spid 线程ID=kpid 块进程ID=blocked 数据库ID=dbid

数据库名=db_name(dbid) 用户ID=uid 用户名=loginame 累计CPU时间=cpu

登陆时间=login_time 打开事务数=open_tran 进程状态=status

工作站名=hostname 应用程序名=program_name 工作站进程ID=hostprocess

域名=nt_domain 网卡地址=net_address

into #t from(

select 标志= 死锁的进程

spid kpid a blocked dbid uid loginame cpu login_time open_tran

status hostname program_name hostprocess nt_domain net_address

s =a spid s =

from mastersysprocesses a join (

select blocked from mastersysprocesses group by blocked

)b on a spid=b blocked where a blocked=

union all

select |_牺牲品_>

spid kpid blocked dbid uid loginame cpu login_time open_tran

status hostname program_name hostprocess nt_domain net_address

s =blocked s =

from mastersysprocesses a where blocked<>

)a order by s s

select @count=@@rowcount @i=

if @count= and @show_spid_if_nolock=

begin

insert #t

select 标志= 正常的进程

spid kpid blocked dbid db_name(dbid) uid loginame cpu login_time

open_tran status hostname program_name hostprocess nt_domain net_address

from mastersysprocesses

set @count=@@rowcount

end

if @count>

begin

create table #t (id int identity( ) a nvarchar( ) b Int EventInfo nvarchar( ))

if @kill_lock_spid=

begin

declare @spid varchar( ) @标志 varchar( )

while @i<=@count

begin

select @spid=进程ID @标志=标志 from #t whereid=@i

insert #t exec( dbcc inputbuffer( +@spid+ ) )

if @标志= 死锁的进程 exec( kill +@spid)

set @i=@i+

end

end

else

while @i<=@count

begin

select @s= dbcc inputbuffer( +cast(进程ID as varchar)+ ) from #t whereid=@i

insert #t exec(@s)

set @i=@i+

end

select a * 进程的SQL语句=b EventInfo

from #t a join #t b on a id=b id

lishixin/Article/program/SQLServer/201311/22183

⑵ 如何批量杀死sqlserver死锁

如何批量杀死sqlserver死锁
使用sp_lock可以查看锁的信息, 使用kill 可以把产生锁的联接删除。 产生锁,一般是开发过程的处理有问题。 还有就是增加关键字或是索引,减小锁的粒度。