USE master
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE procedure sp_nrSpidByStatus
@status varchar(20) = 'runnable'
as
/*
exec sp_nrSpidByStatus -- all spids whith status runnable
exec sp_nrSpidByStatus 'sleeping' -- all spids whith status sleeping
exec sp_nrSpidByStatus 'background' -- all spids whith status background
exec sp_nrSpidByStatus 'sleeping' -- all spids whith status sleeping
exec sp_nrSpidByStatus 'all' -- all spids
exec sp_nrSpidByStatus 'blk' -- all blocked or blocking spids
exec sp_nrSpidByStatus '74' -- an individual spid - also gives subthreads
select * from master..sysprocesses where spid = 56
*/
set transaction isolation level read uncommitted
set nocount on
declare @cmd varchar(3000)
declare @buf varchar(3000) ,
@id int ,
@spid int ,
@maxSpid int
create table #spid (spid int, command varchar(2000) null)
create table #temp (x varchar(100), y int, s varchar(2000), id int identity (1,1))
create table #spids (spid int)
if isnumeric(@status) = 1
begin
insert #spids select @status
end
else if @status = 'blk'
begin
insert #spids
select spid from master..sysprocesses where blocked <> 0
union
select blocked from master..sysprocesses where blocked <> 0
end
else
begin
insert #spids
select spid from master..sysprocesses
where (status = @status or @status = 'all') and ecid = 0
end
select @spid = 0 ,
@maxSpid = max(spid)
from #spids
while @spid < @maxSpid
begin
select @spid = min(spid) from #spids where spid > @spid
select @cmd = 'dbcc inputbuffer (' + convert(varchar(10),@spid) + ')'
delete #temp
insert #temp
exec (@cmd)
select @id = 0 ,
@buf = ''
select @buf = @buf + replace(replace(s,char(10),'|'),char(13),'|')
from #temp
insert #spid
select @spid, @buf
end
select blk = case
when s.blocked <> 0 then convert(varchar(3),s.blocked)
else ' '
end ,
spid = convert(varchar(4),#spid.spid) ,
s.physical_io ,
status = left(s.status,12) ,
last_batch = convert(varchar(23),s.last_batch,121) ,
s.cmd ,
#spid.command ,
login_time = convert(varchar(23),s.login_time,121) ,
s.HostName
from #spid ,
master..sysprocesses s
where s.spid = #spid.spid
and (ecid = 0 or isnumeric(@status) = 1)
order by s.status, #spid.spid
drop table #spid
drop table #temp
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SELECT s.session_id AS spid
,s.[status]
,t.[text] AS lastSQLText
,s.login_name AS loginName
,s.[host_name] AS hostName
,r.blocking_session_id AS blkBy
,r.wait_time
,r.wait_type
,r.last_wait_type
,r.percent_complete
,DB_NAME(s.database_id) AS dbName
,r.command
,s.cpu_time AS cpuTime
,s.reads + s.writes AS diskIO
,s.last_request_end_time AS lastBatch
,s.[program_name] AS programName
,r.request_id
,CASE
WHEN s.transaction_isolation_level = 0 THEN 'Unspecified'
WHEN s.transaction_isolation_level = 1 THEN 'ReadUncommitted'
WHEN s.transaction_isolation_level = 2 THEN 'ReadCommitted'
WHEN s.transaction_isolation_level = 3 THEN 'Repeatable'
WHEN s.transaction_isolation_level = 4 THEN 'Serializable'
WHEN s.transaction_isolation_level = 5 THEN 'Snapshot'
END AS transactionIsolationLevel
,OBJECT_NAME(t.objectid) AS objectName
FROM sys.dm_exec_sessions AS s
LEFT JOIN sys.dm_exec_requests AS r ON r.session_id = s.session_id
LEFT JOIN sys.dm_exec_connections AS c ON c.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) AS t
WHERE s.is_user_process = 1
AND s.[program_name] = 'Internet Information Services'
AND DB_NAME(s.database_id) = 'DBNAME'
'sql server' 카테고리의 다른 글
[ms sql] SQL 서버이름 변경 (0) | 2020.08.05 |
---|---|
[ms sql] 그룹별 최근데이터 조회 (0) | 2020.01.20 |
[ms sql] 인덱스 조각화 (0) | 2019.11.04 |
[ms sql] 쿼리 로그 조회 (0) | 2019.08.09 |
[ms sql] 데이터 및 로그파일(mdf, ldf) 용량 축소 (0) | 2019.03.05 |