–Find All the Blocked Processes
SELECT
spid,
status,
loginame=SUBSTRING(loginame,1,12),
hostname=SUBSTRING(hostname,1, 12),
blk = CONVERT(char(3), blocked),
dbname=SUBSTRING(DB_NAME(dbid),1, 10),
cmd,
waittype
FROM master.dbo.sysprocesses
WHERE spid IN (SELECT blocked FROM master.dbo.sysprocesses)
–Kill all the Blocked Processes of a Database
DECLARE @DatabaseName nvarchar(50)
Set the Database Name
SET @DatabaseName = N’Datbase_Name’
Select the current Daatbase
SET @DatabaseName = DB_NAME()
DECLARE @SQL varchar(max)
SET @SQL = ”
SELECT @SQL = @SQL + ‘Kill ‘ + Convert(varchar, SPId) + ‘;’
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId
and spid IN (SELECT blocked FROM master.dbo.sysprocesses)
–You can see the kill Processes ID
–SELECT @SQL
–Kill the Processes
EXEC(@SQL)
Or You can use the following script
— Script to kill all blocked processes
declare @max_count int, @count int, @sqlstring varchar(100)
declare @spid_table table (spid int NOT NULL)
INSERT @spid_table
select spid
from master.dbo.sysprocesses
where spid in (select blocked from master.dbo.sysprocesses where blocked <> 0) and blocked = 0
select @max_count = MAX(spid) FROM @spid_table
select top 1 @count = spid from @spid_table
while @count <= @max_count
begin
select @sqlstring = ‘kill ‘ + CONVERT(varchar(4), @count)
exec(@sqlstring)
print @sqlstring
IF @count = @max_count
begin
break
end
ELSE
BEGIN
select top 1 @count = spid FROM @spid_table where spid > @count
end
end
Similarly DBA can kill all the Processes of a Database as
— Kill all the Processes of a Database
DECLARE @DatabaseName nvarchar(50)
–Set the Database Name
SET @DatabaseName = N’Datbase_Name’
Select the current Daatbase
SET @DatabaseName = DB_NAME()
DECLARE @SQL varchar(max)
SET @SQL = ”
SELECT @SQL = @SQL + ‘Kill ‘ + Convert(varchar, SPId) + ‘;’
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId
–You can see the kill Processes ID
–SELECT @SQL
–Kill the Processes
EXEC(@SQL)
—Identify the blocking query
SELECT
db.name DBName,
tl.request_session_id,
wt.blocking_session_id,
OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,
tl.resource_type,
h1.TEXT AS RequestingText,
h2.TEXT AS BlockingTest,
tl.request_mode
FROM sys.dm_tran_locks AS tl
INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id
INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address =wt.resource_address
INNER JOIN sys.partitions AS p ON p.hobt_id =tl.resource_associated_entity_id
INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id =tl.request_session_id
INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id =wt.blocking_session_id
CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1
CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2
GO
-- Script to view all current processes / sessions on the server
select * from master.dbo.sysprocesses
'Database > Query' 카테고리의 다른 글
DELETE 복원 프로시저 (0) | 2020.10.20 |
---|---|
EXEC와 동적(adhoc) 쿼리 (0) | 2020.10.05 |
오래된 커서 (0) | 2020.09.11 |
테이블 명세서 (0) | 2020.08.29 |
sp_who3 (0) | 2020.08.29 |