SQL进程死锁排查

Posted YASUO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL进程死锁排查相关的知识,希望对你有一定的参考价值。

 1 --进程执行状态
 2 SELECT  
 3 der.[session_id],der.[blocking_session_id],  
 4 sp.lastwaittype,sp.hostname,sp.program_name,sp.loginame,  
 5 der.[start_time] AS 开始时间,  
 6 der.[status] AS 状态,  
 7 dest.[text] AS sql语句,  
 8 DB_NAME(der.[database_id]) AS 数据库名,  
 9 der.[wait_type] AS 等待资源类型,  
10 der.[wait_time] AS 等待时间,  
11 der.[wait_resource] AS 等待的资源,  
12 der.[logical_reads] AS 逻辑读次数  
13 FROM sys.[dm_exec_requests] AS der  
14 INNER JOIN master.dbo.sysprocesses AS sp ON der.session_id=sp.spid  
15 CROSS APPLY  sys.[dm_exec_sql_text](der.[sql_handle]) AS dest  
16 WHERE [session_id]>50 AND session_id<>@@SPID  
17 ORDER BY der.[session_id]  
18 GO  
19 
20 
21 
22 --是否堵塞  
23 SELECT spid,blocked,waittime,waittype,waitresource,p.dbid,cpu,physical_io,memusage,open_tran  
24 ,status,login_time,last_batch,hostname,program_name,hostprocess,loginame,cmd,text  
25 FROM master.dbo.sysprocesses p CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) s  
26 WHERE blocked > 0 OR spid IN(SELECT blocked FROM master.dbo.sysprocesses WHERE blocked > 0)  
27 go   
28 
29 
30 -- 是否有未提交进程
31 select spid,blocked,waittime,waittype,waitresource,p.dbid,cpu,physical_io,memusage,open_tran    
32 ,status,login_time,last_batch,hostname,program_name,hostprocess,loginame,cmd,text    
33 from master.dbo.sysprocesses p cross apply sys.dm_exec_sql_text(p.sql_handle) s    
34 where open_tran <> 0    
35 go
36 
37 
38 -- 在执行进程状态
39 SELECT   DB_NAME(er.[database_id]) [DatabaseName]  
40 ,er.[command] AS [CommandType]
41 ,CONVERT(DECIMAL(5, 2), er.[percent_complete]) AS [Complete_Percent]
42 ,er.start_time
43 ,CONVERT(DECIMAL(38, 2), er.[total_elapsed_time] / 60000.00) AS [ElapsedTime_m]  
44 ,CONVERT(DECIMAL(38, 2), er.[estimated_completion_time] / 60000.00) AS [EstimatedCompletionTime_m]
45 ,CONVERT(DECIMAL(38, 2), (er.[total_elapsed_time] / 60000.00 * ((100-er.[percent_complete])/er.percent_complete))) AS [EstimatedCompletionTime_m2]
46 FROM sys.dm_exec_requests AS er  
47 WHERE 1=1
48 and er.[percent_complete] >0
49 --and er.[command] in (‘RESTORE DATABASE‘ ,‘BACKUP DATABASE‘,‘BACKUP LOG‘,‘RESTORE LOG‘)
50 order by er.start_time desc

 

以上是关于SQL进程死锁排查的主要内容,如果未能解决你的问题,请参考以下文章

Java死锁排查

一篇文章搞清JVM死锁问题及排查

排查程序死循环,死锁的方法 ——pstack

java死锁如何排查

java死锁如何排查

java死锁如何排查