数据库死锁

数据库死锁

1:查找锁表进程

select request_session_id spid,
OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks
where resource_type = 'OBJECT'


2.解锁语句,需要将锁表进程 @spid换成查询出来的锁表进程;

declare @spid int
Set @spid = 58 --锁表进程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)


定位锁表脚

--查询进程id = 71的锁表信息
DECLARE @spid bigint = 71 --锁表进程id
SELECT
SPID = er.session_id --进程id
,Status = ses.status
,CommandType = er.command
,SQLStatement = st.text --导致锁表的sql语句
,StartTime = er.start_time
,ObjectName = OBJECT_NAME(st.objectid) --导致锁表的存储过程名称
,ElapsedMS = er.total_elapsed_time
,CPUTime = er.cpu_time
,IOReads = er.logical_reads + er.reads
,IOWrites = er.writes
,LastWaitType = er.last_wait_type
,Protocol = con.net_transport
,ConnectionWrites = con.num_writes
,ConnectionReads = con.num_reads
,ClientAddress = con.client_net_address
,Authentication = con.auth_scheme
FROM sys.dm_exec_requests er
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st
LEFT JOIN sys.dm_exec_sessions ses ON ses.session_id = er.session_id
LEFT JOIN sys.dm_exec_connections con ON con.session_id = ses.session_id
WHERE er.session_id = @spid --锁表进程id
ORDER BY er.blocking_session_id DESC,er.session_id

参考资料:https://blog.csdn.net/yyytttCSDN/article/details/117016474

https://blog.csdn.net/wysmh520/article/details/123047229

https://blog.csdn.net/tmaczt/article/details/82800234

SQLSERVER 数据库死锁的分析,排查(重点):https://www.cnblogs.com/zmmboy/p/15998932.html

posted @   Raymon撸码记  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示