USE [DB]
GO
/****** Object: StoredProcedure [dbo].[SP_CHECK_SQL_QEURY_STATUS] Script Date: 4/17/2025 1:45:32 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Wonbae Kim
-- Create date: 3/18/2022
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[SP_CHECK_SQL_QEURY_STATUS]
AS
BEGIN
SET NOCOUNT ON
-- Table variable to hold InputBuffer data
DECLARE @Inputbuffer TABLE
(
EventType NVARCHAR(30) NULL,
Parameters INT NULL,
EventInfo NVARCHAR(4000) NULL
)
-- Table variable to hold running processes information
DECLARE @BusyProcess TABLE
(
SPID INT,
Status VARCHAR(100),
Login VARCHAR(100),
HostName VARCHAR(100),
Client_Net_Address VARCHAR(100),
DBName VARCHAR(100),
Command VARCHAR(200),
CPUTime INT,
DiskIO BIGINT,
LastBatch DATETIME,
ProgramName VARCHAR(200),
EventInfo NVARCHAR(4000), -- extra column to hold actual stored procedure or batch call text
EventTime INT -- time in minutes, a process is running
)
-- Insert all running processes information to table variable
INSERT @BusyProcess ( SPID, Status, Login, HostName, Client_Net_Address, DBName, Command, CPUTime,DiskIO, LastBatch, ProgramName )
SELECT spid,r.status,loginame,hostname, c.client_net_address, (dbid),cmd,cpu,physical_io,last_batch,program_name
FROM SYS.SYSPROCESSES r LEFT OUTER JOIN sys.dm_exec_connections c
on r.spid = c.session_id
WHERE
1 = CASE WHEN r.Status IN ( 'RUNNABLE', 'SUSPENDED' ) THEN 1
--Transactions that are open not yet committed or rolledback
WHEN r.Status = 'SLEEPING' AND open_tran > 0 THEN 1
ELSE 0 END
AND cmd NOT LIKE 'BACKUP%'
AND loginame IS NOT NULL
-- Cursor to add actuall Procedure or Batch statement for each process
DECLARE cur_BusyProcess Cursor
FOR SELECT SPID
FROM @BusyProcess
OPEN cur_BusyProcess
DECLARE @SPID INT
Fetch NEXT FROM cur_BusyProcess INTO @SPID
While ( @@FETCH_STATUS <> -1 )
BEGIN
INSERT @Inputbuffer
EXEC ( 'DBCC INPUTBUFFER(' + @SPID + ')'
)
UPDATE @BusyProcess
SET EventInfo = I.EventInfo,
EventTime = DATEDIFF(MI,LastBatch,GETDATE())
FROM @BusyProcess b
CROSS JOIN @Inputbuffer i
WHERE B.SPID = @SPID
DELETE FROM @Inputbuffer
FETCH NEXT FROM cur_BusyProcess INTO @SPID
END
CLOSE cur_BusyProcess
DEALLOCATE cur_BusyProcess
SELECT * FROM @BusyProcess
END
[MS-SQL] 현재 실행중인 쿼리 보기
2019. 4. 20. 00:23