Quantcast
Channel: SAP Business One Application
Viewing all articles
Browse latest Browse all 219

SQL Scripts to find and Kill all the Blocked Process/Query in a database

$
0
0

SQL Server database administrators frequently need in especially development and test environments to find and kill blocked process. Following scripts are useful in that scenario.

 

--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

 

FROMmaster.dbo.sysprocesses

WHERE spid IN(SELECT blocked FROMmaster.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)+';'

FROMMASTER..SysProcesses

WHEREDBId=DB_ID(@DatabaseName)AND SPId <>@@SPId

and spid IN(SELECT blocked FROMmaster.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 intNOTNULL)

INSERT @spid_table

select spid

frommaster.dbo.sysprocesses

where spid in(select blocked frommaster.dbo.sysprocesseswhere blocked <> 0)and blocked = 0

select @max_count =MAX(spid)FROM @spid_table

selecttop 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

selecttop 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)+';'

FROMMASTER..SysProcesses

WHEREDBId=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 ASRequestingText,
h2.TEXT ASBlockingTest,
tl.request_mode
FROMsys.dm_tran_locksAStl
INNER JOINsys.databases dbONdb.database_id=tl.resource_database_id
INNER JOINsys.dm_os_waiting_tasksASwtONtl.lock_owner_address=wt.resource_address
INNER JOINsys.partitionsASpONp.hobt_id=tl.resource_associated_entity_id
INNER JOINsys.dm_exec_connections ec1ONec1.session_id=tl.request_session_id
INNER JOINsys.dm_exec_connections ec2ONec2.session_id=wt.blocking_session_id
CROSSAPPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle)ASh1
CROSSAPPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle)ASh2
GO

 

-- Script to view all current processes / sessions on the server

 

select*frommaster.dbo.sysprocesses

 

 

Regards,
Marcelo Silva Santo

Viewing all articles
Browse latest Browse all 219

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>